一般的な開発スタイルとして、1台のサーバ内でシステムを構築するプロジェクトは多いと思います。しかし本番環境を構築しようと思うと、多くの処理を熟す必要があるため高性能なサーバを利用しますし、システムを停止させてはいけないため可用性のことも考慮し複数台のサーバでシステムを構築するでしょう。ただインフラ費用はその分高くつきます。可用性が高く、且つインフラ費用が安く抑えることができるシステムはないのでしょうか?そこで今回はGoogle Cloud PlatformのGoogle App Engineを利用することによりインフラ費用を削減した事例を紹介します。
広告管理システム
スマートフォンゲームの無料カジュアルゲームは、ゲーム内に広告を表示することで利益を得ています。また表示する広告は1社のものだけでなく、複数社の広告を表示します。なぜなら、広告によって得られる収入が大きく変動するからです。担当者がその日入手した情報を元に、表示する広告の優先順位を管理するためのシステムが必要でした。
従来の広告管理システム
ある企業の広告管理システムはAmazon Web System (以下 AWS) 上に構築されており、構成は1つのゲームに対して以下の通りでした。
- Amazon Elastic Compute Cloud (EC2) x 2台
- Amazon Relational Database Service (RDS) x 2台
EC2が2台構成なのは、サーバの負荷を分散させるため、ロードバランサより2台のサーバに分けていました。またRDSが2台構成なのは、可用性を高めるため、ホットスタンバイしていた結果です。またゲーム数が4本あったため、同様なシステムが4つありました。4つのゲームの各システムは一見すると同じシステムにまとめれば良いように思われますが、各ゲームで異なるシステムが含まれていたり、1つのゲームに大きな負荷が掛かることで、別のゲームに影響が出ないようにと考えられた構成のようでした。これにより、毎月合計10万円以上のインフラ費用が発生していました。
広告を管理し収益を最大限に引き出そうとしても、そのシステムが重荷になっては元も子もありません。一部のゲームは、人件費を含めると広告を管理しないほうが収益が上がる結果となってしまいました。
新しい広告管理システム
そこでこのインフラ費用を抑えるべくシステムの改修を行うことになりました。ポイントは、次の3点です。
- 4つの広告管理システムを1つ集約する
- インフラ費用を抑える
- 可用性の高いシステム
- 急激なアクセスにも耐えうることができるシステム
最初の1点について、各ゲーム開発エンジニアにヒアリングを行いましたが、4つのシステムを単純に一つにすることは、サーバシステムの変更だけでは完結しないため、各ゲームのエンジニアにも仕様変更の協力をお願いしました。残りの3つについては、高可用性・高耐久性でインフラ費用を抑えるなど一見矛盾しているようにも思えますが、これを実現できるのがGoogle App Engine (GAE) です。
GAEは、トラフィック量に合わせて自動でインスタンスを追加・削除してくれます。しかも、インスタンスの追加に要する時間はミリ秒単位であり、高可用性・高耐久性に優れています。またGAEの料金は、主に立ち上がっているインスタンスの台数に寄ります。アクセスが少ないときは1台のみのインスタンスが稼働しており、アクセスの増減に伴いインスタンスも増減するため、常に最適なインスタンス台数が立ち上がっており、インフラ費用も最小限に抑えることができます。新しいシステムの構成は次の通りです。
従来はデータベースにMySQLを利用していましたが、新しいシステムではGoogle Cloud Datastore (GCD) を利用しました。このGCDはサーバレスであるため、高可用性に優れています。ただ一点のみ心配がありました。それはGCDの料金が、アクセス数に比例することです。そこで、設定をファイルとしてGoogle Data Storageに保存する方法を取りました。この高可用性・高耐久性に優れた構成のインフラ費用は、なんと毎月1千円未満(無料枠を含む)に抑えることができました。
まとめ
従来毎月10万円以上要していたシステムを、各ゲーム開発エンジニアの協力の下、Google Cloud PlatformのGoogle App Engineを利用することにより、毎月1千円未満と1/100までインフラ費用を削減できました。従来の一般的なシステム構成よりも、システムに適したサービスを選定することで、インフラ費用がこれほどまでに変わるものです。