Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Monarch
Search
a2-ito
May 17, 2022
Technology
0
97
Monarch
a2-ito
May 17, 2022
Tweet
Share
More Decks by a2-ito
See All by a2-ito
ECSにおけるBGデプロイの実現
a2ito
0
86
Organizations と Identity Center を Terraform で管理しよう
a2ito
0
110
App Runner 実践
a2ito
0
520
Bigtable
a2ito
0
74
Chord
a2ito
0
62
Chubby
a2ito
0
86
Dynamo
a2ito
0
97
Megastore
a2ito
0
73
Numbers everyone should know
a2ito
0
87
Other Decks in Technology
See All in Technology
OCI Database Management サービス詳細
oracle4engineer
PRO
1
7.4k
AzureでのIaC - Bicep? Terraform? それ早く言ってよ会議
torumakabe
1
500
GitLab Duo Agent Platform × AGENTS.md で実現するSpec-Driven Development / GitLab Duo Agent Platform × AGENTS.md
n11sh1
0
130
SREが向き合う大規模リアーキテクチャ 〜信頼性とアジリティの両立〜
zepprix
0
430
Tebiki Engineering Team Deck
tebiki
0
24k
CDK対応したAWS DevOps Agentを試そう_20260201
masakiokuda
1
230
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
6
68k
AWS Network Firewall Proxyを触ってみた
nagisa53
0
200
Bill One急成長の舞台裏 開発組織が直面した失敗と教訓
sansantech
PRO
2
330
MCPでつなぐElasticsearchとLLM - 深夜の障害対応を楽にしたい / Bridging Elasticsearch and LLMs with MCP
sashimimochi
0
150
データ民主化のための LLM 活用状況と課題紹介(IVRy の場合)
wxyzzz
2
690
Embedded SREの終わりを設計する 「なんとなく」から計画的な自立支援へ
sansantech
PRO
3
2.3k
Featured
See All Featured
The Pragmatic Product Professional
lauravandoore
37
7.1k
Tell your own story through comics
letsgokoyo
1
810
Agile that works and the tools we love
rasmusluckow
331
21k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
0
1.9k
Reality Check: Gamification 10 Years Later
codingconduct
0
2k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.1k
The SEO identity crisis: Don't let AI make you average
varn
0
67
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.2k
Mobile First: as difficult as doing things right
swwweet
225
10k
jQuery: Nuts, Bolts and Bling
dougneiner
65
8.4k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
130
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
110
Transcript
Monarch 2021.11.26@a2ito
Publication Monarch: Google’s Planet-Scale In-Memory Time Series Database Colin Adams,
Luis Alonso, Benjamin Atkin, John Banning, Sumeer Bhola, Rick Buskens, Ming Chen, Xi Chen, Yoo Chung, Qin Jia, Nick Sakharov, George Talbot, Adam Tart, Nick Taylor International Conference on Very Large Data Bases, VLDB (2020) 被引用数: 2
参考 • Bigtable(2006) ◦ 被引用数: 7,472 • Chubby(2006) ◦ 被引用数:
1,492 • Megastore(2011) ◦ 被引用数: 981 • Dynamo(2007) ◦ 被引用数: 5,873 • Bitcoin(2008) ◦ 被引用数: 17,326 • Percolator(2010) ◦ 被引用数: 616
Overview GCP勉強会資料より 2021/11/9分
Overview • Google 社内のモニタリングのためのインメモリ時系列データベースシステム Monarch • テラバイト級の時系列データ、数百万のクエリを毎秒処理している • 既に10年間運用中
Overview • 社内のインフラ・アプリケーション監視のために、Borgmon を開発・利用していた ◦ 2004年-2014年にかけて急速に利用が拡大 • 利用拡大時に顕在化した Borgmon の課題
◦ 各チームがインスタンスを設定・運用する設計 ▪ 運用上のオーバヘッドが発生 ▪ アプリケーションとインフラの境界を超えたクエリが書けない ◦ スキーマ化されていないため、クエリの表現力に制限あり ◦ 高度な統計分析がサポートされない ▪ 例:99パーセンタイルのレイテンシ ◦ 手動でシャード • これらの課題を解決するため、次世代監視システム Monarch を開発
System Design
System Overview • Monarch は主に監視とアラートのワークロードとして利用される ◦ ロックにより可用性やレイテンシが劣化することは許容できない ◦ 一貫性を犠牲にした AP
システム • アラートへのクリティカルパスにおける依存性を最小化するためにメモリにデー タを保存 ◦ Bigtable, Colossus, Spanner, Blobstore, F1 などGoogleのストレージシステムのほとんどは Monarch に依存している ◦ Monarch 自身が Spanner や Colossus を利用しているため、アラートパスにおいて循環依存し ないようにする必要がある
Architecture (blue) persist state ⇒ステート永続化部 (green) execute queries ⇒クエリ実行部 (red)
ingest data ⇒データ取り込み部
(blue) persist state • Leaves ◦ モニタリングデータをインメモリストアに保存 • Recovery logs
◦ Leaves と同じデータをディスク上に保存 • A global configuration server and its zonal mirrors ◦ 設定情報を Spanner に保存
(green) execute queries • Mixers ◦ クエリをサブクエリに分割し、 Leaves にルーティングして実行、結果をマージ •
Index servers ◦ データのインデックスを管理 • Evaluators ◦ Mixer に対して定期的に Standing query を発行し、その結果を Leaves に書き込む
(red) ingest data • Ingestion routers ◦ データを適切な Leaf router
にルーティング • Leaf routers ◦ Leaves に転送 • Range assigners ◦ Leaf 間の負荷をバランシングするために、 Leaves へのデータ割当を管理
Data Model • 時系列データをスキーマ化されたテーブルとして扱う • 各テーブルは複数の key/value をもつ ◦ Target
Schema と Metrics Schema ◦ 同じターゲットの時系列を同じ Leaf に格納 • データが生成された場所の近くにデータを保存 ◦ location フィールドによって決定 • Metrics Schema ◦ distribution 型を選択可能 ▪ double 値の集合をバケットと呼ばれるサブセットで分割
ex) Data model • Target Schema: ComputeTask 4つの key カラムをもつ
• Metric Schema: /rpc/server/latency 2つの key カラム、1つの value カラムを もつ
ex) Data model • ComputeTask ◦ Borg上のタスクを示す ◦ location フィールドは
cluster
ex) Data model • ComputeTask::sql-dba::db.server::aa::0876 はデータベースサーバの特定の タスクを示す ◦ Leaves のシャーディングやロードバランスで使用
Metrics • /rpc/servers/latency の例 • バケットサイズ: 10ms
Data collection overview データ収集の4ステップ 1. クライアントは Ingestion Routers にデータを送信(ライブラリを使用) 2.
Ingestion Routers は location フィールドに従ってゾーニング 3. Leaf Routers は Range Assigner に従って Leaves 全体にデータを分配する 4. 各 Leaf はインメモリストアとリカバリログにデータを書き込む(高度な最適化を 含む)
Data collection overview • 基本的には Colossus にリカバリログを書き込み、冗長性を担保する • 一方で、リカバリログ書き込みは ack
を待たない ◦ ログ書き込みはベストエフォート ◦ 全ての Colossus インスタンスが利用できない場合でもシステムを継続する必要がある ◦ 3つのクラスタ間で非同期で複製
Intra-zone Load Balancing • Target schema のキーカラムのみを使用 ◦ 同一キーは同一Leafに格納される •
Leaf にかかるCPU・メモリ負荷によってレンジ割当を動的に変更する ◦ 変更の間も、リカバリログを利用してシームレスにデータは収集される
Collection Aggregation • ユーザの書き込み通りにデータを保存するのは非常にコストが高い ◦ データの取り込み時にデータを集約する • デルタ時系列 ◦ ディスクIOPなどのメトリクスは、欠損に強い累積時系列を使用することをクライアントに推奨している
• バケット(右上図) ◦ 期間 Ts で区切られたデータバケット ◦ Ts はユーザで設定可能 • アドミッションウィンドウ ◦ 入力を受付可能な枠 ◦ この枠よりも古いデータが到着しても拒否する ◦ Clock Skew 回避のため TrueTimeを利用
Scalable Queries • 0個以上の時系列テーブルを入力として、1個のテーブルを出力 • 例 ◦ バイナリバージョン毎に分類された一覧のタスクの RPCレイテンシ分布 ◦
RPCレイテンシ増を引き起こすリリースを検出
Scalable Queries • latency について user == “monarch” でフィルタされたデータを抽出 ◦
align によって、同じ開始時刻から一定の間隔でタイムスタンプを持つテーブルが生成される • ビルドラベルについて “monarch” と “mixer.*” でフィルタされたデータを抽出 • latency でポイント毎に集計
Scalable Queries • 2種類のクエリ ◦ ad hoc queries ▪ システム外ユーザから送られる
◦ standing queries ▪ マテビュー ▪ Monarchに保存される ▪ データの圧縮やアラート生成に利用される
Standing Queries • クエリの評価は、Global Evaluator または Zone Evaluator によって行われる ◦
多くは Zone Evaluator によって評価される ◦ クエリの同一コピーを Zone Mixer に送信 ◦ 出力を自分のゾーンに書き込む
Query Pushdown • テーブル操作の評価を極力データソースに近い位置で行う ◦ 同時実行性向上、負荷分散 ◦ データ量の削減 • Pushdown
to zone ◦ 同一 location フィールドの出力は、単一ゾーンの入力だけで処理が完結する • Pushdown to leaf ◦ leaf で完結するものは極力 leaf で実行
Field Hints Index • FHI: Field Hints Index を利用して、child へのクエリを送信する際に無関係な
child への検索をスキップする • False positive(誤検出) が起こり得るが、結果の正しさに影響しない ◦ この child はその key 持ってるよ!⇒探してみたけど実はもってなかった。。。 • ストリーミングRPCによって継続的にインデックス情報を更新
Configuration • 分散型マルチテナントサービスとして、集中型の構成管理システムが必要 • 設定情報はグローバルな Spanner に保存される • 設定値は各ゾーンの設定ミラーに複製される ◦
ミラーから各コンポーネント上のメモリへ設定値をキャッシュ ◦ ミラーが使えなくなった場合は古い configuration でも動作するが、SREが監視している
Configuration • スキーマ ◦ 事前定義スキーマ ▪ ComputeTask や /rpc/server/latency など
▪ 一般的なワークロードのデータは自動収集可能 ◦ カスタムメトリクスももちろん可能 • サンプリング頻度、保存する期間、記録媒体、レプリカ数など細かく設定できる ◦ ストレージコスト削減 • Standing Query の設定 ◦ アラートの設定(しきい値、通知方法含む)も可能
Evaluation
System scale • Monarch の社内利用ユーザは 30,000人以上 • 38のゾーン、5リージョン • 40万タスク(重要なタスクのみ表に記載)
◦ ルートタスクの数はゾーンタスクよりも少ない(できるだけゾーンに寄せている)
System scale • Figure 8,9: Monarchの内部デプロイ数と消費バイト数 • Figure 10: クエリ数
• 2019年7月時点で、9,500億個の時系列データと750TBのデータを保持
System scale • Monarch へのデータ書き込み量/s • Monarchの社内展開において、2019-07時点で 2TB/s • 2018-07⇒2019-01
でほぼ2倍に成長 ◦ Collection Aggregation による
Scalable Queries • クエリのレイテンシ • ルートクエリは50%ile 79ms、99.9%ile 6s • ゾーンが小さいほどクエリのレイテンシが低い
• 多くのユーザは高コストなクエリを投げがちなので、これらのメトリクスに自動ス タンディングクエリを設定 ◦ 「全タスクの latency を集計!」
Scalable Queries • クエリ最適化のパフォーマンス影響 • Query Pushdown と FHI を有効にすると、6.73s
で実行可能
Lessons Learned • 辞書式順序シャーディング ◦ Monarch ゾーンを数万のリーフに拡張 • プッシュ型のデータ収集 ◦
堅牢性を高めると同時にアーキテクチャを簡素化する • スキーマ化されたデータモデル ◦ 堅牢性を高めパフォーマンスを向上 ◦ クエリを検証・最適化できる • 継続的なスケーリング ◦ Index Server や Collection Aggregation は初期設計後に追加導入 • マルチテナント型 ◦ 異なるワークロードが共存することはチャレンジング ◦ isolation や throttling などの機能が必要 ◦ 継続的に改善し続けている
まとめ • Planet-scale のマルチテナント型インメモリ時系列データベース Monarch ◦ 多くのリージョン・ゾーンに配置されている ◦ グローバルな configuration
、クエリプレーン ◦ 様々な最適化技術を適用 • 10億ユーザ規模のGoogle内システムを支える不可欠な存在
Thank you!