$30 off During Our Annual Pro Sale. View Details »
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
580
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
変わるもの、変わらないもの :OSSアーキテクチャで実現する持続可能なシステム
gree_tech
PRO
0
2.1k
マネジメントに役立つ Google Cloud
gree_tech
PRO
0
24
今この時代に技術とどう向き合うべきか
gree_tech
PRO
3
2.4k
生成AIを開発組織にインストールするために: REALITYにおけるガバナンス・技術・文化へのアプローチ
gree_tech
PRO
0
150
安く・手軽に・現場発 既存資産を生かすSlack×AI検索Botの作り方
gree_tech
PRO
0
140
生成AIを安心して活用するために──「情報セキュリティガイドライン」策定とポイント
gree_tech
PRO
1
1.3k
あうもんと学ぶGenAIOps
gree_tech
PRO
0
260
MVP開発における生成AIの活用と導入事例
gree_tech
PRO
0
280
機械学習・生成AIが拓く事業価値創出の最前線
gree_tech
PRO
0
200
Other Decks in Technology
See All in Technology
Challenging Hardware Contests with Zephyr and Lessons Learned
iotengineer22
0
130
RAG/Agent開発のアップデートまとめ
taka0709
0
150
学習データって増やせばいいんですか?
ftakahashi
1
270
今からでも間に合う!速習Devin入門とその活用方法
ismk
1
550
Ruby で作る大規模イベントネットワーク構築・運用支援システム TTDB
taketo1113
1
210
Oracle Technology Night #95 GoldenGate 26ai の実装に迫る1
oracle4engineer
PRO
0
150
SSO方式とJumpアカウント方式の比較と設計方針
yuobayashi
7
520
計算機科学をRubyと歩む 〜DFA型正規表現エンジンをつくる~
ydah
3
210
AI駆動開発における設計思想 認知負荷を下げるフロントエンドアーキテクチャ/ 20251211 Teppei Hanai
shift_evolve
PRO
2
200
会社紹介資料 / Sansan Company Profile
sansan33
PRO
11
390k
AI時代の開発フローとともに気を付けたいこと
kkamegawa
0
2.4k
5分で知るMicrosoft Ignite
taiponrock
PRO
0
230
Featured
See All Featured
Music & Morning Musume
bryan
46
7k
Optimising Largest Contentful Paint
csswizardry
37
3.5k
Building an army of robots
kneath
306
46k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
Agile that works and the tools we love
rasmusluckow
331
21k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
10
720
RailsConf 2023
tenderlove
30
1.3k
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.6k
Designing for humans not robots
tammielis
254
26k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Automating Front-end Workflow
addyosmani
1371
200k
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