技術共有

Zookeeper の基本原則

2024-07-08

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

ZooKeeper は、分散システムの一貫性の問題を解決するために分散システムで広く使用されている、可用性の高い分散調整サービスです。以下では、そのアーキテクチャ、データ モデル、コア メカニズム、一貫性プロトコルなど、ZooKeeper の基礎となる原理を詳細に紹介します。

1. アーキテクチャ

ZooKeeper はマスター/スレーブ アーキテクチャを採用しており、通常はリーダーと複数のフォロワーで構成され、読み取りリクエストのプレッシャーを共有する非投票ノードとしてオブザーバー ノードもあります。

  • リーダー: すべての書き込みリクエスト (トランザクションリクエスト) を処理し、一貫性プロトコルを調整する責任を負います。
  • フォロワー: 投票に参加してリーダーのステータスを同期し、読み取りリクエストを処理します。
  • 観察者: 投票には参加せず、読み取りリクエストを処理し、クライアントからの書き込みリクエストを転送するだけです。

2. データモデル

ZooKeeper はファイル システムに似たツリー構造にデータを格納し、各ノードは znode と呼ばれます。

  • zノード: パス、データ、ステータス情報を含むデータ ノード。
  • 永続的な znode: 明示的に削除されない限り、ノードはクライアントの切断後も存続します。
  • 一時的な znode: クライアントが切断されると、ノードは自動的に削除されます。
  • シーケンシャル znode: ノードの作成時に、増加するシーケンス番号が自動的に付加されます。

3. コアメカニズム

3.1. セッション管理

各クライアントと ZooKeeper クラスターの間にセッションが確立され、接続状態が維持され、一時ノードが管理されます。 ZooKeeper は、ハートビート メカニズムを通じてクライアントの接続ステータスを検出します。一定期間内にハートビートが受信されない場合、セッションは切断されたとみなされます。

3.2. データの同期

各ノードのデータの一貫性を確保するために、ZooKeeper はデータ同期メカニズムを採用しています。 リーダー ノードが書き込みリクエストを処理すると、変更操作がすべてのフォロワー ノードに送信され、フォロワー ノードは変更操作を受け入れた後に確認し、最終的に変更操作が成功したかどうかをリーダー ノードが判断します。

3.3. 通知メカニズム

ZooKeeper は Watch メカニズムをサポートしており、クライアントは指定された znode に Watch を登録でき、znode のデータまたは子ノードが変更されると、ZooKeeper はクライアントに通知します。

4. 一貫性プロトコル

ZooKeeper は、ZAB (Zookeeper Atomic Broadcast) と呼ばれる一貫性プロトコルを使用してデータの一貫性を確保します。 ZAB は、選挙フェーズとブロードキャスト フェーズの 2 つのフェーズで構成されます。

4.1. 選挙フェーズ

ZooKeeper クラスターが開始するか、リーダー ノードに障害が発生すると、新しいリーダーを決定するために選挙が必要になります。選挙フェーズは主に次のステップに分かれています。

  1. 投票する: すべてのノードは自分自身に投票し、他のノードに投票を送信します。
  2. 票を受け取る: 各ノードは他のノードから投票を受け取り、投票結果をカウントします。
  3. 投票を更新する: 受け取った投票に自分より高い票を獲得した候補者がいる場合は、その候補者への投票を更新します。
  4. リーダーの決定: 候補者が半数以上の票を獲得すると、その候補者が新しいリーダーになります。
4.2. ブロードキャストフェーズ

リーダーが決定されると、ブロードキャスト フェーズに入ります。リーダーは、クライアントの書き込み要求を処理し、変更操作をすべてのフォロワー ノードにブロードキャストする責任を負います。具体的な手順は次のとおりです。

  1. 提案: 書き込みリクエストを受信した後、リーダーは提案を生成し、その提案をすべてのフォロワー ノードに送信します。
  2. 確認する: 提案を受信した後、フォロワー ノードはロギングを実行し、リーダーに確認メッセージを送信します。
  3. 提出する: リーダー ノードは確認メッセージの半分以上を受信した後、提案を送信し、すべてのフォロワー ノードに送信結果を通知します。
  4. 変更を適用する: フォロワー ノードはコミット通知を受信した後、変更操作を適用します。

5. サンプルコード

以下は、ZooKeeper を使用した簡単な例で、ノードの作成、ノード データの読み取り、Watch の登録方法を示しています。

5.1. 依存関係の導入

存在する pom.xml ZooKeeper クライアントの依存関係を導入します。

 

xmlコードをコピーする