SlideShare a Scribd company logo
WFSにおける
Cloud Spannerと
GKEを中心とした
GCP導入事例の紹介
株式会社WFS リードエンジニア 藤田貴大
• 藤田貴大(ふじた たかひろ)
• 所属
• 株式会社WFS
Technology Development部
Engineering5グループ
リードエンジニア
• 職歴
• 組み込みエンジニアとしてネットワーク機器の開発に携わったのち、
2012年にグリー入社。インフラ、Webゲーム開発、QAを経て、
2017年よりサーバエンジニアとしてネイティブゲームの開発に携わ
っている。
自己紹介
2
3
はじめに
• WFSでは、ゲームサーバとしてGoogle Cloud
Platform(GCP)の利用を進めています
• 現在GCPを利用してリリースされているタイトルは
”シドニアの騎士 掌位ノ絆”
• 他にも開発中タイトルが
控えています
©弐瓶勉・講談社/東亜重工重力祭運営局 © WFS
4
本発表の概要
• どうしてGCP、GKE、Cloud Spannerを採用したのか
• 導入にあたって出た問題にどう対応したのか
• 実際につかってみてどうだったのか
5
WFSのゲームについて
• ソーシャルゲーム
• 遊んでいる時は常にゲームサーバと通信している
• データがサーバ側にある
• 世界展開している
• さまざまな国に対してサービスを提供している
• サーバ負荷の変動が大きい
6
WFSにおけるサーバへの要求
• ゲームなので、応答性能はある程度必要
• 応答速度はゲームの楽しさに影響がある
• サービスを提供する全地域に対して
ある程度のレイテンシで通信したい
• サーバリソースをできるだけ柔軟に変更したい
7
ソーシャルゲームのサーバ規模について
• リリース直後や人気のイベントの開始など
アクセスが集中するタイミングがある
• 数倍、10倍、、、
• イベントなどは月に数回
8
リソース最適化
• できるだけ余剰リソースは作りたくない
• ゲームを止めたくない(メンテナンス)
• サービスを提供したままサーバリソースを調整したい
9
いままではどうだったか
• ゲームサーバ
• 現在はKubernetesに頼っているのでできている
• それ以前、VMに直接デプロイしていた頃からオンラインで
実施可能
• MySQL
• メンテナンスが必要
• 弊社インフラチームにまかせればオンラインでDBの最適化
(マスタ分割/統合など)が可能であるが、数週間の準備が必要
• Memcached/Redis
• メンテナンスが必要
10
GCP導入の理由
• レイテンシが短い
• Cloud Spannerが使えそうだった
• Google Kubernetes Engine
11
レイテンシ
12
実測したレイテンシ
• 他社クラウドを利用したゲームで海外展開する場合は
各地域(US、EU、etc…)にサーバを配置している
• GCPでは東京リージョンから各地域にサービスを提供できて
いる
東京リージョン <-> ブラジル
他社 1000msec以上
GCP 300msec未満
13
さまざまな地域からのレイテンシが短いほうが良い理由
• あるいは、サーバの配置場所を選択できた方がいい理由
• 1か所に集中していた方が管理がしやすい
• リソースの共有も可能
• 外部サービスとの連携
• WFSの認証・決済システムであるGamelib
• 独立したシステムでHTTPSにより通信している
• 海外リージョンにサーバを設置するために
Gamelibも海外サーバを作ってもらっている
ゲームサーバ
認証・決済
システム
14
Cloud Spanner
15
Cloud Spanner
• 水平分割しなくてよい
• メンテナンスコストが低い
• ランニングコストは高いかもしれない
• スプリット分割が難しそう
無制限のスケーリング、強整合性、最大 99.999% の可用性を備えたフルマネージド リレーショナル データベースです。
● 無制限のスケーリングによって、リレーショナル セマンティクスと SQL のすべてのメリットを享受
● 任意のサイズで開始し、ニーズの拡大に応じて制限なしでスケーリング
● 計画的ダウンタイムのない、オンラインによるスキーマ変更で高可用性を実現
● リージョンや大陸全体にわたる強整合性で高性能のトランザクションを提供
● 自動シャーディングなどの機能により手動のタスクを排除し、イノベーションに注力
Cloud Spanner
https://cloud.google.com/spanner/?hl=ja
16
Cloud Spannerのコスト
• 他社MySQLサービスとの比較
• APIサーバに10,000RPSの負荷をかけたときの比較
1リクエスト当たりのDBアクセス ノード数 ノードコスト(比率)
他社MySQLサービス read:5 update/insert:4 8(※) 1
Cloud Spanner read:5 update/insert:4 20 1.3
※:実際に必要なノードは4。
ただし、障害に備えたスタンバイが必要であるためx2で8。
DB
ゲームサーバ 負荷測定ツール
17
Cloud Spannerのコスト考察
• MySQLと比べたとき、スタンバイを考慮に入れると
そこまで大きく差は開かない
• Cloud Spannerはスケールアウト/スケールインが
オンラインで実施可能であるため、さらにコストダウンの
可能性がある
18
Cloud Spannerのスプリット分割
• リクエスト処理にかなり大きく
影響する
• 基本的には制御できない
• 現在のスプリットの状態がわからない
• 予防的に事前に負荷をかけて
スプリット分割を促す
RPS
レイテンシ
19
Spanner運用ツール
• インフラチームで開発
• この後のセッションで詳しい説明がありますので...
• 温める君
• 事前にスプリット分割を促す
• 上げ下げ君
• ノード数を自動で制御する
20
Google Kubernetes Engine
21
Google Kubernetes Engine
• 特徴的な機能
• Workload Identity
• プリエンプティブルインスタンス
22
Workload Identity
• GKE(Kubernetes)のサービスアカウントと
GCPのサービスアカウントを紐づけて
Google Cloudサービスを利用する権限を管理する方法
• GCPのドキュメントでは”推奨される方法”というようになっ
ている
• だが、当初は利用できなかった
• PHP SDKの問題
23
Workload Identity with PHP
• PHPのSDKに問題が多かった
• PHP側のキャッシュ管理にバグがあった
• podがスタートしてから一定時間でCloud Spannerへ通信できなく
なる
• アクセストークンの有効期限と
キャッシュ有効期限が連動していなかった
• Google様に連絡して修正していただきました
• https://github.com/googleapis/google-auth-library-php/issues/308
• 高負荷時、アクセストークンの更新に失敗する
• メタデータサーバからのアクセストークンの取得に失敗して
空の情報をキャッシュしていた
• こちらも、最新のSDKでは解消済み
24
プリエンプティブルインスタンスの活用
• コスト面で非常に魅力的なので導入したい
• ゲームサーバはもともとステートレスなので
導入しようと思えばできるのではと考えていた
• 実際はそう簡単ではなかった
• 突然停止するとエラーになったり、Sidecarで回収している
ログが欠損したりする
プリエンプティブル VM インスタンスは、標準 VM の料金よりもはるかに低価格(60~91% 割引)で利用できます。ただし、他
のタスクがリソースを再利用する必要がある場合、Compute Engine がこのインスタンスを停止(プリエンプト)する可能性があ
ります。プリエンプティブル インスタンスは Compute Engine の余剰のキャパシティを利用する機能であり、使用できるかどう
かは利用状況に応じて異なります。
プリエンプティブル VM インスタンス
https://cloud.google.com/compute/docs/instances/preemptible?hl=ja
25
GKE version 1.20
• 2021/09にStable
• Graceful Node Shutdown機能
• ApacheがGraceful Shutdownできる
• lifecycleのpreStopで後片付けができる
• 処理の中断、ログの欠損などが無くなった
• Cronjobは工夫が必要
• ノードの入れ替えを分散させる工夫を検討中
• 複数台同時に入れ替わると良くない
• 経験的に24時間で停止するので、そのあたりを調整できたら
と考えている
26
実際にサービスを提供してみて
• Workload Identityを利用したCloud Spannerへの
アクセスは順調
• 事前のスプリット分割はうまくいって
実サービスでスプリット分割の兆候はみられなかった
• メンテナンスをせずにサーバリソースの最適化ができている
• さまざまな国に対して東京リージョンから
サービスを提供できている
(世界展開をしている別のゲームで)
• プリエンプティブルインスタンスも一部導入できている
• ノードの入れ替えを分散させられていない
27
まとめ
• GKE + Cloud Spannerをつかったゲームを
提供することができた
• Cloud Spannerはスプリット分割など
難しいところもあるが、ツールを充実させるなどして
運用可能になった
• GKE 1.20になってプリエンプティブルVMが
サービスに使えるようになった
• PHP SDKは最初バグもあったが問題は解消されてきている
28

