22

Apache ZooKeeper は、小さなオブジェクト用の高可用性データストアの一種です。ZooKeeper クラスターは、データセット全体をメモリに保持するいくつかのノードで構成されます。データセットは「常に一貫性がある」と呼ばれるため、すべてのノードは常に同じデータを持ちます。

ドキュメントとブログ投稿によると、クラスター内のすべてのノードは読み取りに応答し、書き込みを受け入れることができます。

  • 読み取りは常にノードによってローカルで応答されるため、クラスターとの通信は関係ありません。
  • 書き込みは、指定された「リーダー」ノードに転送されます。このノードは、書き込み要求をすべてのノードに転送し、それらの応答を待ちます。ノードの少なくとも半分が応答すると、書き込みは成功したと見なされます。

質問: リーダーがノードの半分が応答するのを待つだけで十分なのはなぜですか? 誰かが更新を受け取らなかったノードの 1 つに接続すると、古い結果が得られます (ローカル値からローカル読み取りのみ)。

4

1 に答える 1

27

高い読み取り可用性を実現するために、Zookeeper はレプリケートに対する弱い一貫性を保証します。クライアント ノードは常に読み取りに応答でき、返される応答は古い値である可能性があります (新しいバージョンがリーダーによってコミットされた場合でも)。 )。

次に、すべてのアプリケーションが最新の情報を必要とするわけではないため、読み取りに対する応答が「古い可能性がある」かどうかを判断するのはユーザーの責任です。したがって、次の選択肢が提供されます。

1) アプリケーションが読み取りに最新の値を必要としない場合は、クライアントから直接データを要求することで、高い読み取り可用性を得ることができます。

2) アプリケーションで読み取りに最新の値が必要な場合は、読み取り要求の前に「同期」API を使用して、クライアント側のバージョンをリーダーと同期する必要があります。

結論として、Zookeeper はカスタマイズ可能な一貫性の保証を提供し、ユーザーは可用性と一貫性のバランスを決定できます。

Zookeeper の内部について詳しく知りたい場合は、こちらの記事をお勧めします: ZooKeeper: インターネット規模のシステムのための待機なしの調整。上記の戦略については、セクション 4.4 で説明します。

于 2011-03-24T19:52:06.010 に答える