Apache ZooKeeper の説明 質問する

Apache ZooKeeper の説明 質問する

ZooKeeper の仕組みと機能について理解しようとしています。ZooKeeper に匹敵するアプリケーションはありますか?

ご存知であれば、ZooKeeper を素人にどう説明しますか?

Apache Wiki、Zookeeper SourceForge を試してみましたが、まだ理解できません。

読み終えたhttp://zookeeper.sourceforge.net/index.sf.shtmlでは、このようなサービスは他にもあるのでしょうか? サーバー サービスを複製するだけの簡単なものなのでしょうか?

ベストアンサー1

簡単に言えば、ZooKeeper は分散アプリケーションの構築に役立ちます。

使い方

ZooKeeper は、結果整合性を備えた複製同期サービスと言えます。永続化されたデータは複数のノード (このノード セットは「アンサンブル」と呼ばれます) に分散され、1 つのクライアントがそれらのいずれか (つまり、特定の「サーバー」) に接続し、1 つのノードに障害が発生すると移行するため、堅牢です。つまり、ノードの過半数が動作している限り、ZooKeeper ノードのアンサンブルは存続します。特に、マスター ノードはアンサンブル内のコンセンサスによって動的に選択されます。マスター ノードに障害が発生すると、マスターの役割は別のノードに移行します。

書き込みの処理方法

マスターは書き込みの権限を持ちます。この方法では、書き込みが順番に永続化されることが保証されます。つまり、書き込みは線形です。クライアントがアンサンブルに書き込むたびに、大多数のノードが情報を永続化します。これらのノードには、クライアントのサーバーと、当然マスターが含まれます。つまり、各書き込みによって、サーバーがマスターと最新の状態になります。ただし、同時書き込みはできないことも意味します。

線形書き込みの保証は、書き込みが中心のワークロードでは ZooKeeper のパフォーマンスが十分でない理由です。特に、メディアなどの大容量データの交換には使用しないでください。通信に共有データが含まれる限り、ZooKeeper が役立ちます。データが同時に書き込まれる可能性がある場合、ZooKeeper は実際には邪魔になります。書き込み側の観点から厳密に必要でなくても、操作の順序を厳密に強制するからです。ZooKeeper の理想的な用途は、クライアント間でメッセージが交換される調整です。

読み取りの処理方法

これが ZooKeeper が優れている点です。読み取りは、クライアントが接続する特定のサーバーによって処理されるため、同時実行されます。ただし、これは最終的な一貫性の理由でもあります。マスターは、制限されているが定義されていない遅延で対応するサーバーを更新するため、クライアントの「ビュー」が古くなる可能性があります。

詳細に

ZooKeeper の複製データベースは、ファイル システム ノード (ディレクトリと考えてください) を大まかに表すエンティティであるznodeのツリーで構成されます。各 znode には、データを格納するバイト配列が追加されることがあります。また、各 znode の下に他の znode が存在する場合もあり、実質的に内部ディレクトリ システムを形成します。

連続znode

興味深いことに、znode の名前は連続したものにすることができます。つまり、znode の作成時にクライアントが提供する名前はプレフィックスのみであり、完全な名前もアンサンブルによって選択された連続番号で指定されます。これは、たとえば同期の目的に役立ちます。複数のクライアントがリソースのロックを取得したい場合、各クライアントは同時に場所に連続した znode を作成できます。最も小さい番号を取得したクライアントがロックを取得する権利を持ちます。

一時的な znode

また、znode は一時的なものである場合もあります。つまり、それを作成したクライアントが切断するとすぐに破棄されます。これは主に、クライアントがいつ失敗したかを知るために役立ちます。これは、クライアント自体に新しいクライアントが引き受けるべき責任がある場合に関係する可能性があります。ロックの例を挙げると、ロックを持っているクライアントが切断するとすぐに、他のクライアントはロックの権利があるかどうかを確認できます。

腕時計

クライアントの切断に関連する例は、znode の状態を定期的にポーリングする必要がある場合に問題になる可能性があります。幸い、ZooKeeper は、 znode にウォッチを設定できるイベント システムを提供しています。これらのウォッチは、znode が具体的に変更または削除された場合、またはその下に新しい子が作成された場合にイベントをトリガーするように設定できます。これは、znode のシーケンシャル オプションとエフェメラル オプションと組み合わせると明らかに便利です。

どこでどのように使用するか

Zookeeper の使用法の標準的な例としては、分散メモリ計算があります。分散メモリ計算では、一部のデータがクライアント ノード間で共有され、同期を考慮して非常に慎重にアクセス/更新する必要があります。

ZooKeeper は同期プリミティブを構築するためのライブラリを提供し、分散サーバーを実行する機能により、集中型 (ブローカーのような) メッセージ リポジトリを使用するときに発生する単一障害点の問題を回避します。

ZooKeeper は機能が少ないため、リーダー選出、ロック、バリアなどのメカニズムは存在しませんが、ZooKeeper プリミティブの上に記述することができます。C/Java API が扱いにくい場合は、次のような ZooKeeper 上に構築されたライブラリに頼る必要があります。ケージそして特に学芸員

さらに読む

公式ドキュメントは別として、これはかなり良いものですが、私は第14章を読むことをお勧めします。Hadoop: 決定版ガイドこれには、ZooKeeper が本質的に何をするのかを説明する約 35 ページがあり、その後に構成サービスの例が続きます。

おすすめ記事