NEXTSCAPE blog

株式会社ネクストスケープの社員による会社公式ブログです。ネスケラボでは、社員が日頃どのようなことに興味をもっているのか、仕事を通してどのような面白いことに取り組んでいるのかなど、会社や技術に関する情報をマイペースに紹介しています。

MENU

容量無制限の Cosmos DB でデータがグローバル分散される様子を可視化してみる

こんにちは。

コンサルティング & テクノロジー部の茨木です。

 

Microsoft AzureCosmos DB で遊んでみようと思います。

f:id:nextscape_blog:20210910202354j:plain

 

すごいサービスですね。グローバル分散・容量無制限・パフォーマンスSLA・弾力的スケーリングと、まさにクラウドシステムのためにNoSQLを集約したデータベースといった感じです。特徴点が多いサービスですが、今回はグローバル分散にフォーカスして、データが分散されていく様子を可視化してみます。

 

結果

 

キャプチャ動画です。

結果キャプチャ

左側で色を選択して Cosmos DB に保存しています。

右側のリストは各リージョンからデータを取得し続けている様子です。

アプリに凡例を入れていませんでしたが、DB応答速度(ミリ秒)・タイムスタンプ・接続リージョン、を表示しています。

 

速いですね。。。実はもっとゆっくりと時間をかけて拡散していく事を期待していました。それでもかろうじて、タイムラグをもって分散していく様子はわかるでしょうか。

Japan East に注目すると、読み取り値が新旧不安定な様子も見られます。これは、読み取り操作の一貫性レベルを Eventual と設定している為に発生してしまいます。

 

 

構成

 

以下の様な構成で実験しています。

f:id:nextscape_blog:20210910202623p:plain

一般的なネットワークで遠い国のリージョンに接続すると、それだけで大きな遅延が発生してしまいます。データベースの応答速度を測るためには、同一リージョンで接続を完結する必要があります。今回は接続ポイントとなるリージョンに Azure Functions を設置して中継させる方法を採りました。

クライアントアプリはUWPアプリで作りました。関東の一般的な回線から世界各地へ接続しています。

書き込みリージョンはひとつだけです。Cosmos DB を Document DB APIで使用します。

 

注意

 

今回は実験以外の負荷をかけていません。負荷が低い状態で計測された結果であり、実運用においてこのレベルの分散速度が出るというものではありません。

リージョン間分散も含めた一貫性についての保障範囲は、サービスの一貫性レベルとして定義されています。

以下は Bounded Staleness (有界整合性制約)の場合に設定できる最高性能の遅延保証です。

f:id:nextscape_blog:20210910202648p:plain

最大ラグは、この値を超えた遅延がないことを保証する閾値で、この例では以下の意味を持ちます。
最大ラグ(操作):レプリケート遅延が100000回以上の操作(書き込み)を超えないという保証
最大ラグ(時間):書き込まれたデータが5分以内にレプリケート完了するという保証

 

 

 

Special thanks

 

UWPアプリのカラーピッカーは、こちらの情報を参考にさせて頂きました。

http://matatabi-ux.hateblo.jp/entry/2015/09/18/120000