Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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