2009-09-15 Migration to a Better Datastoreの要点メモ・その2 tips GAE Migration to a Better Datastoreの要点の後半です(前半はこちら)。 Megastoreレプリケーションで解決 Megastoreとは、Bigtable上に実装されたGoogle内部のライブラリ 宣言的スキーマ(スキーマ定義ってこと?)、複数行トランザクション、セカンダリインデックス、consistent replication(整合性を確保できるデータセンター間レプリケーション)をサポート appengineではMegastoreの使いたいところだけ使っている。宣言的スキーマは使わないが、consistent replicationは開発中からフォローしてきた 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書く必要なくなるね!)