Upgrade to Pro — share decks privately, control downloads, hide ads and more …

/cloud-spanner-operation-on-merpay

tkuchiki
June 21, 2019

 /cloud-spanner-operation-on-merpay

tkuchiki

June 21, 2019
Tweet

More Decks by tkuchiki

Other Decks in Technology

Transcript

  1. Agenda • Cloud Spanner の監視 • Cloud Spanner の backup

    • Cloud Spanner の node 数を定期的に変更する 3
  2. 監視 • 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/
  3. CPU metrics • Cloud Spanner の CPU metrics には合計、優先度(low、high)、移動平均24時間 がある

    ◦ 合計は 優先度 low + high • アプリケーションから実行するクエリは基本的に優先度 high ◦ バッチ読み取りやバッチクエリは優先度 low になるとドキュメントに記載されている ▪ BatchReadOnlyTransaction、ExecuteBatchDml ? 6 https://cloud.google.com/spanner/docs/cpu-utilization
  4. CPU metrics • CPU 使用率の推奨最大値がドキュメントに記載されており、その値を超えた場合は アラートを出すべきとされている ◦ 優先度 high: シングルリージョン

    65%、マルチリージョン 45% ◦ 移動平均24時間: 90% • 優先度 low が一定期間高いのも問題とされているので監視が必要 ◦ 一定期間 = 数時間から1日程度 7 https://cloud.google.com/spanner/docs/cpu-utilization
  5. 12

  6. 13

  7. 14

  8. 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
  9. 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
  10. Restore • Console から restore 可能 ◦ GCS の path

    を指定する • https://cloud.google.com/spanner/docs/import 18
  11. 19

  12. 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
  13. Cloud Scheduler から API を実行 • プログラムを書かなくても動かせる • Node 数を絶対値で指定するため、べき等になる

    ◦ Cloud Scheduler は1回のスケジュールで複数回実行される可能性がある • Node 数を相対値で増減させたい場合はプログラムを書く必要がある ◦ e.g. 3 nodes 増やしたい, + 30% したい 23 https://cloud.google.com/scheduler/docs/creating
  14. 24 Cloud Pub/Sub Cloud Scheduler Cloud Spanner Cloud Functions 1.Publish

    (increase/decrease) NodeCount 2. Subscribe (increase/decrease) NodeCount 3. (Increase / Decrease) NodeCount
  15. 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
  16. 今後の展望 • 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