書き込み要求はどのように実行されるか

書き込み要求の仕組み。

コーディネーターは、書き込まれる行を所有するすべてのレプリカに書き込み要求を送信します。すべてのレプリカ・ノードは、稼働していて使用可能であれば、クライアントによって指定された整合性レベルに関係なく、書き込み要求を受け取ります。書き込み整合性レベルは、書き込みが成功したと見なされるために、成功確認を応答する必要があるレプリカ・ノードの数を定めます。成功とは、「データはどのように書き込まれるか」の記載にあるように、データがコミット・ログとmemtableに書き込まれたことを意味します。

コーディネーター・ノードは、書き込みをその行のレプリカに転送し、整合性レベルで指定された数のノードから書き込み確認応答を受け取ると、クライアントに応答します。例外:
  • コーディネーターは、要求された整合性レベルを満たすのに十分な数のレプリカに書き込めない場合は、Unavailable例外をスローし、書き込みを実行しません。
  • レプリカは十分にあるが、時間枠内に必要な書き込みが完了しない場合、コーディネーターはTimeout例外をスローします。

たとえば、単一データ・センターに10ノードのクラスターがあり、レプリケーション係数が3であった場合、受信した書き込みは、要求された行を所有する3つのノードすべてに送信されます。クライアントによって指定された書き込み整合性レベルがONEである場合、書き込みを完了した最初のノードがコーディネーターに応答を返すと、コーディネーターが代理で成功メッセージをクライアントに返します。整合性レベルがONEであるということは、3つのレプリカのうちの2つが、要求が行われたときにダウンしていたら、この書き込みを取りこぼす可能性があるということです。レプリカが書き込みを取りこぼした場合、行は、いずれかの組み込みリペア機能(ヒンテッド・ハンドオフ、読み取りリペア、またはアンチエントロピー・ノード・リペア)を使用して、整合が取れていることを後で確認します。

図: 3つのレプリカ・ノードを持つ単一データ・センター・クラスターとONEに設定された整合性