ZooKeeperの仕組み、仕組み、および動作を理解しようとしています。 ZooKeeperに匹敵するアプリケーションはありますか?
知っている場合、ZooKeeperを素人にどのように説明しますか?
私はApache wiki、zookeeper sourceforgeを試しました...しかし、私はまだそれに関連することができません。
http://zookeeper.sourceforge.net/index.sf.shtml を読んだだけなので、このようなサービスは他にないでしょうか?サーバーサービスを複製するのと同じくらい簡単ですか?
簡単に言えば、ZooKeeperは分散アプリケーションの構築を支援します。
ZooKeeperは、結果整合性を備えた複製同期サービスとして説明できます。永続化されたデータは複数のノード(このノードのセットは「アンサンブル」と呼ばれます)に分散され、1つのクライアントがそれらのいずれか(つまり特定の「サーバー」)に接続し、1つのノードに障害が発生すると移行するため、堅牢です。厳密に過半数のノードが機能している限り、ZooKeeperノードのアンサンブルは生きています。特に、マスターノードはアンサンブル内のコンセンサスによって動的に選択されます。マスターノードに障害が発生すると、マスターの役割は別のノードに移行します。
マスターは書き込みの権限です。このようにして、書き込みは順序どおりに保持されることが保証されます。つまり、書き込みはlinearです。クライアントがアンサンブルに書き込むたびに、ノードの大部分が情報を保持します。これらのノードには、クライアントのサーバーと、明らかにマスターが含まれます。これは、書き込みごとにサーバーがマスターで最新になることを意味します。ただし、同時に書き込むことはできません。
線形書き込みの保証は、ZooKeeperが書き込み主体のワークロードに対してうまく機能しないという事実の理由です。特に、メディアなどの大きなデータの交換には使用しないでください。通信に共有データが含まれている限り、ZooKeeperが役立ちます。データを同時に書き込むことができる場合、ZooKeeperは実際には邪魔になります。これは、ライターの観点から厳密に必要でない場合でも、厳密な操作の順序付けを課すためです。その理想的な用途は、クライアント間でメッセージが交換される調整です。
これは、ZooKeeperが優れているところです。読み取りは、クライアントが接続する特定のサーバーによって処理されるため、同時実行です。ただし、これは最終的な一貫性の理由でもあります。クライアントの「ビュー」は、マスターが制限されたが未定義の遅延で対応するサーバーを更新するため、古くなる可能性があります。
ZooKeeperの複製データベースは、znodesのツリーで構成されます。これは、ファイルシステムノードを大まかに表すエンティティです(ディレクトリと考えてください)。各znodeは、データを格納するバイト配列によって強化される場合があります。また、各znodeには他のznodeがあり、実際には内部ディレクトリシステムを形成します。
興味深いことに、znodeの名前はsequentialにすることができます。これは、znodeの作成時にクライアントが提供する名前が接頭辞のみであることを意味します。フルネームは、選択された連番によっても与えられます。アンサンブルによって。これは、たとえば、同期の目的で役立ちます。複数のクライアントがリソースのロックを取得したい場合、それぞれが同時にロケーションで順次znodeを作成できます。
また、znodeはephemeralである可能性があります。これは、znodeを作成したクライアントが切断するとすぐに破棄されることを意味します。これは主に、クライアントがいつ失敗するかを知るために役立ちます。これは、クライアント自体が新しいクライアントが引き受けるべき責任がある場合に関連する可能性があります。ロックを例にとると、ロックを保持しているクライアントが切断されるとすぐに、他のクライアントはロックの資格があるかどうかを確認できます。
クライアントの切断に関連する例は、znodeの状態を定期的にポーリングする必要がある場合に問題になる可能性があります。幸いなことに、ZooKeeperはznodeでwatchを設定できるイベントシステムを提供しています。これらのウォッチは、znodeが明確に変更または削除された場合、またはその下に新しい子が作成された場合にイベントをトリガーするように設定できます。これは、znodeのシーケンシャルオプションとエフェメラルオプションとの組み合わせで明らかに役立ちます。
Zookeeperの使用の標準的な例は、分散メモリ計算です。この場合、一部のデータはクライアントノード間で共有され、同期を考慮するために非常に慎重な方法でアクセス/更新する必要があります。
ZooKeeperは、同期プリミティブを構築するためのライブラリを提供しますが、分散サーバーを実行する機能は、集中型(ブローカーのような)メッセージリポジトリを使用するときに発生する単一障害点の問題を回避します。
ZooKeeperは機能が軽いため、リーダーの選出、ロック、バリアなどのメカニズムはまだ存在していませんが、ZooKeeperプリミティブの上に記述できます。 C/Java APIが目的に対して扱いにくい場合は、ZooKeeper上に構築された cages などのライブラリ、特に curator に依存する必要があります。
公式のドキュメントは別ですが、かなり良いので、 Hadoop:The Definitive Guide の第14章を読むことをお勧めします。ZooKeeperが何をするかを本質的に説明する〜35ページがあり、構成サービスの例が続きます。
Zookeeperは、分散プロセスを確実に調整するのに役立つ最高のオープンソースサーバーおよびサービスの1つです。 Zookeeperは、一貫性とパーティションの耐性を提供するCPシステム(CAP定理を参照)です。 Zookeeperの状態をすべてのノードで複製すると、最終的に一貫した分散サービスになります。
さらに、フォロワーに多くの提案が欠落している場合、新しく選出されたリーダーはフォロワーを欠落している提案または州のスナップショットで更新します。
Zookeeperは、非常に使いやすいAPIも提供します。このブログ投稿 Zookeeper Java API examples には、例を探している場合のいくつかの例があります。
それで、これをどこで使用しますか?分散サービスに、一元化された信頼性の高い一貫した構成管理、ロック、キューなどが必要な場合は、Zookeeperが信頼できる選択肢であることがわかります。
ZooKeeperは一般的には理解していますが、「クォーラム」と「スプリットブレイン」という用語に問題があったため、調査結果を共有できるかもしれません(私も自分は素人だと思います)。
5台のサーバーのZooKeeperクラスターがあるとします。サーバーの1つがリーダーになり、他のサーバーがフォロワーになります。
これらの5つのサーバーが定足数を形成します。クォーラムとは、単に「これらのサーバーが誰をリーダーにするべきかを投票できる」ことを意味します。
したがって、投票は多数決に基づいています。マジョリティとは単に「半分以上」を意味するため、特定のサーバーがリーダーになるには、サーバー数の半分以上が同意する必要があります。
そのため、「スプリットブレイン」と呼ばれるこのような悪いことがあります。私が理解している限り、スプリットブレインは単純にこれです。5台のサーバーからなるクラスターは2つの部分に分割されます。つまり、「サーバーチーム」と呼びます。これは、両方の「サーバーチーム」が特定の順序を実行する必要がある場合、チームが優先されるべきであるとどのように決定するのかという点で、本当に悪い状況です。クライアントから異なる情報を受け取った可能性があります。したがって、どの「サーバーチーム」がまだ関連性があり、どのサーバーチームが無視できる/すべきであるかを知ることは本当に重要です。
大多数は、奇数のサーバーを使用する理由でもあります。 4台のサーバーと、2台のサーバーが分離するスプリットブレインがある場合、両方の「サーバーチーム」は「やあ、誰がリーダーかを決めたい!」と言うことができます。しかし、どの2つのサーバーを選択する必要があるかをどのように決定する必要がありますか? 5台のサーバーを使用するのは簡単です。3台のサーバーを持つサーバーチームが過半数を占め、新しいリーダーを選択することができます。
3台のサーバーがあり、そのうちの1台が失敗した場合でも、残りの2台が多数を占め、そのうちの1台が新しいリーダーになることに同意できます。
私はあなたがそれについてしばらく考えると、それがもうそれほど複雑ではないという用語を理解すると理解します。これが、これらの用語を理解する上で誰にも役立つことを願っています。
Zookeeperは、分散クラスター環境の構成情報、命名規則、および同期を維持および管理するための集中型オープンソースサーバーです。 Zookeeperは、低遅延と高可用性を提供することにより、分散システムが管理の複雑さを軽減するのに役立ちます。 Zookeeperは当初Hadoopのサブプロジェクトでしたが、現在はApache Software Foundationのトップレベルの独立プロジェクトです。