Cloud Spanner をより便利に
する運用支援ツールの紹介
グリー株式会社 インフラエンジニア 石松佑太
2
自己紹介
名前: 石松 佑太
所属:
• 開発本部
インフラストラクチャ部
サービスオペレーショングループ
サービスオペレーションチーム
• RDBMS ユニット
一緒にコーディングするぐらい
インコが大好きです!
3
Cloud Spanner
4
Cloud Spanner とは
GCP が提供するデータベースのマネージドサービス
• RDBMS の特性を持つ
• スキーマ
• 強整合性
• SQL クエリ
• NoSQL の特性を持つ
• 水平方向のスケーラビリティ
( ダウンタイムなしにノード数の増減が可能 )
5
Cloud Spanner を利用する上での課題
1.ウォームアップ
リリース前に負荷をかけてスプリットを分割させる必要がある
→ ♨ Spanner 温めるくん
1.オートスケール
スケジュールや負荷状況に合わせてオートスケールしたい
→ 🔧 Spanner 上げ下げくん
6
Spanner 温めるくん
7
Spanner 温めるくん
リリース前にウォームアップを行うツール
発表の流れ
1.ウォームアップの流れ
2.Spanner 温めるくんの特徴
3.Spanner 温めるくんを使った事例
8
Spanner 温めるくん: ウォームアップの流れ
準備
ダミーデータ
INSERT
ダミーデータ
SELECT
ダミーデータ
DELETE
ダミーデータ
生成
9
Spanner 温めるくん: ウォームアップの流れ
準備
ダミーデータ
INSERT
ダミーデータ
SELECT
ダミーデータ
DELETE
ダミーデータ
生成
事前にスケジュールをスプレッドシートに設定
10
Spanner 温めるくん: ウォームアップの流れ
準備
ダミーデータ
INSERT
ダミーデータ
SELECT
ダミーデータ
DELETE
ダミーデータ
生成
Scheduler が各機能の CronJob を作成
11
Spanner 温めるくん: ウォームアップの流れ
準備
ダミーデータ
INSERT
ダミーデータ
SELECT
ダミーデータ
DELETE
ダミーデータ
生成
12
Spanner 温めるくん: ウォームアップの流れ
準備
ダミーデータ
INSERT
ダミーデータ
SELECT
ダミーデータ
DELETE
ダミーデータ
生成
13
Spanner 温めるくん: ウォームアップの流れ
準備
ダミーデータ
INSERT
ダミーデータ
SELECT
ダミーデータ
DELETE
ダミーデータ
生成
14
Spanner 温めるくん: ウォームアップの流れ
準備
ダミーデータ
INSERT
ダミーデータ
SELECT
ダミーデータ
DELETE
ダミーデータ
生成
Spanner からダミーデータを削除
15
Spanner 温めるくん: 特徴
1 2
SELECT だけで負荷をかけることが可能
背景
リリース後の運用段階でもウォームアップが必要な場合がある
• 例: 大規模なスキーマの変更
• 例: 2 日以上の長期メンテ
• ( スプリットが削除されてしまうため )
16
Spanner 温めるくん: 特徴
1 2
SELECT だけで負荷をかけることが可能
問題
運用段階でダミーデータを INSERT すると、
テーブル内に実データとダミーデータが混在してしまう
→ 実データを SELECT することで気軽にウォームアップ可能
17
Spanner 温めるくん: 特徴
1 2
SELECT する Bot を自動で追加
→ CPU使用率が上がるように Bot の台数を自動で調整
18
事例: プロダクトリリース前のウォームアップ
INSERT
レイテンシ悪化 レイテンシ安定
SELECT
19
Spanner 上げ下げくん
20
Spanner 上げ下げくん
Spanner のノード数をオートスケールするツール
発表の流れ
1.オートスケールの流れ
2.Spanner 上げ下げくんの特徴
3.Spanner 上げ下げくんを使った事例
21
Spanner 上げ下げくん: オートスケールの流れ
事前にスケジュールをスプレッドシートに設定
準備
ノード数
調整
Cloud
Functions
定期実行
22
Spanner 上げ下げくん: オートスケールの流れ
ノード数を調整する Cloud Functions が定期実行
準備
ノード数
調整
Cloud
Functions
定期実行
23
Spanner 上げ下げくん: オートスケールの流れ
スケジュールと負荷状況に合わせてノード数を調整
準備
ノード数
調整
Cloud
Functions
定期実行
24
Spanner 上げ下げくん: 特徴
スケジュールに沿ったスケール
1 2 3
例1: 深夜帯にノード数を減らす → コスト削減
25
Spanner 上げ下げくん: 特徴
スケジュールに沿ったスケール
1 2 3
例2: ガチャ更新やイベント前にノード数を増やす → 安定稼働
26
Spanner 上げ下げくん: 特徴
負荷状況に合わせたスケール
1 2 3
想定以上のリクエストが来た場合はノード数を自動で調整
27
Spanner 上げ下げくん: 特徴
ノード数を徐々に下げる
1 2 3
減らす時は少ない台数を10〜30分かけて徐々に減らすことが推奨
自動でやってくれるので便利
28
事例: 開発環境におけるノード数の調整
→ 深夜に性能を下げてコスト削減
深夜は使っていないので
性能を下げられる
29
まとめ
30
まとめ
♨ Spanner 温めるくん
リリース前に Spanner をウォームアップするツール
特徴
• SELECT だけで負荷をかけることが可能
• SELECT する Bot を自動で追加
🔧 Spanner 上げ下げくん
Spanner のノード数をオートスケールするツール
特徴
• スケジュールに沿ったスケール
• 負荷状況に合わせたスケール
• ノード数を徐々に下げる
31

Cloud Spanner をより便利にする運用支援ツールの紹介