Slide 1

Slide 1 text

Merpay における Cloud Spanner の オペレーション Merpay SRE @tkuchiki

Slide 2

Slide 2 text

WHOAMI(1) ● @tkuchiki ● Merpay SRE 2

Slide 3

Slide 3 text

Agenda ● Cloud Spanner の監視 ● Cloud Spanner の backup ● Cloud Spanner の node 数を定期的に変更する 3

Slide 4

Slide 4 text

Cloud Spanner の 監視

Slide 5

Slide 5 text

監視 ● Metrics は Datadog の GCP Integration で収集 ○ CPU 使用率 ○ ディスク使用量 ○ Spanner API のレイテンシ ○ Spanner API のステータス ○ QPS ○ Session数 ○ Network I/O ● 監視で主に見ているのはCPU 使用率 ○ その他の metrics は朝会でグラフを見て、予兆がないか確認 ● その他の監視は調整中 ○ e.g. QPS の急激な上昇・減少、 Spanner API ステータス OK の急激な減少、など 5 https://cloud.google.com/monitoring/api/metrics_gcp#gcp-spanner https://www.datadoghq.com/abo ut/press/resources/

Slide 6

Slide 6 text

CPU metrics ● Cloud Spanner の CPU metrics には合計、優先度(low、high)、移動平均24時間 がある ○ 合計は 優先度 low + high ● アプリケーションから実行するクエリは基本的に優先度 high ○ バッチ読み取りやバッチクエリは優先度 low になるとドキュメントに記載されている ■ BatchReadOnlyTransaction、ExecuteBatchDml ? 6 https://cloud.google.com/spanner/docs/cpu-utilization

Slide 7

Slide 7 text

CPU metrics ● CPU 使用率の推奨最大値がドキュメントに記載されており、その値を超えた場合は アラートを出すべきとされている ○ 優先度 high: シングルリージョン 65%、マルチリージョン 45% ○ 移動平均24時間: 90% ● 優先度 low が一定期間高いのも問題とされているので監視が必要 ○ 一定期間 = 数時間から1日程度 7 https://cloud.google.com/spanner/docs/cpu-utilization

Slide 8

Slide 8 text

8 合計

Slide 9

Slide 9 text

9 low priority

Slide 10

Slide 10 text

10 high priority

Slide 11

Slide 11 text

11 移動平均24時間

Slide 12

Slide 12 text

12

Slide 13

Slide 13 text

13

Slide 14

Slide 14 text

14

Slide 15

Slide 15 text

Cloud Spanner の backup

Slide 16

Slide 16 text

Backup ● Cloud Spanner には database を export する機能がある ○ https://cloud.google.com/spanner/docs/export ○ Cloud Dataflow を使用して、Cloud Storage に export ○ Avro & JSON ● ただし、定期的に export する機能はない ● App Engine cron で export をスケジュール実行している ● フルバックアップなので時間がかかる & 容量が大きい 16

Slide 17

Slide 17 text

17 Cloud Dataflow Cloud Storage Cloud Spanner App Engine cron & task queue 3.Run Cloud Dataflow 4.Get template 2. Get database names 1.Run Job 6.Export database 5.Run Job 7.Upload Avro & JSON files

Slide 18

Slide 18 text

Restore ● Console から restore 可能 ○ GCS の path を指定する ● https://cloud.google.com/spanner/docs/import 18

Slide 19

Slide 19 text

19

Slide 20

Slide 20 text

Cloud Spanner の node 数を 定期的に変更する

Slide 21

Slide 21 text

Node 数を変更したいケース ● キャンペーン開始や Push 通知、TV 放映などのスパイクアクセスが見込まれる ケース ○ 事前に node 数を増やしておくことで対応 ● バッチ処理で一時的に Cloud Spanner の CPU 使用率が上昇するケース ○ 開始時間が明確で、終了時間も予測可能 ○ Cloud Spanner は 簡単に node 数を増やせるので、定期的に Node 数を増減させたい ● Cloud Scheduler の cron ジョブで Cloud Spanner のノード数を変更する方法 ○ https://tech.mercari.com/entry/2019/05/29/120000 ● ※検証段階で未導入 21

Slide 22

Slide 22 text

22 Cloud Scheduler Cloud Spanner Increase/Decrease NodeCount

Slide 23

Slide 23 text

Cloud Scheduler から API を実行 ● プログラムを書かなくても動かせる ● Node 数を絶対値で指定するため、べき等になる ○ Cloud Scheduler は1回のスケジュールで複数回実行される可能性がある ● Node 数を相対値で増減させたい場合はプログラムを書く必要がある ○ e.g. 3 nodes 増やしたい, + 30% したい 23 https://cloud.google.com/scheduler/docs/creating

Slide 24

Slide 24 text

24 Cloud Pub/Sub Cloud Scheduler Cloud Spanner Cloud Functions 1.Publish (increase/decrease) NodeCount 2. Subscribe (increase/decrease) NodeCount 3. (Increase / Decrease) NodeCount

Slide 25

Slide 25 text

Cloud Scheduler + Cloud Pub/Sub + Cloud Functions ● 複数回実行されても問題ないような工夫が必要 ○ (再掲) Cloud Scheduler は1回のスケジュールで複数回実行される可能性がある ○ Node を増やす分には多少費用が発生するだけなので問題ないが、減らすのが複数回実行される のは危険 ■ e.g. 現在の node 数から3 node 減らす処理が2回実行されてしまう ● Cloud Scheduler を使うのであればこの構成になるが、App Engine cron を使った ほうが一つのサービスで完結するので良さそう 25 https://cloud.google.com/scheduler/docs/creating

Slide 26

Slide 26 text

26 Cloud Spanner Increase/Decrease NodeCount App Engine cron

Slide 27

Slide 27 text

今後の展望 ● Auto Scaling 対応 ● e.g. Datadog Webhooks -> App Engine / Cloud Functions -> Cloud Spanner API ○ Datadog の IP ranges が公開されているので制限をかけられそう ○ `$ curl -s https://ip-ranges.datadoghq.com/ | jq .webhooks.prefixes_ipv4` ○ Alert 契機の Scaling は考慮することが多そうなので要検証 27

Slide 28

Slide 28 text

Thank you!