High replication option for App Engine

ずいぶんさぼってしまって、1.4.1もリリースされるというのにちゃんとフォローできていないのだけど、これはちょっと面白いので書いておこう。App Engineにhigh replication optionが追加された

High Replication Option

App Engineでは、通常マスタ・スレーブ型でバックアップを取っていた。ユーザのデータはマスタのデータセンターに書きこまれ、さらに背後にあるスレーブのデータセンターにコピーされる。このコピーは非同期に行われるので、書き込みにはそれほど時間がかからない作りになっている。そのかわり、スレーブでの書き込みがすぐに成功するとは限らないので、スレーブに書き込む前にマスタが落ちてしまうと、データが巻き戻ってしまうことがありうる。

これに対してHigh replication optionを使うと、より多数のデータセンターに対して同時に書きこみを行うだけでなく、Paxosアルゴリズムという同意アルゴリズムを使って、データの書き込みを保証する。いくつのデータセンターに複製を取るのかは書かれていない。ただ、Paxosは普通奇数で運用するので、3か5ではないだろうか。後述のお値段から言って、3ってことはないから5か。

これには当然欠点がある。ひとつは書き込みのレイテンシが増大すること、もうひとつはよりたくさんのストレージを消費することだ。5つ書き込んでいるとすれば、これまでにくらべて2.5倍ストレージを消費する。

このモードを使っていると、ときどきあった事前にスケジュールされているリードオンリーになる期間の影響がまったくないらしい。また、これまでまれにあったダウンも、このモードでは殆ど無い!とのこと。むう。

こちらのドキュメントによると、コンシステンシにも影響があるようだ。エンティティグループ内でのみコンシステンシが保証されるとのこと。複数のエンティティグループにまたがるクエリに対しては、コンシステンシが保証されない。

使い方

データの持ち方が全然変わってしまうので、これまでのアプリケーションをHigh Replicationに切り替える事はできない。これは仕方のないところ。新しく作るときにオプションで設定する必要がある。

とはいえ、移行したいという人も多いだろうということで、移行を手助けするツールが提供されている。新しいアプリケーションをHigh Replicationでつくっておいて、古いアプリケーションをRead Onlyモードに切り替えて、移行ツールを使う、ということらしい。

移行ツールはPythonのランタイムを使うので、Javaで使っている人は、アプリケーションにバージョンを一つ追加して、それをつかえ、とのこと。

移行ツールは、サーバ側でMapReduceジョブを実行してコピーしてくれるらしい。かっこいいなあ。

お値段

お値段はとりあえず7月のおわりまでは、データストアの料金が「通常の3倍」とのこと。つまり1Gあたり15セントだったものが45セントになる。が、その後は改定されるかもしれないらしい。

Free Quotaは、0.5GB。通常の半分だ。良心的だなあ。