Slide 1

Slide 1 text

技術基盤本部  尾山 貴康 Cloud Spanner 導入で実現し た 快適な開発と運用について 2024.02.19

Slide 2

Slide 2 text

尾山 貴康 株式会社コロプラ バックエンドエンジニア サーバー基盤グループ PE (Platform Engineering) チーム 自己紹介 2

Slide 3

Slide 3 text

コロプラについて Vision エンターテインメントで日常をより楽しく、より素晴らしく Mission 3

Slide 4

Slide 4 text

コロプラについて 4

Slide 5

Slide 5 text

アジェンダ 1 採用した経緯 2 良かった点 3 苦労した点 5

Slide 6

Slide 6 text

事の発端 → 2017年 ● 年々ユーザー数が増加 ● 増加に伴い MySQL の負荷対策が複雑化 ○ 垂直分割(3分割) ○ 水平分割(64分割) ○ レプリケーション ● ゲームの運用が辛くなっていた 採用した経緯 6

Slide 7

Slide 7 text

● 水平スケーリング ○ 繁忙期 → スケールアウト ○ 閑散期 → スケールイン ○ 数週間から数ヶ月間隔で実施 → ○ 実施に数日から数週間必要 ■ 作業者が大変 インフラ側の辛み 7

Slide 8

Slide 8 text

スマートフォンゲームのアクセスパターン 新作ローンチ時やイベントリリース時は急激にアクセスが増加 8

Slide 9

Slide 9 text

● 増えるコードのテクニカル要素 ○ 分散 transaction ■ 動作確認が大変 ○ レプリケーション ■ 遅延考慮 開発側の辛み 9

Slide 10

Slide 10 text

● 開発中だった新作(ドラゴンクエストウォーク)は、 今まで経験したことのない莫大なアクセス数が予想されていた さらに辛くなる予兆が・・・ 10

Slide 11

Slide 11 text

同年、Cloud Spanner がリリース ● ボタンひとつでスケーリング ● フェイルオーバー、メンテナンスが全自動 ● SQL 準拠 ● グローバルトランザクション ● 同期レプリケーション Cloud Spanner 登場 11 ➔ 渡りに船、願ったり叶ったり?!

Slide 12

Slide 12 text

● フレームワーク(laravel)のデータベースのドライバーを作成 ○ https://github.com/colopl/laravel-spanner ● 運営中のゲームのソースコードに入れて、ドライバーを差し替え ● ノウハウを蓄積しながら調整 検証 12 目立った問題無し → 採用

Slide 13

Slide 13 text

● 2018 年以降のほぼ全てのゲームで採用 ● 今まで Spanner 起因のダウンタイム無し ● 安定したサービス運営を実現 実績 13

Slide 14

Slide 14 text

良かった点 ● カジュアルにスケールリング ○ 最近オートスケーリングも GA に! ● ノーメンテ運営(重要!) ○ 例えば位置ゲーで目的地に物理的に移動したのにサーバーが落ちている とガッカリさせてしまう ● コードのテクニカル要素が激減 ○ ビジネスロジックに専念できる 運用して感じたこと 14

Slide 15

Slide 15 text

苦労した点 いきなり大量のアクセスが来るとレイテンシーが悪化する問題 理由:自動水平分割(split)が間に合わない 運用して感じたこと 15

Slide 16

Slide 16 text

自動水平分割の説明(ざっくり) 16 ② 負荷上昇⤴ ① アクセス増加 Split A Split A1 Split A2 Split B ③ 分割促進 ・・・ Split C 🔥

Slide 17

Slide 17 text

運用して感じたこと 17 ① 過剰なアクセス ② 負荷 MAX Split A Split B Split A1 Split A2 Split B1 Split B2 ・・・ Split C Split C1 Split C2 ③ 分割が間に合わない 窒息状態 🔥 🔥 🔥 レイテンシー悪化

Slide 18

Slide 18 text

リリース前の事前 warm up 18 ① 期待する負荷になるまで徐々にアクセスを増加 ② 常にそこそこの負荷 Split A Split B Split A1 Split A2 Split B1 Split B2 ・・・ Split C Split C1 Split C2 ③ じわじわ分割 高負荷に耐えられる状態を作る

Slide 19

Slide 19 text

期待 19

Slide 20

Slide 20 text

FIN 20