真のサーバレスアーキテクトとサーバレス時代のゲーム開発・運用

 真のサーバレスアーキテクトとサーバレス時代のゲーム開発・運用

Serverlessconf Tokyo 2017 で発表した資料です。

こちらも御覧ください → https://gs2.io/

62340514ee3033d54d79c9e7a3db68d5?s=128

Kazutomo Niwa

November 03, 2017
Tweet

Transcript

  1. 真のサーバレスアーキテクトと サーバレス時代のゲーム開発・運⽤ Game Server Services 株式会社 代表取締役社⻑CEO 丹⽻ ⼀智

  2. ⾃⼰紹介 丹⽻ ⼀智(にわ かずとも) セガ・任天堂で約10年間ゲーム開発・サーバ開発の仕事に従事 昨年 Game Server Services 株式会社

    を設⽴ 昨年末からサービスの提供を開始。 Game Server Services, Inc. https://gs2.io
  3. Game Server Services(GS2) ネットワーク対応ゲームに使⽤できるBaaSを提供 めざせ、ゲームサーバ界の Unity! ⼤⼿メーカー ⇒ サーバエンジニアのリソース不⾜解消 ⇒

    アプリエンジニアだけでプロトタイピング 中⼩メーカー・独⽴系デベロッパー ⇒ サーバエンジニア無しでゲームを作れるように Game Server Services, Inc. https://gs2.io
  4. 安定した⾼い性能を低コストを実現 BaaSとしてサービス提供 ⇒ 秒間数万リクエストを常時捌けることを保証したい ⇒ 仮想サーバで実現するには採算が合わない フルサーバレスアーキテクチャで設計 ⇒ 従量課⾦のマネージドサービスを組み合わせて実装 ⇒

    アクセス量に対応して柔軟にスケールしつつ、 ビジネススケールにコストが⽐例するように サーバレスだから実現できる事業。 Game Server Services, Inc. https://gs2.io
  5. 真のサーバレスアーキテクト Game Server Services, Inc. https://gs2.io

  6. 真のサーバレスアーキテクト サーバレス時代の設計者に求められる技能 ⇒ 適切な箇所で適切なサービスを適⽤できるスキル ⇒ 各マネージドサービスの性能・特性・コストを把握 「 CloudDataFlow でサーバレスストリーム分析だー」 「秒間1個もデータ流れてこないですけどね」

    「DynamoDB で我が社もサクセス!」 「1%のデータへのアクセスが9割なんですけどね」 やりたかっただけのサーバレスアーキテクトにならないように! Game Server Services, Inc. https://gs2.io
  7. お願い GS2 のサービス開発で得た知⾒を披露します これは、GS2 の安定性や確かな技術⼒を裏付けるため 当然、⾃社での開発に⽣かしていただいても問題ないです でも、是⾮ GS2 の名前も覚えて帰ってください! Game

    Server Services, Inc. https://gs2.io
  8. コールドスタート対策 AWS Lambda は初回起動にレイテンシが発⽣ ⇒ GS2 は Python を採⽤ ⇒

    1つの Lambda ファンクションに全ロジックを⼊れてる ⇒ API Gateway のエンドポイントごとに、 どのロジックを実⾏するかをパラメータで渡している ⇒ コール⽐率の低いエンドポイントでも コールドスタートを回避できる Game Server Services, Inc. https://gs2.io
  9. ログ収集 FaaS は⼯夫しないと綺麗なログが残らない ⇒ Cloud Watch Logs に出てるけど コンテナ毎にストリームが分かれて使いづらい ⇒

    Lambda ファンクションの先頭で 受け取ったイベントの内容を Kinesis Firehose に書き出し ⇒ Python のデコレータを使ってフックしてる ⇒ S3のPUTイベントでログを仕分けて BigQuery に書き出し ⇒ エラーログは Slack に通知 Game Server Services, Inc. https://gs2.io
  10. アクティビティ収集 GS2ではAPIコール回数などをグラフで確認できる ⇒リソースごとに Cloud PubSub のトピックを⽤意 ⇒イベントが発⽣するごとに情報を流す ⇒ Cloud PubSub

    の情報を BigQuery に書き出し 直接 BigQuery に書き込まないのはなぜ? ⇒ バッファリングして書いた⽅が安い SQS じゃなくて Cloud PubSub なのはなぜ? ⇒ スループットの問題 Kinesis じゃないのはなぜ? ⇒ 対象リソース毎の仕分け⾏程が必要になるから Game Server Services, Inc. https://gs2.io
  11. ポーリング問題 FaaS によるサーバシステムは⾮同期処理の実装が⾟い ⇒ たとえば、マッチメイキング ⇒ 処理が終わるまで待つとがタイムアウトする ⇒ リクエストを出したあと、処理が終わったかポーリング ださい

    ⇒ 処理が終わったらサーバから クライアントにプッシュ通知したい ⇒ FaaS では簡単にはいかない Game Server Services, Inc. https://gs2.io
  12. プッシュ通知の実現 コネクションを張りっぱなしにするサーバが必要 ⇒ ⾺⿅正直に設計すると仮想サーバが無限に並ぶ GS2 ではプッシュ通知を AWS IoT で実現! ⇒

    名前はアレだけど、IoT以外にも使える ⇒ MQTT/WebSocket で通信 ⇒ 10億のデバイスが接続しても⼤丈夫 GS2 では通知対象がオフラインの時にモバイルプッシュ通知に 転送する仕組みも実装 Game Server Services, Inc. https://gs2.io
  13. トランザクション問題 DynamoDB にはトランザクション機能が無い ⇒ 魔法⽯を管理するサービスを提供中 ⇒ 資⾦決済法に該当するおそれのあるゲーム内通貨 ⇒ 残⾼管理や取引履歴は正確に記録する義務が発⽣ ⇒

    Cloud DataStore を採⽤ ⇒ パフォーマンスを引き出すテクニックが DynamoDB とは⼤きく異なるので、注意が必要 Game Server Services, Inc. https://gs2.io
  14. マイクロサービス間の情報保全 GS2はマイクロサービスを組み合わせてゲームを作る思想 ⇒ マイクロサービス間のデータの受け渡しに ⼀旦クライアントが挟まることも ⇒ 暗号鍵を管理するマイクロサービスを提供 ⇒ APIを経由して暗号化・復号化が可能 ⇒

    サーバ⽤のアクセスポリシーでのみ暗号化・復号化可能 ⇒ マイクロサービスは暗号化した情報をクライアントに返す ⇒ クライアントはそのまま別のマイクロサービスに渡す Game Server Services, Inc. https://gs2.io
  15. アクセス権限管理 GS2 では AWS の IAM を模したポリシー管理を提供 ⇒ Lambda 関数の先頭でポリシー判定

    Lambda をコール ⇒ Python のデコレータで実装 ⇒ ポリシー判定 Lambda はAPIの呼び出しを許可するかを ポリシードキュメントから判定して応答 ポリシー判定 Lambda を独⽴させているのはなぜ? ⇒ ポリシードキュメントのキャッシュヒット率を⾼めるため Game Server Services, Inc. https://gs2.io
  16. マネージメントコンソール GS2にもマネージメントコンソールが存在します ⇒ サーバレスで実現したかった ⇒ ⼀部プライベートAPIを使⽤して仕様を実現している ⇒ HTML+js では実現できない ⇒

    やむなく EC2 で運⽤していた ⇒ Google App Engine Standard が Java8 に対応 ⇒ GAした当⽇にリリース ⇒ はれてマネージメントコンソールもサーバレス化 Game Server Services, Inc. https://gs2.io
  17. Google App Engine の優れている点 モノリシックな設計のままサーバレス化できる ⇒ まったくそのままというのはさすがに無理 ⇒ GAE を⼀切意識していなかったが⼤部分が流⽤できた

    FaaS は設計思想が全然違う ⇒イチから設計しないと動かせない 学習コストを抑えてサーバレス化を狙うならGAEが最善⼿ Game Server Services, Inc. https://gs2.io
  18. マイグレーション時のポイント ホワイトリストAPI ⇒ 使えないAPIがある ⇒ 請求書のPDF出⼒で引っかかった ⇒ ローカルサーバだと例外が出るけど、 デプロイしたら動くことに気づく ⇒

    Java8 ではホワイトリストAPIが無くなった ⇒ PDF出⼒もデプロイしたら動いた ⇒ バグ報告済みなのでそのうち直るはず GAE Java8 はめっちゃ⾃由度が⾼くなった Game Server Services, Inc. https://gs2.io
  19. マイグレーション時のポイント データベース ⇒ 管理者アカウントなどで⼀部 MySQL を使っていた ⇒ Cloud DataStore で再実装した

    スレッド ⇒ GS2 内の Cloud Formation に相当するサービスで使⽤ ⇒ TaskQueue を使った実装に再実装した コールドスタート ⇒ マイクロサービス毎に分かれていたのを統合 Game Server Services, Inc. https://gs2.io
  20. 正直、サーバレスでどこまで作れる? 低レイテンシ通信したい⽤途には今ある⼿札では厳しい GS2 にはマルチプレイ⽤のパケット中継サーバがあるけど、こ こだけは仮想サーバ でも、こんな厳しい要件はこのケースしか無いと思う REST API で実装しているような機能であれば、確実にサーバレ ス化可能

    今回紹介したプッシュ通知の仕組みを使えば、サーバサイドから イベントをキック出来るので、設計の幅も広がる Game Server Services, Inc. https://gs2.io
  21. サーバレス時代のゲーム開発 Game Server Services, Inc. https://gs2.io

  22. ゲームサーバ開発の現状 ゲームサーバの機能の⼤部分はゲームの⾯⽩さに直結しない ⇒ プレゼントボックスとか、ログインボーナスとか ⇒ なのになぜか何回も作ってる ゲーム開発者が成すべきことは何? ⇒ かっこいいサーバシステムを作ること? ⇒

    企画の細かい要求を全て満たしたゲームを作ること? ⇒ その「オリジナリティ」溢れた仕様は ゲームにとって本当に必要だとおもって実装してる? FaaS や PaaS でサーバレスもいいけど、 GS2 のような Functional SaaS を使うのもサーバレス Game Server Services, Inc. https://gs2.io
  23. GS2 によって得られるメリット さらば。退屈なサーバシステム開発。 GS2 の提供する機能は⽇々増えている ⇒ サービス開始から1年でマイクロサービスの種類は10超 GS2 の提供するサービスで仕様が満たせる場合 ⇒

    アプリエンジニアだけで開発可能 ⇒ GS2 SDK は Unity 向けのものも提供中 Game Server Services, Inc. https://gs2.io
  24. GS2 によって得られるメリット さらば。サーバダウン。 未だにローンチ時のサーバダウンは無くならない ⇒ 設計ミス、バグが原因 全ての原因は再開発していること そろそろ この無限ループから抜け出しましょう Game

    Server Services, Inc. https://gs2.io
  25. GS2 によって⽣じるデメリット 詫び⽯がもらえなくなる。 安定した GS2 によって、詫び⽯が無くなる ⇒ 無課⾦プレイヤーからすれば由々しき⾃体 ⇒ ゲームの継続率にも悪い影響

    どうやって予想外のご褒美をユーザに与えるかが課題 Game Server Services, Inc. https://gs2.io
  26. BaaSを使うための意識改⾰ 僕たちがやりたい仕様を実現できるの? ⾃分で完全にコントロールしていた状態から 他⼈のプラット フォームに乗っかる場合、不透明感が不安だったり制限が息苦し く感じる これはオンプレミスのサーバからIaaSへ変わったときや、ゲーム エンジンが10年くらい前に通った道 その⾏き着く先は今の皆さんなら理解しているはず Game

    Server Services, Inc. https://gs2.io
  27. サーバレス時代の運⽤ Game Server Services, Inc. https://gs2.io

  28. プラットフォーマーと仲良く ベンダーロックイン ⇒ 仮想サーバであれば、他の事業者に移したりできた ⇒ マネージドサービスにおいてロックインは避けられない ⇒ 怖いのは障害発⽣時 ⇒ 何かあったとき、すぐに状況を確認できるよう

    プラットフォーマーと仲良くなっておきましょう Game Server Services, Inc. https://gs2.io
  29. 可視化 サービス状況の可視化はサーバレス時代にも必要 ⇒ だいたいのマネージドサービスは アクセス数などの指標もAPIで取れるようになっている ⇒ 重要な指標は簡単に⾒られるようにしておく Game Server Services,

    Inc. https://gs2.io
  30. 是⾮GS2を⼀度お試しください! 登録から3ヶ⽉間有効な3万円分のクーポンをプレゼント中 お気軽にお試しください https://gs2.io/ ゲーム開発者の友達が居たら共有してもらえると助かります Game Server Services, Inc. https://gs2.io