Cassandra 1.1 のコードをチェックしたところ、マルチ DC 展開で CL.ALL を使用して書き込みを行うと、興味深い動作に気付きました。おそらく私はコードを間違って解釈しました.... とにかく:
最初に、行の変更を送信するためにノードの IP アドレスを収集します。これは、クライアントによって提供される一貫性レベルとは無関係です。1.0 では、すべての DC からのすべてのノードでしたが、1.1 からは、ローカル DC からすべてのノードを取得し、さらに各リモート DC から 1 つのノードを取得します (残りのノードは、メッセージの「転送先」と同じです)。各ミューテーションは個別のスレッドで送信されるため、リクエストは並行して実行できます。このような各ミューテーションは、メッセージング サービスによってメッセージとして処理されます。リモート DC のノードがメッセージを受信すると、「転送先」で指定された残りのノードに転送します。
クライアントによって提供される一貫性レベルは、受信メッセージを確認する必要があるノードの数を定義します。CL.ALL の場合、この数はレプリケーション ファクターによって決定されます。興味深いことに、ローカル DC からすべてのノードにメッセージを送信し、リモート DC からノードにメッセージを送信したため、これらの削除ノードからも確認応答が返されます。はいこれは依然としてレプリケーション係数によって定義される数ですが、notwork レイテンシーによっては、どのノードが受信メッセージを確認したかを確認できません。ローカルおよびリモート DC からのノードが混在している可能性がありますが、ローカル DC からのノードのみである可能性もあります。 . 最悪の場合、どのローカル ノードもメッセージを受信せず、リモート DC から確認が行われる可能性があります (多数の DC がある場合)。これの意味は -CL.ALL を使用して書き込みを行っても、ローカル DC からメッセージをすぐに読み取ることができるというわけではありません。