私はApache ZooKeeper (「ZK」) が解決する問題の種類を正確に理解しようとしています。おそらく、ZK のレシピ ページから始めるのが最適です。
まず、次の仮定を立てています。
- ZooKeeper API (Java と C の両方で利用可能) は、これらの 7 つの単純なメソッドを公開し、「ZK レシピ」として知られる独自の使用パターンを構築できるようにします。
- これらの ZK レシピを使用して、分散プログラミングの問題を自分で解決するのはあなた次第です。
- または、独自の ZK レシピを作成する代わりに、 Apache Curatorに同梱されているレシピを使用することもできます。
- いずれにせよ、分散コンピューティングの問題を解決するために ZK Recipes (ここでも自家製または Curator によって提供されます) を使用しています。
私は、 Apache Kafkaがこの例であると考えています。Kafka は ZK を使用して分散キュー(リストされている ZK レシピの 1 つ) を作成します。したがって、私の仮定が正しければ、ZK はこれらの API メソッドを公開し、Apache Kafka の作成者は ZK を直接使用するか、Curator を使用して「キュー」ZK レシピを実装しました。
上記の仮定のいずれかが間違っている場合は、まず修正してください。私が多かれ少なかれ順調に進んでいると仮定します:
ZK レシピのリストを見ると、次のように表示されます (すべてを網羅しているわけではありません)。
- 障壁
- ロック
- リーダー選挙
これらのレシピとそれらが提示する解決策を理解するためには、まずそれらが解決する問題を理解する必要があります! 基本的なJavaの同時実行性からロックが何であるかは理解していますが、「分散ロック」が必要になる場合のユースケースを見ていません。選挙をリードするために、最初にそれを必要とするユースケースとして私が考えることができるのは、組み込みのマスター/スレーブまたはプライマリ/セカンダリ機能を搭載して出荷したいアプリケーションを構築している場合だけです。おそらくその場合、ZK を使用して独自の「リーダー選出」レシピを実装するか、キュレーターのリーダー ラッチをすぐに使用することができます。バリアに関しては、ロックとどう違うのかわかりません。だから私は尋ねます:
- 私のマスター/スレーブまたはプライマリ/セカンダリの問題は、ZK のリーダー選出レシピの正確な使用例ですか?
- 分散ロックの例は何ですか? どのような問題を解決しますか?
- バリアについても同様です。ロックとバリアの違いは何ですか?