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

Megastore

 Megastore

a2-ito

May 17, 2022
Tweet

More Decks by a2-ito

Other Decks in Technology

Transcript

  1. Publication Megastore: Providing Scalable, Highly Available Storage for Interactive Services

    Jason Baker, Chris Bond, James C. Corbett, JJ Furman, Andrey Khorlin, James Larson, Jean-Michel L´eon, Yawei Li, Alexander Lloyd, Vadim Yushprakh Proceedings of the Conference on Innovative Data system Research (CIDR) (2011), pp. 223-234
  2. Megastore 概要 • 分散KVS ◦ strong consistency と high availability

    • Google Cloud の Datastore は Megastore を用いて実装されている
  3. 参考:Datastore の特徴 • 任意のストレージ容量 • ACIDトランザクション • 強整合性と結果整合性 • マルチテナンシ

    • オートスケーリング • 暗号化 • 冗長性(リージョナル、マルチリージョナル)
  4. 参考:Firestore • 従来の Datastore は Firestore に統合されている ◦ リブランディング ◦

    ネイティブモードとDatastoreモード • モバイルアプリやウェブアプリの場合は、ネイティブモードが推奨 ◦ 数百万のクライアント同時実行までオートスケール ◦ そうでない場合は、Datastoreモードで。 • あとからはモード変更できない • 料金体系は同じ ◦ 容量とオペレーションに依存
  5. Ancestorパス (祖先パス) • エンティティは親子関係を設定できる • エンティティを識別できる「種類と識別子のペア」をAncestorパス(祖先パス)と 呼ぶ [User:alice, TaskList:default, Task:sampleTask]

    • 基本戦略としては、関連性の高いデータは”エンティティグループ”にまとめること ◦ 例:特定のユーザに紐づくプロファイルデータ
  6. グローバルクエリとAncestorクエリ • グローバルクエリ ◦ ある Kind に含まれるすべてのデータを検索対象とするもの ◦ 結果整合 ◦

    例 ▪ SELECT * FROM Book WHERE pages > 999 • Ancestorクエリ ◦ エンティティグループを指定して検索 ◦ 強整合 ◦ 例 ▪ SELECT * FROM Book WHERE pages > 999 AND __key__ HAS ANCESTOR Key('Organization', 'Flywheel', 'User', 'Alice')
  7. Transactions and Concurrency Control • serializable ACID • WALログを実装 •

    MVCCを採用 ◦ Bigtable のタイムスタンプ別に valueを保存できる機能を利用 • Read は current, snapshot, inconsistent の3種類を提供 ◦ current : write 適用後 ◦ snapshot : 最新のタイムスタンプ • 2PCも使えるけど基本非推奨
  8. トランザクションの流れ 1. Read ◦ 最新のタイムスタンプとログ位置を確認 2. Application logic ◦ Bigtable

    から値を読んで、writes を準備 3. Commit ◦ Paxos によるデータ複製 (to log) ◦ OCC (Optimistic Concurrency) による排他 4. Apply ◦ Bigtable に書き込み 5. Clean up ◦ 不要なデータを削除
  9. Megastoreのインスタンス • two full replicas と one witness replica •

    Client library が Bigtable に書き込むことで Paxos operation を実行 • 通信コスト最小化のため、Remote Bigtable へは Replication Server 経由
  10. Reads (current read) 1. Query Local ◦ local replica が最新かどうかを

    Coordinator から確認 2. Find Position ◦ a) local replica を読む ◦ b) 最適なポジションを確認 (Optional) 3. Catchup ◦ ログのキャッチアップ 4. Validate ◦ up-to-date の印をつける ◦ 返事は待たない 5. Query Data ◦ timestamp を使って replica を読む
  11. Writes 1. Accept Leader ◦ 値が最新であれば step 2 をスキップ 2.

    Prepare (Optional) ◦ Paxos Prepare phase 3. Accept ◦ 残りのノードに値を受け入れてもらう 4. Invalidate (Optional) ◦ Quorum にならなければ無効化 5. Apply ◦ 値を適用
  12. Coordinator Availability • Coordinator プロセスダウンは可用性の低下に繋がる • Failure Detection ◦ NW分断検知のため、out-of-band

    protocol を使用 ▪ Chubby lock service • Validation Races ◦ 競合するリクエストの扱い ◦ ログの位置によって判定
  13. Operational Issues • レプリカ障害or通信断による Megastore のパフォーマンス影響を減らしたい ◦ 対策1.クライアントに影響のあるレプリカを利用させないようにする ▪ Chubby

    lock を持ったままかもしれない ◦ 対策2.レプリカの coordinators を無効化 ◦ 対策3.レプリカを完全に使わなくさせる
  14. Production Metrics • 通常の平均レイテンシ ◦ Read 10ms程度 ◦ Write 100-400ms程度

    ◦ データ量によって変わる • Read/Write のアプリケーションの平 均レイテンシ
  15. まとめ • a scalable, highly available なデータストア Megastore • Paxos

    によるレプリカの同期及び fast failover • Bigtable を使用 ◦ ACID、インデックス、キューを追加 • エンティティグループによるサブデータベース分割 • 内外含め100以上のアプリケーションが利用している