1. ホーム
  2. apache-zookeeper

[解決済み] Apache ZooKeeperの説明

2022-03-23 10:45:52

質問

ZooKeeperがどのように動作し、何をするのか、理解しようとしています。ZooKeeperに匹敵するようなアプリケーションはありますか?

もし知っているならば、素人にZooKeeperをどう説明しますか?

apache wiki、zookeeper sourceforge...を試しましたが、まだ関連付けることができません。

私は今、以下のものを読みました。 http://zookeeper.sourceforge.net/index.sf.shtml ということは、このようなサービスはもっとあるのでは?サーバーのサービスを複製するだけという単純なものなのでしょうか?

解決方法は?

簡単に言うと、ZooKeeperは分散アプリケーションの構築を支援します。

仕組み

ZooKeeperは、最終的な一貫性を持つ複製された同期サービスであると説明することができます。ZooKeeper のデータは複数のノードに分散されており (このノードの集合をアンサンブルと呼ぶ)、クライアントはそのうちの任意のノード (すなわち特定のサーバ) に接続し、1つのノードが故障しても移行できるため、堅牢である。特に、マスターノードはアンサンブル内の合意によって動的に選ばれる。マスターノードが故障した場合、マスターの役割は他のノードに移行する。

書き込みの処理方法

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

線形書き込みが保証されていることが、ZooKeeperが書き込み優位のワークロードでうまく機能しない理由である。特に、メディアのような大きなデータの交換には使用しない方がよいでしょう。共有データを含む通信である限り、ZooKeeperはあなたを助けます。同時にデータを書き込む可能性がある場合、ZooKeeperは、書き手から見て厳密には必要でなくても、操作の順序を厳しくしてしまうので、実際には邪魔になります。ZooKeeperの理想的な使い方は、クライアント間でメッセージを交換するような調整用である。

読み出しの処理方法

これはZooKeeperが優れている点で、クライアントが接続する特定のサーバーによって提供されるため、読み込みは同時進行します。しかし、これは最終的な一貫性の理由でもある。クライアントの "view" は、マスターが対応するサーバを境界があるが不定の遅延で更新するので、古くなることがある。

詳細

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

シーケンシャルZnode

興味深いことに、znodeの名前は以下のようにすることができます。 シーケンシャル つまり、クライアントがznodeを作成するときに提供する名前はプレフィックスに過ぎず、フルネームもアンサンブルによって選択された連番で与えられます。これは、例えば、同期の目的で便利です。複数のクライアントがリソースのロックを取得したい場合、それぞれロケーションにシーケンシャルなznodeを同時に作成することができ、最も小さい番号を取得した人がロックを受ける権利があります。

エフェメラルZnode

また、znodeは エフェメラル これは、それを作成したクライアントが切断されると同時に破棄されることを意味します。これは主に、クライアントがいつ失敗したかを知るために有用です。これは、クライアント自身が、新しいクライアントが引き受けるべき責任を負っている場合に関連します。ロックの例では、ロックを持っているクライアントが切断するとすぐに、他のクライアントがそのロックを受ける権利があるかどうかを確認することができます。

時計

クライアントの切断に関連する例は、znodeの状態を定期的にポーリングする必要がある場合に問題となる可能性があります。幸いなことに、ZooKeeper にはイベントシステムが用意されており 見る をznodeに設定することができます。これらの時計は、znodeが特別に変更されたり削除されたり、その下に新しい子が作成された場合にイベントをトリガーするように設定されるかもしれません。これは明らかにznodeのsequentialとephemeralオプションとの組み合わせで有用です。

使用場所と使用方法

Zookeeperの典型的な使用例としては、クライアントノード間でデータを共有し、同期を考慮した非常に慎重な方法でアクセス/更新を行う必要がある分散メモリ計算が挙げられる。

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

ZooKeeperはfeature-lightであり、リーダー選出、ロック、バリアなどの機構はすでに存在せず、ZooKeeperプリミティブの上に記述することができることを意味します。 C/Java API が扱いにくい場合は、以下のような ZooKeeper をベースにしたライブラリに頼ると良いだろう。 ケージ と特に キュレーター .

もっと読みたい方はこちら

公式ドキュメントは別として、かなり良いので Hadoop: 決定版ガイド 35ページにわたって、ZooKeeperが何をするのかが説明されており、その後に設定サービスの例が示されています。