スティルハウスの書庫の書庫

はてなダイアリーで書いてた「スティルハウスの書庫」を移転してきました。

Migration to a Better Datastoreの要点メモ・その2

Migration to a Better Datastoreの要点の後半です(前半はこちら)。

  • Megastoreレプリケーションで解決
    • Megastoreとは、Bigtable上に実装されたGoogle内部のライブラリ
    • Megastoreレプリケーション
      • データセンター間レプリケーションBigtableカラム単位の代わりにエンティティグループ(EG)単位で実行
      • EGがコミットされた順番を維持してレプリケーション
      • 前述のような切り替え状況で、AからBへのコピーが完全に終わっていなくても、Bの整合性はつねに確保され、Aの最新のスナップショットとなる
    • わずかなデータの取りこぼしは発生するが、Bへの切り替えを直ちに実施できる
  • Paxosは使わなかった
    • MegastoreではもともとPaxosを使うつもりだったが、Paxosは(同期書き込みの)遅延が大きくappengine向けではなかった
    • そこでMegastoreチームと協議し、よりBigtableレプリケーションに似た非同期でバックグラウンドな仕組みを実装した
    • わずかな取りこぼしは発生するが高速で整合性の取れたレプリケーションが実現できる
  • 今後の予定
    • アルファ版の新appengineを作って数か月にわたって徹底的にテストした
    • 9/22に移行予定
      • まずはDatastoreが20〜30分間リードオンリーモードとなる
      • その後、数分間Datastoreがダウンする(トランザクションログフォーマットを変更するため)
    • こんなことも検討中
      • プライマリのデータセンターの反応が遅いときは、バックアップのデータセンターから読み込み
      • Paxosによる同期式のデータセンター間レプリケーションのオプション(自分で分散tx書く必要なくなるね!)