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
370
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
REALITY株式会社における開発生産性向上の取り組み: 失敗と成功から学んだこと
gree_tech
PRO
2
190
『ヘブンバーンズレッド』におけるフィールドギミックの裏側
gree_tech
PRO
2
150
セキュリティインシデント対応の体制・運用の試行錯誤 / greetechcon2024-session-a1
gree_tech
PRO
1
140
『アナザーエデン 時空を超える猫』国内海外同時運営実現への道のり ~別々で開発されたアプリを安定して同時リリースするまでの取り組み~
gree_tech
PRO
1
120
『アサルトリリィ Last Bullet』におけるクラウドストリーミング技術を用いたブラウザゲーム化の紹介
gree_tech
PRO
1
150
UnityによるPCアプリの新しい選択肢。「PC版 Google Play Games」への対応について
gree_tech
PRO
1
240
実機ビルドのエラーによる検証ブロッカーを0に!『ヘブンバーンズレッド』のスモークテスト自動化の取り組み
gree_tech
PRO
1
180
"ゲームQA業界の技術向上を目指す! 会社を超えた研究会の取り組み"
gree_tech
PRO
1
230
Jamstack でリニューアルするグリーグループのメディア
gree_tech
PRO
2
390
Other Decks in Technology
See All in Technology
株式会社ログラス − エンジニア向け会社説明資料 / Loglass Comapany Deck for Engineer
loglass2019
3
31k
マルチプロダクト開発の現場でAWS Security Hubを1年以上運用して得た教訓
muziyoshiz
2
2.1k
AWS re:Invent 2024で発表された コードを書く開発者向け機能について
maruto
0
180
.NET 9 のパフォーマンス改善
nenonaninu
0
440
Oracle Cloudの生成AIサービスって実際どこまで使えるの? エンジニア目線で試してみた
minorun365
PRO
4
270
10分で学ぶKubernetesコンテナセキュリティ/10min-k8s-container-sec
mochizuki875
3
320
サイバー攻撃を想定したセキュリティガイドライン 策定とASM及びCNAPPの活用方法
syoshie
3
1.2k
10個のフィルタをAXI4-Streamでつなげてみた
marsee101
0
160
ブラックフライデーで購入したPixel9で、Gemini Nanoを動かしてみた
marchin1989
1
510
20241214_WACATE2024冬_テスト設計技法をチョット俯瞰してみよう
kzsuzuki
3
440
Turing × atmaCup #18 - 1st Place Solution
hakubishin3
0
470
KubeCon NA 2024 Recap / Running WebAssembly (Wasm) Workloads Side-by-Side with Container Workloads
z63d
1
240
Featured
See All Featured
Product Roadmaps are Hard
iamctodd
PRO
49
11k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
17
2.2k
Visualization
eitanlees
146
15k
KATA
mclloyd
29
14k
Designing Experiences People Love
moore
138
23k
Automating Front-end Workflow
addyosmani
1366
200k
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
Code Review Best Practice
trishagee
65
17k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
32
2.7k
Building Flexible Design Systems
yeseniaperezcruz
327
38k
Scaling GitHub
holman
458
140k
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