Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
WFSにおけるCloud SpannerとGKEを中心としたGCP導入事例の紹介
Search
gree_tech
PRO
November 11, 2021
Technology
0
560
WFSにおけるCloud SpannerとGKEを中心としたGCP導入事例の紹介
GREE Tech Conference 2021 で発表された資料です。
https://techcon.gree.jp/2021/session/Session-9
gree_tech
PRO
November 11, 2021
Tweet
Share
More Decks by gree_tech
See All by gree_tech
今この時代に技術とどう向き合うべきか
gree_tech
PRO
2
2.2k
生成AIを開発組織にインストールするために: REALITYにおけるガバナンス・技術・文化へのアプローチ
gree_tech
PRO
0
76
安く・手軽に・現場発 既存資産を生かすSlack×AI検索Botの作り方
gree_tech
PRO
0
67
生成AIを安心して活用するために──「情報セキュリティガイドライン」策定とポイント
gree_tech
PRO
1
470
あうもんと学ぶGenAIOps
gree_tech
PRO
0
55
MVP開発における生成AIの活用と導入事例
gree_tech
PRO
0
74
機械学習・生成AIが拓く事業価値創出の最前線
gree_tech
PRO
0
95
コンテンツモデレーションにおける適切な監査範囲の考察
gree_tech
PRO
0
50
新サービス立ち上げの裏側 - QUANT for Shopsで実践した開発から運用まで
gree_tech
PRO
0
60
Other Decks in Technology
See All in Technology
マルチエージェントのチームビルディング_2025-10-25
shinoyamada
0
200
ViteとTypeScriptのProject Referencesで 大規模モノレポのUIカタログのリリースサイクルを高速化する
shuta13
3
220
Azure Well-Architected Framework入門
tomokusaba
1
140
ざっくり学ぶ 『エンジニアリングリーダー 技術組織を育てるリーダーシップと セルフマネジメント』 / 50 minute Engineering Leader
iwashi86
4
2.1k
DMMの検索システムをSolrからElasticCloudに移行した話
hmaa_ryo
0
100
ゼロコード計装導入後のカスタム計装でさらに可観測性を高めよう
sansantech
PRO
1
520
20251027_マルチエージェントとは
almondo_event
1
470
様々なファイルシステム
sat
PRO
0
260
ラスベガスの歩き方 2025年版(re:Invent 事前勉強会)
junjikoide
0
490
AI時代の開発を加速する組織づくり - ブログでは書けなかったリアル
hiro8ma
2
340
AIでデータ活用を加速させる取り組み / Leveraging AI to accelerate data utilization
okiyuki99
5
1.3k
ストレージエンジニアの仕事と、近年の計算機について / 第58回 情報科学若手の会
pfn
PRO
3
880
Featured
See All Featured
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.1k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
Embracing the Ebb and Flow
colly
88
4.9k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
116
20k
GraphQLとの向き合い方2022年版
quramy
49
14k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.7k
Why Our Code Smells
bkeepers
PRO
340
57k
Testing 201, or: Great Expectations
jmmastey
45
7.7k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
Building Flexible Design Systems
yeseniaperezcruz
329
39k
Building Better People: How to give real-time feedback that sticks.
wjessup
369
20k
Transcript
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