$30 off During Our Annual Pro Sale. View Details »

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

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

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

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

Kazutomo Niwa

November 03, 2017
Tweet

More Decks by Kazutomo Niwa

Other Decks in Technology

Transcript

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

    View Slide

  2. ⾃⼰紹介
    丹⽻ ⼀智(にわ かずとも)
    セガ・任天堂で約10年間ゲーム開発・サーバ開発の仕事に従事
    昨年 Game Server Services 株式会社 を設⽴
    昨年末からサービスの提供を開始。
    Game Server Services, Inc.
    https://gs2.io

    View Slide

  3. Game Server Services(GS2)
    ネットワーク対応ゲームに使⽤できるBaaSを提供
    めざせ、ゲームサーバ界の Unity!
    ⼤⼿メーカー
    ⇒ サーバエンジニアのリソース不⾜解消
    ⇒ アプリエンジニアだけでプロトタイピング
    中⼩メーカー・独⽴系デベロッパー
    ⇒ サーバエンジニア無しでゲームを作れるように
    Game Server Services, Inc.
    https://gs2.io

    View Slide

  4. 安定した⾼い性能を低コストを実現
    BaaSとしてサービス提供
    ⇒ 秒間数万リクエストを常時捌けることを保証したい
    ⇒ 仮想サーバで実現するには採算が合わない
    フルサーバレスアーキテクチャで設計
    ⇒ 従量課⾦のマネージドサービスを組み合わせて実装
    ⇒ アクセス量に対応して柔軟にスケールしつつ、
    ビジネススケールにコストが⽐例するように
    サーバレスだから実現できる事業。
    Game Server Services, Inc.
    https://gs2.io

    View Slide

  5. 真のサーバレスアーキテクト
    Game Server Services, Inc.
    https://gs2.io

    View Slide

  6. 真のサーバレスアーキテクト
    サーバレス時代の設計者に求められる技能
    ⇒ 適切な箇所で適切なサービスを適⽤できるスキル
    ⇒ 各マネージドサービスの性能・特性・コストを把握
    「 CloudDataFlow でサーバレスストリーム分析だー」
    「秒間1個もデータ流れてこないですけどね」
    「DynamoDB で我が社もサクセス!」
    「1%のデータへのアクセスが9割なんですけどね」
    やりたかっただけのサーバレスアーキテクトにならないように!
    Game Server Services, Inc.
    https://gs2.io

    View Slide

  7. お願い
    GS2 のサービス開発で得た知⾒を披露します
    これは、GS2 の安定性や確かな技術⼒を裏付けるため
    当然、⾃社での開発に⽣かしていただいても問題ないです
    でも、是⾮ GS2 の名前も覚えて帰ってください!
    Game Server Services, Inc.
    https://gs2.io

    View Slide

  8. コールドスタート対策
    AWS Lambda は初回起動にレイテンシが発⽣
    ⇒ GS2 は Python を採⽤
    ⇒ 1つの Lambda ファンクションに全ロジックを⼊れてる
    ⇒ API Gateway のエンドポイントごとに、
    どのロジックを実⾏するかをパラメータで渡している
    ⇒ コール⽐率の低いエンドポイントでも
    コールドスタートを回避できる
    Game Server Services, Inc.
    https://gs2.io

    View Slide

  9. ログ収集
    FaaS は⼯夫しないと綺麗なログが残らない
    ⇒ Cloud Watch Logs に出てるけど
    コンテナ毎にストリームが分かれて使いづらい
    ⇒ Lambda ファンクションの先頭で
    受け取ったイベントの内容を Kinesis Firehose に書き出し
    ⇒ Python のデコレータを使ってフックしてる
    ⇒ S3のPUTイベントでログを仕分けて BigQuery に書き出し
    ⇒ エラーログは Slack に通知
    Game Server Services, Inc.
    https://gs2.io

    View Slide

  10. アクティビティ収集
    GS2ではAPIコール回数などをグラフで確認できる
    ⇒リソースごとに Cloud PubSub のトピックを⽤意
    ⇒イベントが発⽣するごとに情報を流す
    ⇒ Cloud PubSub の情報を BigQuery に書き出し
    直接 BigQuery に書き込まないのはなぜ?
    ⇒ バッファリングして書いた⽅が安い
    SQS じゃなくて Cloud PubSub なのはなぜ?
    ⇒ スループットの問題
    Kinesis じゃないのはなぜ?
    ⇒ 対象リソース毎の仕分け⾏程が必要になるから
    Game Server Services, Inc.
    https://gs2.io

    View Slide

  11. ポーリング問題
    FaaS によるサーバシステムは⾮同期処理の実装が⾟い
    ⇒ たとえば、マッチメイキング
    ⇒ 処理が終わるまで待つとがタイムアウトする
    ⇒ リクエストを出したあと、処理が終わったかポーリング
    ださい
    ⇒ 処理が終わったらサーバから
    クライアントにプッシュ通知したい
    ⇒ FaaS では簡単にはいかない
    Game Server Services, Inc.
    https://gs2.io

    View Slide

  12. プッシュ通知の実現
    コネクションを張りっぱなしにするサーバが必要
    ⇒ ⾺⿅正直に設計すると仮想サーバが無限に並ぶ
    GS2 ではプッシュ通知を AWS IoT で実現!
    ⇒ 名前はアレだけど、IoT以外にも使える
    ⇒ MQTT/WebSocket で通信
    ⇒ 10億のデバイスが接続しても⼤丈夫
    GS2 では通知対象がオフラインの時にモバイルプッシュ通知に
    転送する仕組みも実装
    Game Server Services, Inc.
    https://gs2.io

    View Slide

  13. トランザクション問題
    DynamoDB にはトランザクション機能が無い
    ⇒ 魔法⽯を管理するサービスを提供中
    ⇒ 資⾦決済法に該当するおそれのあるゲーム内通貨
    ⇒ 残⾼管理や取引履歴は正確に記録する義務が発⽣
    ⇒ Cloud DataStore を採⽤
    ⇒ パフォーマンスを引き出すテクニックが
    DynamoDB とは⼤きく異なるので、注意が必要
    Game Server Services, Inc.
    https://gs2.io

    View Slide

  14. マイクロサービス間の情報保全
    GS2はマイクロサービスを組み合わせてゲームを作る思想
    ⇒ マイクロサービス間のデータの受け渡しに
    ⼀旦クライアントが挟まることも
    ⇒ 暗号鍵を管理するマイクロサービスを提供
    ⇒ APIを経由して暗号化・復号化が可能
    ⇒ サーバ⽤のアクセスポリシーでのみ暗号化・復号化可能
    ⇒ マイクロサービスは暗号化した情報をクライアントに返す
    ⇒ クライアントはそのまま別のマイクロサービスに渡す
    Game Server Services, Inc.
    https://gs2.io

    View Slide

  15. アクセス権限管理
    GS2 では AWS の IAM を模したポリシー管理を提供
    ⇒ Lambda 関数の先頭でポリシー判定 Lambda をコール
    ⇒ Python のデコレータで実装
    ⇒ ポリシー判定 Lambda はAPIの呼び出しを許可するかを
    ポリシードキュメントから判定して応答
    ポリシー判定 Lambda を独⽴させているのはなぜ?
    ⇒ ポリシードキュメントのキャッシュヒット率を⾼めるため
    Game Server Services, Inc.
    https://gs2.io

    View Slide

  16. マネージメントコンソール
    GS2にもマネージメントコンソールが存在します
    ⇒ サーバレスで実現したかった
    ⇒ ⼀部プライベートAPIを使⽤して仕様を実現している
    ⇒ HTML+js では実現できない
    ⇒ やむなく EC2 で運⽤していた
    ⇒ Google App Engine Standard が Java8 に対応
    ⇒ GAした当⽇にリリース
    ⇒ はれてマネージメントコンソールもサーバレス化
    Game Server Services, Inc.
    https://gs2.io

    View Slide

  17. Google App Engine の優れている点
    モノリシックな設計のままサーバレス化できる
    ⇒ まったくそのままというのはさすがに無理
    ⇒ GAE を⼀切意識していなかったが⼤部分が流⽤できた
    FaaS は設計思想が全然違う
    ⇒イチから設計しないと動かせない
    学習コストを抑えてサーバレス化を狙うならGAEが最善⼿
    Game Server Services, Inc.
    https://gs2.io

    View Slide

  18. マイグレーション時のポイント
    ホワイトリストAPI
    ⇒ 使えないAPIがある
    ⇒ 請求書のPDF出⼒で引っかかった
    ⇒ ローカルサーバだと例外が出るけど、
    デプロイしたら動くことに気づく
    ⇒ Java8 ではホワイトリストAPIが無くなった
    ⇒ PDF出⼒もデプロイしたら動いた
    ⇒ バグ報告済みなのでそのうち直るはず
    GAE Java8 はめっちゃ⾃由度が⾼くなった
    Game Server Services, Inc.
    https://gs2.io

    View Slide

  19. マイグレーション時のポイント
    データベース
    ⇒ 管理者アカウントなどで⼀部 MySQL を使っていた
    ⇒ Cloud DataStore で再実装した
    スレッド
    ⇒ GS2 内の Cloud Formation に相当するサービスで使⽤
    ⇒ TaskQueue を使った実装に再実装した
    コールドスタート
    ⇒ マイクロサービス毎に分かれていたのを統合
    Game Server Services, Inc.
    https://gs2.io

    View Slide

  20. 正直、サーバレスでどこまで作れる?
    低レイテンシ通信したい⽤途には今ある⼿札では厳しい
    GS2 にはマルチプレイ⽤のパケット中継サーバがあるけど、こ
    こだけは仮想サーバ
    でも、こんな厳しい要件はこのケースしか無いと思う
    REST API で実装しているような機能であれば、確実にサーバレ
    ス化可能
    今回紹介したプッシュ通知の仕組みを使えば、サーバサイドから
    イベントをキック出来るので、設計の幅も広がる
    Game Server Services, Inc.
    https://gs2.io

    View Slide

  21. サーバレス時代のゲーム開発
    Game Server Services, Inc.
    https://gs2.io

    View Slide

  22. ゲームサーバ開発の現状
    ゲームサーバの機能の⼤部分はゲームの⾯⽩さに直結しない
    ⇒ プレゼントボックスとか、ログインボーナスとか
    ⇒ なのになぜか何回も作ってる
    ゲーム開発者が成すべきことは何?
    ⇒ かっこいいサーバシステムを作ること?
    ⇒ 企画の細かい要求を全て満たしたゲームを作ること?
    ⇒ その「オリジナリティ」溢れた仕様は
    ゲームにとって本当に必要だとおもって実装してる?
    FaaS や PaaS でサーバレスもいいけど、
    GS2 のような Functional SaaS を使うのもサーバレス
    Game Server Services, Inc.
    https://gs2.io

    View Slide

  23. GS2 によって得られるメリット
    さらば。退屈なサーバシステム開発。
    GS2 の提供する機能は⽇々増えている
    ⇒ サービス開始から1年でマイクロサービスの種類は10超
    GS2 の提供するサービスで仕様が満たせる場合
    ⇒ アプリエンジニアだけで開発可能
    ⇒ GS2 SDK は Unity 向けのものも提供中
    Game Server Services, Inc.
    https://gs2.io

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide