Google App Engineのデータストアに一貫性と可用性のオプションが追加
グーグルは「Google App Engine Blog」にて、データストアに2つの新機能、Eventual Consistency(結果整合性)とDatastore Deadline(データストアデッドライン)を追加したことを明らかにしました。これにより開発者は、データの一貫性と可用性のどちらを重視するのか、選べるようになりました。
プライマリが落ちていたらコピーを他のデータストアから取得
Eventual Consistency(結果整合性)オプションは、プライマリのデータストア以外のデータストアにコピーされたデータを読み込むことを許すオプションです。
グーグルの解説によると、これまでのGoogle App Engineのデータストアはいわゆる「Strong Consistency」(強い一貫性)を採用しており、プライマリのストレージが障害などでアクセスできなくなると、タイムアウトするまで処理待ちが生じていました。
強い一貫性の特徴は、アクセス時に必ず最新のデータが返ってくることが保証されていることです。例えば直前にデータの変更や削除などが行われた場合、強い一貫性が保証されていれば、それを読み出したときに必ずそのデータが変更されたことや削除されたことが分かります。しかしプライマリデータストアが障害などでアクセスできないときには、アプリケーションはリトライを繰り返した後にエラー値が返ります。
新しく追加された「結果整合性」オプションでは、プライマリ以外のストレージから読み込むことを許すため、読み込んだときにプライマリに対して行われた最新の状態が反映されているかどうかは保証されませんが、可用性は向上します。デベロッパーは、一貫性と可用性のトレードオフを選べるようになるわけです。
ただしトランザクション内のアクセスについてはつねに強い一貫性が適用されます。
グーグルは、一般的に数百ミリ秒から数秒でプライマリ以外のストレージに最新の状態が反映されると説明しており、結果整合性オプションを用いることでわずかながら検索時に最新の状況が反映されていない可能性があるとしています。しかし例えばSNSアプリケーションにおけるフォロー先の最新状況など、多少の遅れや一貫性の乱れは無視してもいいアプリケーションなどでは非常に有効なオプションとなるでしょう。
タイムアウト時間を設定
もう1つ新たに追加されたのが、Datastore Deadline(データストアデッドライン)です。これは、データベースへのアクセスへのタイムアウト時間を設定するオプションです。
デフォルトでは30秒間リトライを繰り返す設定になっていますが、この時間をミリ秒単位で最大30秒まで自由に設定できるようになったとのことです。
一貫性と可用性のトレードオフが広がってきた
Amazonクラウドで利用可能なデータベース「SimpleDB」でも先月、一貫性と可用性を選べるオプションが追加されたことをお伝えしました。
いわゆる「CAP定理」が教えているように、一貫性(C)、可用性(A)、ネットワーク分断耐性(P)は同時に2つしか満たせないトレードオフの関係にあります。いままでの商用リレーショナルデータベースでは自動的に一貫性と可用性が重視されてきましたが、NoSQLを中心にしてこの3つの中から何を重視するのか、開発者に選択できるような仕組みが少しずつ広がってきたようです。