2章ZooKeeperを制御する
前章では分散アプリケーションが何を必要としているかを抽象度の高いレベルで議論し、アプリケーションが協調動作するために必要な機能は多くの場合共通していることを示した。さらに、実アプリケーションの多くが含まれるアプリケーションクラスであるマスタ・ワーカを例として選び、共通して使われる基本機能要素を抽出した。本章では、いよいよこれらの協調動作のための基本機能要素の実装を可能にするサービスであるZooKeeperを紹介する。
2.1 ZooKeeperの基本
協調動作に必要な基本機能要素は多くのアプリケーションに共通する。協調動作のためのサービスを設計する際の1つの考え方として、基本機能要素のリストを作りそれぞれを実現した機能を提供し、それらを直接操作させる方法がある。例えば、分散ロックを重要な基本機能要素として考え、ロックの生成、取得、解放を機能として提供する、という方法だ。
しかし、このような設計にはいくつか大きな問題がある。まず、このような方法を取るには、最初に完全な基本機能要素のリストを作るか、新しい基本機能要素をAPIに追加し続けるしかない。また、このような方法では、アプリケーションに最適な形で基本機能要素を実装する自由度がない。
ZooKeeper開発チームは、まったく別の考え方でZooKeeperを実装することにした。ZooKeeperは基本機能要素を直接提供せず、アプリケーションが基本機能要素を独自に実装できるようにするための、少数の呼び出し関数からなるファイルシステム的なAPIを提供する。基本機能要素を実装したものをレシピと呼ぶ。レシピは、ZooKeeper上のznodeと呼ばれる小さいデータノードの操作で構成される。znodeはファイルシステムのような階層的なツリー構造を構成する。 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access