Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
/cloud-spanner-operation-on-merpay
tkuchiki
June 21, 2019
Technology
1
960
/cloud-spanner-operation-on-merpay
https://mercari.connpass.com/event/134959/
の発表資料です。
tkuchiki
June 21, 2019
Tweet
Share
More Decks by tkuchiki
See All by tkuchiki
Kubernetesの上に作る、統一されたマイクロサービス運用体験
tkuchiki
1
3.1k
メルペイSREチームのオンコール/oncall-merpay-sre
tkuchiki
0
53
/sre-next-2020
tkuchiki
5
12k
/fastly-meetup-3
tkuchiki
0
75
/fastly-yamagoya-meetup-2019
tkuchiki
0
120
2年間運用しているソーシャルゲームのサーバ構成の変遷
tkuchiki
3
4.2k
ソーシャルゲームにおける AWS 移行事例
tkuchiki
21
22k
Other Decks in Technology
See All in Technology
JJUG2022_spring_Keycloak (Red Hat Single Sign-on)
tinoue
0
200
RDRA + JavaによるレジャーSaaSプロダクトの要件定義と実装のシームレスな接続
jjebejj
PRO
3
670
Autonomous Database Cloud 技術詳細 / adb-s_technical_detail_jp
oracle4engineer
PRO
10
18k
PUTとPOSTどっち使う?
hankehly
0
260
紙にまつわる苦しみを機能化してきた カミナシの歴史
kaminashi
0
1.2k
データ分析で切り拓け! エンジニアとしてのデータ分析職キャリア戦略
ksnt
0
120
UIKitのアップデート #WWDC22
akatsuki174
4
330
ROS再入門-はじめてのSLAM-
miura55
0
400
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
3
9.1k
Meet passkeys
satotakeshi
1
120
機械学習システムアーキテクチャ入門 #1
asei
3
1.2k
Scrum Fest Osaka 2022 フルリモート下でのチームビルディング
moritamasami
2
1.2k
Featured
See All Featured
Design by the Numbers
sachag
271
17k
GraphQLとの向き合い方2022年版
quramy
16
8.3k
Statistics for Hackers
jakevdp
781
210k
The Straight Up "How To Draw Better" Workshop
denniskardys
225
120k
4 Signs Your Business is Dying
shpigford
169
20k
Facilitating Awesome Meetings
lara
29
4k
Infographics Made Easy
chrislema
233
17k
We Have a Design System, Now What?
morganepeng
35
3k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
212
20k
Thoughts on Productivity
jonyablonski
43
2.3k
Bootstrapping a Software Product
garrettdimon
296
110k
Faster Mobile Websites
deanohume
294
28k
Transcript
Merpay における Cloud Spanner の オペレーション Merpay SRE @tkuchiki
WHOAMI(1) • @tkuchiki • Merpay SRE 2
Agenda • Cloud Spanner の監視 • Cloud Spanner の backup
• Cloud Spanner の node 数を定期的に変更する 3
Cloud Spanner の 監視
監視 • 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/
CPU metrics • Cloud Spanner の CPU metrics には合計、優先度(low、high)、移動平均24時間 がある
◦ 合計は 優先度 low + high • アプリケーションから実行するクエリは基本的に優先度 high ◦ バッチ読み取りやバッチクエリは優先度 low になるとドキュメントに記載されている ▪ BatchReadOnlyTransaction、ExecuteBatchDml ? 6 https://cloud.google.com/spanner/docs/cpu-utilization
CPU metrics • CPU 使用率の推奨最大値がドキュメントに記載されており、その値を超えた場合は アラートを出すべきとされている ◦ 優先度 high: シングルリージョン
65%、マルチリージョン 45% ◦ 移動平均24時間: 90% • 優先度 low が一定期間高いのも問題とされているので監視が必要 ◦ 一定期間 = 数時間から1日程度 7 https://cloud.google.com/spanner/docs/cpu-utilization
8 合計
9 low priority
10 high priority
11 移動平均24時間
12
13
14
Cloud Spanner の backup
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
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
Restore • Console から restore 可能 ◦ GCS の path
を指定する • https://cloud.google.com/spanner/docs/import 18
19
Cloud Spanner の node 数を 定期的に変更する
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
22 Cloud Scheduler Cloud Spanner Increase/Decrease NodeCount
Cloud Scheduler から API を実行 • プログラムを書かなくても動かせる • Node 数を絶対値で指定するため、べき等になる
◦ Cloud Scheduler は1回のスケジュールで複数回実行される可能性がある • Node 数を相対値で増減させたい場合はプログラムを書く必要がある ◦ e.g. 3 nodes 増やしたい, + 30% したい 23 https://cloud.google.com/scheduler/docs/creating
24 Cloud Pub/Sub Cloud Scheduler Cloud Spanner Cloud Functions 1.Publish
(increase/decrease) NodeCount 2. Subscribe (increase/decrease) NodeCount 3. (Increase / Decrease) NodeCount
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
26 Cloud Spanner Increase/Decrease NodeCount App Engine cron
今後の展望 • 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
Thank you!