More Related Content

PPTX
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
PPTX
イベント・ソーシングを知る
PDF
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
PDF
DockerとPodmanの比較
PDF
Google Cloud Game Servers 徹底入門 | 第 10 回 Google Cloud INSIDE Games & Apps Online
PDF
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
PDF
ゲームの仕様書を書こうまとめ
PDF
ARM CPUにおけるSIMDを用いた高速計算入門
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
イベント・ソーシングを知る
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
DockerとPodmanの比較
Google Cloud Game Servers 徹底入門 | 第 10 回 Google Cloud INSIDE Games & Apps Online
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
ゲームの仕様書を書こうまとめ
ARM CPUにおけるSIMDを用いた高速計算入門

What's hot (20)

PPTX
世界一わかりやすいClean Architecture
PDF
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
PDF
ソーシャルゲームのためのデータベース設計
PDF
ドメイン駆動設計入門
PDF
それはYAGNIか? それとも思考停止か?
PDF
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
PDF
MagicOnion入門
PDF
世界でいちばんわかりやすいドメイン駆動設計
PPTX
FINAL FANTASY Record Keeperのマスターデータを支える技術
PDF
新入社員のための大規模ゲーム開発入門 サーバサイド編
PDF
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
PDF
Dockerfile を書くためのベストプラクティス解説編
DOCX
UE4でPerforceと連携するための手順
PPTX
Istioサービスメッシュ入門
PPTX
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
PPTX
DeNAの最新のマスタデータ管理システム Oyakata の全容
PDF
サーバー未経験者がソーシャルゲームを通して知ったサーバーの事
PPTX
DeNA_Techcon2017_DeNAでのチート・脆弱性診断への取り組み
PDF
株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...
PPTX
テストコードの DRY と DAMP
世界一わかりやすいClean Architecture
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
ソーシャルゲームのためのデータベース設計
ドメイン駆動設計入門
それはYAGNIか? それとも思考停止か?
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
MagicOnion入門
世界でいちばんわかりやすいドメイン駆動設計
FINAL FANTASY Record Keeperのマスターデータを支える技術
新入社員のための大規模ゲーム開発入門 サーバサイド編
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
Dockerfile を書くためのベストプラクティス解説編
UE4でPerforceと連携するための手順
Istioサービスメッシュ入門
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
DeNAの最新のマスタデータ管理システム Oyakata の全容
サーバー未経験者がソーシャルゲームを通して知ったサーバーの事
DeNA_Techcon2017_DeNAでのチート・脆弱性診断への取り組み
株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...
テストコードの DRY と DAMP
Ad

