マスターがマジョリティ・ノード・パーティションに存在する場合
シャードが2つのパーティションに分割されたものとします。パーティションAには、マスターを含め、プライマリ・ゾーン内のレプリケーション・ノードの単純多数が含まれています。パーティションBには、残りのノードが含まれています。
-
パーティションAでは引き続き読取りリクエストと書込みリクエストが正常に処理されますが、それでも多くのレプリケーション・ノード(パーティションBに含まれているもの)を失ったことから読取りスループットは低下します。このような状況では、その時点でどのような永続性ポリシーが使用されているかに注意する必要があります。プライマリ・ゾーンのレプリカのうち、永続性ポリシーの要件を満たすだけの十分なレプリカがパーティションAに含まれていない場合、書込みリクエストを処理しきれない可能性があります。永続性ポリシーによって求められるレプリカが過半数以下である場合は、シャードは書込みリクエストを処理できます。
-
パーティションBでは引き続き読取りリクエストが正常に処理されますが、データが次第に古くなります。一貫性保証の設定によっては、パーティションBで読取りリクエストの処理が停止される可能性があります。バージョン・ベースの一貫性が使用されている場合は、パーティションBでは、マスターからバージョン・トークンを取得できないため、ネットワーク・パーティションの発生後すぐに
ConsistencyException
例外が発生する可能性があります。同様に、時間ベースの一貫性ポリシーが使用されている場合は、レプリカがマスターから遅れすぎると、ConsistencyException
例外が発生し、それ以降、書込み更新が受信されなくなります。デフォルトでは、読取りリクエストの処理に一貫性保証は求められません。そのため、一貫性ポリシーを明示的に作成して使用しないかぎり、パーティションBでは、ネットワーク全体が停止しても引き続き読取りリクエストを処理できます。パーティションBでは、新しいマスターの選択が試みられますが、そのために必要な単純多数のレプリケーション・ノードが含まれていないことから失敗します。
さらに、クライアント・コードがパーティションAにはアクセスできて、パーティションBにはアクセスできない場合は、シャードでは引き続き読取りリクエストと書込みリクエストが正常に処理されますが、読取り容量が減少します。
一方、クライアント・コードがパーティションBを読み取ることができて、パーティションAを読み取ることができない場合は、シャードでは書込みリクエストを一切処理できなくなります。これは、パーティションAにはマスターが含まれ、かつ、パーティションBには新しいマスターを選択するために必要十分なレプリケーション・ノードが含まれていないためです。