|
ZooKeeper を一言でまとめると、「ZooKeeper は現在利用可能な分散コンポーネントの中で最も広く利用されていると言っても過言ではありません。その機能と責任は単一でありながら、極めて重要です。」
ZooKeeper とは何ですか? (技術記事) 1) ZooKeeper は、分散システムにおける一貫性を処理するためのフレームワークとして Yahoo! によって開発されました。 2) 背景:ZooKeeper は当初、Hadoop 開発の副産物として生まれました。分散システムにおける一貫性管理は困難であったため、他の分散システムは車輪の再発明をする必要がなくなり、ZooKeeper は後続の分散システムで広く採用されました。その結果、ZooKeeper は様々な分散システムの基盤コンポーネントとなり、その重要性が際立っています。(例として、ソケットネットワークプログラミングの優れたラッパーであり、通信コンポーネントフレームワークである Netty を考えてみましょう。Netty についてよく知らない方は、この記事をブックマークして 5 分ほどかけて学習してください。簡単に言うと、Netty は通信コンポーネントとして使用される JAR ファイルです。) 3) 特定のアプリケーション シナリオ: よく知られている Hadoop、Kafka、Dubbo はすべて ZooKeeper 上に構築されています。 4) 利点: 分散環境におけるデータの最終的な一貫性を保証します。これは ZooKeeper が解決できる問題です。 5) 上で一貫性について何度も言及しましたが、一貫性とは実際何なのかをここで説明しましょう。 いわゆる一貫性は、本質的に「見る」ことにかかっています。誰がそれを見ることができるのか?見ることができるのか?いつ見ることができるのか?例えば、Taobaoの出品者がバックエンドで大規模なプロモーション用の商品を出品し、サーバーA経由でメインデータベースに送信したとします。送信直後にユーザーがアプリケーションサーバーB経由でデータベースにその商品を照会すると、出品者は出品情報を更新したにもかかわらず、購入者は商品を見ることができないという状況が発生します。メインデータベースのデータがセカンダリデータベースに同期されるまでの一定期間が経過すると、購入者はようやく商品を見ることができるようになります。(本物の技術記事) 売り手が正常に更新した直後に買い手が売り手の更新を確認できる場合、それは強力な一貫性と呼ばれます。 販売者が正常に更新した後、購入者が更新されたコンテンツを表示できない場合、それは弱い一貫性と呼ばれます。 販売者がアプリを正常に更新し、一定期間後に購入者がその更新を確認できる場合、これを結果整合性と呼びます。 6) 一貫性の問題を解決するための一般的な方法は他にもあります。
7) ZooKeeperは具体的に何ができるのでしょうか?前述の通り、Hadoop、Kafka、DubboはすべてZooKeeper上に構築されています。ここではDubboを例に、ZooKeeperについて具体的に説明します。(本物の技術記事) 業界でよく知られている分散型 SOA フレームワークである Dubbo の主なサービス登録および検出機能は、ZooKeeper によって提供されます。 サービスフレームワークにとって、レジストリセンターはまさに中核です。一時的な停止ではサービス全体が停止することはありませんが、完全な障害は重大なリスクをもたらします。レジストリセンターが単一のマシンである典型的なシナリオでは、実装は簡単です。すべてのマシンがレジストリセンターにサービスを登録し、すべての呼び出し元が永続的な接続を維持します。サービスへの変更は、これらの永続的な接続を介して呼び出し元に通知されます。しかし、サービスクラスターが拡大するにつれて、これははるかに複雑になります。単一のマシンでは維持できる接続数が限られており、障害が発生しやすくなります。 Dubboは、安定したサービス指向フレームワークとして、レジストリセンターとしてZooKeeperを選択し、推奨しています。その基盤となる実装は、一般的に使用されるZooKeeperクライアントであるzkclientとcuratorをZooKeeperClientにカプセル化しています。
ZooKeeper の基本データ モデル (優れた技術記事): つまり、Linux ファイル システムに似たノード モデルです。 そのノードには次のような興味深く重要な特性があります。
ZooKeeper が提供する基本的なサービスを使用することで、ZooKeeper の機能について正確かつ直感的に理解できるようになります。 ZooKeeper は基本的なサービスを提供します:
本質的には、ノードの追加、削除、クエリ、変更、そしてアクセス制御とイベントリスニングに関するものです。しかし、これらのプリミティブを組み合わせて様々なシナリオで使用することで、多様な用途を実現できます。
すべてのプリミティブが ZooKeeper の基盤であり、その他の使用方法の概要は、さまざまなシナリオにおけるプリミティブの単なる分類であることがわかります。 |