Similar to WFSにおけるCloud SpannerとGKEを中心としたGCP導入事例の紹介 (8)

PDF
[CEDEC 2018] グローバル スケール コネクテッドゲームを GCP で作ろう!
PDF
[GCC18] 世界中のプレイヤーを3つの「S」で支える Google Cloud Platform (GCP) 〜スピード・スケール・スタビリティ〜
PDF
Wordpress案件にgkeを採用してみた(短縮版)
PDF
『 イドラ ファンタシースターサーガ 』を支える GCP | Google Cloud INSIDE Games & Apps
PDF
The Google File System
PDF
GCP でも Serverless!!
PDF
Google Cloud Platformでソーシャルゲームを1本出してみた!
PPTX
Spanner移行について本気出して考えてみた
[CEDEC 2018] グローバル スケール コネクテッドゲームを GCP で作ろう!
[GCC18] 世界中のプレイヤーを3つの「S」で支える Google Cloud Platform (GCP) 〜スピード・スケール・スタビリティ〜
Wordpress案件にgkeを採用してみた(短縮版)
『 イドラ ファンタシースターサーガ 』を支える GCP | Google Cloud INSIDE Games & Apps
The Google File System
GCP でも Serverless!!
Google Cloud Platformでソーシャルゲームを1本出してみた!
Spanner移行について本気出して考えてみた
Ad

