Azure非リレーショナル応用

あるグローバルECサイトがCosmos DBのマルチリージョン読み取り構成(プライマリリージョン:米国東部、セカンダリリージョン:ヨーロッパ西部・東アジア)を使用しています。ヨーロッパのユーザーが商品を注文した直後、その注文データを読み取ろうとしたとき、「データがまだ到着していない」というエラーが発生しました。原因として最も可能性の高いものはどれか?

A.ヨーロッパリージョンの可用性が一時的に低下しており、読み取りリクエストがタイムアウトしている。別リージョンへの自動フェイルオーバーを待つ必要がある
✗ リージョンの完全な停止なら自動フェイルオーバーが発生しますが、部分的な遅延レプリケーションの場合は、フェイルオーバーは発動しません。一時的なレイテンシが原因です。
B.整合性レベルが「強い一貫性」に設定されており、プライマリ(米国東部)からセカンダリ(ヨーロッパ西部)へのレプリケーション完了を待つ間にタイムアウトが発生した。整合性レベルを「セッション一貫性」に変更すべき
✗ 強い一貫性は確かにレプリケーション待機を要求しますが、セッション一貫性に変更しても、地理的距離による物理的レプリケーションレイテンシは改善できません。根本的な解決ではない。
C.書き込みはプライマリリージョン(米国東部)で行われ、セカンダリリージョン(ヨーロッパ西部)へのレプリケーションには数百ms~数秒のレイテンシが存在する。ユーザーがセカンダリから読み取ろうとしたため、書き込みされたばかりのデータを読み取れない可能性がある← 正解
✓ 正解です。マルチリージョン環境では、プライマリへの書き込み後、セカンダリへのレプリケーションには数百ms~数秒のレイテンシがあります。ユーザーが書き込み直後にセカンダリから読み取ると、「読み取りスキュー」が発生します。
D.パーティションキーの設計が不適切で、書き込みと読み取りが異なるパーティションを参照している。リージョン別のパーティション戦略を導入すべき
✗ パーティションキーは各リージョンで同じロジックで機能するため、リージョン別の物理的レプリケーション遅延は別問題です。パーティション設計では解決できません。

この問題のポイント

マルチリージョン環境では、プライマリへの書き込み後、セカンダリへのレプリケーションには数百ms~数秒のレイテンシがあります。ユーザーが書き込み直後にセカンダリから読み取ると、「読み取りスキュー」が発生します。

DP-900:Microsoft Azure Data Fundamentals の問題一覧