こんにちは。
コンサルティング & テクノロジー部の茨木です。
Microsoft Azure の Cosmos DB で遊んでみようと思います。
すごいサービスですね。グローバル分散・容量無制限・パフォーマンスSLA・弾力的スケーリングと、まさにクラウドシステムのためにNoSQLを集約したデータベースといった感じです。特徴点が多いサービスですが、今回はグローバル分散にフォーカスして、データが分散されていく様子を可視化してみます。
結果
キャプチャ動画です。
左側で色を選択して Cosmos DB に保存しています。
右側のリストは各リージョンからデータを取得し続けている様子です。
アプリに凡例を入れていませんでしたが、DB応答速度(ミリ秒)・タイムスタンプ・接続リージョン、を表示しています。
速いですね。。。実はもっとゆっくりと時間をかけて拡散していく事を期待していました。それでもかろうじて、タイムラグをもって分散していく様子はわかるでしょうか。
Japan East に注目すると、読み取り値が新旧不安定な様子も見られます。これは、読み取り操作の一貫性レベルを Eventual と設定している為に発生してしまいます。
構成
以下の様な構成で実験しています。
一般的なネットワークで遠い国のリージョンに接続すると、それだけで大きな遅延が発生してしまいます。データベースの応答速度を測るためには、同一リージョンで接続を完結する必要があります。今回は接続ポイントとなるリージョンに Azure Functions を設置して中継させる方法を採りました。
クライアントアプリはUWPアプリで作りました。関東の一般的な回線から世界各地へ接続しています。
書き込みリージョンはひとつだけです。Cosmos DB を Document DB APIで使用します。
注意
今回は実験以外の負荷をかけていません。負荷が低い状態で計測された結果であり、実運用においてこのレベルの分散速度が出るというものではありません。
リージョン間分散も含めた一貫性についての保障範囲は、サービスの一貫性レベルとして定義されています。
以下は Bounded Staleness (有界整合性制約)の場合に設定できる最高性能の遅延保証です。
最大ラグは、この値を超えた遅延がないことを保証する閾値で、この例では以下の意味を持ちます。
最大ラグ(操作):レプリケート遅延が100000回以上の操作(書き込み)を超えないという保証
最大ラグ(時間):書き込まれたデータが5分以内にレプリケート完了するという保証
Special thanks
UWPアプリのカラーピッカーは、こちらの情報を参考にさせて頂きました。