Pokémon GO が数百万ものプレーヤーを獲得するのに一役買ったインフラストラクチャについては、私たちの仲間が参加している技術コミュニティの間でも話題を呼んでいます。この投稿記事は、Niantic と Google Cloud チームが、過去最大級の人気を誇るこのモバイル ゲームを支えてきた主要コンポーネントの一部に光を当てるためにまとめたものです。
運命共同体
私たち Google は 9 月末に開催した
Horizon イベントで、Google Customer Reliability Engineering(CRE : 顧客信頼性エンジニアリング)を発表しました。CRE とは、Google の技術スタッフがお客様のチームと連携し、お客様の重要なクラウド アプリケーションの信頼性と成功に関する責任を共有する新しいエンゲージメント モデルです。
そして、Google CRE が最初に適用されたお客様が Niantic であり、最初の対象プロジェクトが Pokémon GO のリリースでした。CRE にとっては、またとない試金石となったのです。
Pokémon GO がオーストラリアとニュージーランドでリリースされると、すぐにプレーヤーのトラフィックは急増し、15 分もたたないうちに Niantic の予想をはるかに上回りました。Niantic のプロダクト チームとエンジニアリング チームにとっては、大ヒットの最初の兆候でした。
Niantic は Google CRE に電話をかけ、インフラストラクチャの増強を依頼しました。翌日に控えた米国でのリリースを見越してのことです。Niantic と Google Cloud チーム(CRE、SRE、開発、プロダクト、サポート、経営の各チーム)は、新規 Pokémon トレーナーの殺到に備えました。Pokémon GO は引き続きプレーヤー トラフィックの事前予想をことごとく突破すると見込まれたからです。
Pokémon の世界を構築
Pokémon GO は Google Cloud の多くのサービスを利用したモバイル アプリケーションですが、なかでも
Google Cloud Datastore が Pokémon GO の全体的な人気を端的に示すバロメータとなりました。Pokémon の世界を記録するプライマリ データベースとしての役割を果たしているからです。
上述のグラフは Cloud Datastore の統計をまとめたものです。Niantic のチームは、このグラフの “1X” のプレーヤー トラフィックを目標とし(橙色)、トラフィックが最大の場合(インフラストラクチャにかかる負荷の観点から見ると最悪のケース)でその 5 倍(5X)程度になると見積もっていました(赤色)。
ところが、Pokémon GO はすぐに大人気となり、プレーヤー トラフィックは当初目標の 50 倍、想定最大量の 10 倍に上ったのです(緑色)。これに対応するべく、Google CRE チームはトラフィックの記録的な急増に備えて、追加キャパシティをシームレスにプロビジョニングしました。
もっとも、万事順調な滑り出しとなったわけではありません。安定性に問題が生じたときには、Niantic と Google のエンジニアは順序立てて一つ一つ問題に対処し、迅速にソリューションを編み出して展開しました。Google CRE チームは Niantic のチームと協力し、Google Cloud の中核エンジニアおよびプロダクト マネジャーの専門ノウハウを借りながら、Pokémon GO のアーキテクチャのすべての要素をレビューしました。
新規プレーヤーが一気に数百万人に膨れ上がったこのゲームの舞台裏では、こうした奮闘が繰り広げられていたのです。
コンテナが支える Pokémon GO
Pokémon GO は、世界的な現象を巻き起こしたモバイル ゲームであるだけでなく、コンテナ ベース開発の最もエキサイティングな実践例の 1 つでもあります。このゲームのアプリケーション ロジックは、オープンソースの
Kubernetes プロジェクトをベースにした
Google Container Engine(GKE)で実行されます。
Niantic が GKE を選定したのは、コンテナ クラスタを世界規模でオーケストレーションできるからです。そうすれば、チームはプレーヤーに喜ばれる面白い変更をデプロイすることに集中できます。こうして Niantic は Google Cloud を利用して、数百万人のプレーヤーが楽しめるサービスとして Pokémon GO を開発、運用し、継続的に調整や改良を施してきました。
Niantic と Google CRE チームが実行に移した大胆な技術的試みの 1 つが、コンテナ クラスタのノードを 1,000 以上増やせる GKE の新バージョンへのアップグレードです。それは、大きな期待が寄せられていた日本での Pokémon GO のリリースに備えたものでした。
新バージョンへの移行は、飛行機のエンジンを飛行中に交換するようなものでした。数百万人のプレーヤーが新規登録して Pokémon の世界に加わる中、既存プレーヤーにもそのままゲームを続けてもらいながら GKE をアップグレードするわけです。言うまでもなく慎重な対策が取られました。
このアップグレードの後、Niantic と Google のエンジニアは共同で、
Network Load Balancer に代えて、より洗練された新しい
HTTP/S Load Balancer をデプロイしました。HTTP/S Load Balancer は、HTTPS トラフィック向けに作られたグローバル システムです。きめ細かな管理機能や高速接続をユーザーに提供し、全体的なスループットを向上させるため、Pokémon GO のトラフィックの量や種類に適しています。
米国でのリリースを教訓として、効果的であることがわかった方策(十分なキャパシティ プロビジョニング、アーキテクチャが改良された最新の GKE の利用、HTTP/S Load Balancer へのアップグレード)は、Pokémon GO の日本でのリリースでも功を奏しました。2 週間前の米国リリース時と比べて 3 倍のユーザーが新規登録しましたが、問題は発生しませんでした。
Niantic など多くのお客様をサポートする Google Cloud の GKE / Kubernetes チーム
以下は補足情報です。
- Pokémon GO のゲームの世界は、Google Cloud の10 数種類のサービスを利用して実現されました。
- Pokémon GO は、Google Container Engine での Kubernetes の過去最大のデプロイ例です。クラスタのスケールと、対応するスループットにより、多数のバグが発見、修正され、オープンソース プロジェクトにマージされました。
- Pokémon GO の膨大なプレーヤーをサポートする目的で、Google は Niantic の Container Engine クラスタのために数万ものコアをプロビジョニングしました。
- Google のグローバル ネットワークは、共有されたゲームの世界の Pokémon トレーナーに影響を及ぼす全体的なレイテンシを低減することに貢献しました。ゲーム トラフィックは、移動中の大半は Google のプライベート ファイバー ネットワークを通過し、信頼性の高い低レイテンシのエクスペリエンスを世界中のプレーヤーに提供します。また、海底でも Google ネットワークを通過します。
Niantic による Pokémon GO のリリースは、私たち Google Cloud にとって、総力を挙げて対応する必要があるプロジェクトでした。半ダース以上のチームすべてが十分な情報に基づいて迅速な判断を下すことが要求されました。
一方、Niantic の側でも、このような巨大規模のゲームを野心的な計画のもとで展開するためには、そのインフラストラクチャを構成する Google Cloud プロダクトの設計担当エンジニアリング チームから、アーキテクチャや運用に関するベスト プラクティスについて直接アドバイスを受ける必要がありました。
最後に、Google CRE チームを代表して言わせていただくと、世界中の多くの人を楽しませる、こうした記憶に残るプロダクトのリリースに参加できたことは、私たちにとってかけがえのない喜びです。
* この投稿は米国時間 9 月 29 日、Director of Customer Reliability Engineering である Luke Stone によって投稿されたもの(投稿はこちら)の抄訳です。
- Posted by Luke Stone, Director of Customer Reliability Engineering
クラウドとビッグデータを使い、高度の管理社会を作り平和な日常を作れるのか?高齢者は戦争の矛盾を知り、苦労と親孝行をして来た。世を儚む時間もカネもないのです。政治にカネがかかるのは当然。しかし政治家が結果責任を負わず、貧乏と言う境遇を無視してはいけない。いまのPCは金の成木になってしまった。これが技術者のあり方なのか?
返信削除ココで書くことではないでしょう。
削除it's beautiful post.
返信削除برای دانلود دیسکورد حتما از سای تک استفاده کنید