More from gree_tech (20)

PPTX
アナザーエデンPC版リリースへの道のり 〜WFSにおけるマルチプラットフォーム対応の取り組み〜
PDF
GREE VR Studio Laboratory「XR-UX Devプロジェクト」の成果紹介
PPTX
REALITYアバターを様々なメタバースで活躍させてみた - GREE VR Studio Laboratory インターン研究成果発表
PPTX
アプリ起動時間高速化 ~推測するな、計測せよ~
PPTX
長寿なゲーム事業におけるアプリビルドの効率化
PPTX
Cloud Spanner をより便利にする運用支援ツールの紹介
PPTX
SINoALICE -シノアリス- Google Cloud Firestoreを用いた観戦機能の実現について
PPTX
海外展開と負荷試験
PPTX
翻訳QAでのテスト自動化の取り組み
PPTX
組み込み開発のテストとゲーム開発のテストの違い
PPTX
サーバーフレームワークに潜んでる脆弱性検知ツール紹介
PPTX
データエンジニアとアナリストチーム兼務になった件について
PPTX
シェアドサービスとしてのデータテクノロジー
PPTX
「ドキュメント見つからない問題」をなんとかしたい - 横断検索エンジン導入の取り組みについて-
PPTX
「Atomic Design × Nuxt.js」コンポーネント毎に責務の範囲を明確にしたら幸せになった話
PPTX
比較サイトの検索改善(SPA から SSR に変換)
PPTX
コードの自動修正によって実現する、機能開発を止めないフレームワーク移行
PPTX
「やんちゃ、足りてる?」〜ヤンマガWebで挑戦を続ける新入りエンジニア〜
PPTX
法人向けメタバースプラットフォームの開発の裏側をのぞいてみた(仮)
PPTX
基調講演 -グリーが目指すエンジニアのあり方、チームのあり方-
アナザーエデンPC版リリースへの道のり 〜WFSにおけるマルチプラットフォーム対応の取り組み〜
GREE VR Studio Laboratory「XR-UX Devプロジェクト」の成果紹介
REALITYアバターを様々なメタバースで活躍させてみた - GREE VR Studio Laboratory インターン研究成果発表
アプリ起動時間高速化 ~推測するな、計測せよ~
長寿なゲーム事業におけるアプリビルドの効率化
Cloud Spanner をより便利にする運用支援ツールの紹介
SINoALICE -シノアリス- Google Cloud Firestoreを用いた観戦機能の実現について
海外展開と負荷試験
翻訳QAでのテスト自動化の取り組み
組み込み開発のテストとゲーム開発のテストの違い
サーバーフレームワークに潜んでる脆弱性検知ツール紹介
データエンジニアとアナリストチーム兼務になった件について
シェアドサービスとしてのデータテクノロジー
「ドキュメント見つからない問題」をなんとかしたい - 横断検索エンジン導入の取り組みについて-
「Atomic Design × Nuxt.js」コンポーネント毎に責務の範囲を明確にしたら幸せになった話
比較サイトの検索改善(SPA から SSR に変換)
コードの自動修正によって実現する、機能開発を止めないフレームワーク移行
「やんちゃ、足りてる?」〜ヤンマガWebで挑戦を続ける新入りエンジニア〜
法人向けメタバースプラットフォームの開発の裏側をのぞいてみた(仮)
基調講演 -グリーが目指すエンジニアのあり方、チームのあり方-

WFSにおけるCloud SpannerとGKEを中心としたGCP導入事例の紹介