wiki:ZookeeperDetail

Version 1 (modified by kosuke, 10 years ago) (diff)

--

ZooKeeperの詳細

作者:kosuke

参考: http://wiki.apache.org/hadoop/ZooKeeper/ProjectDescription

ZooKeeperのシステムは、普通のファイルシステムに似ている。パスは/で区切られ、ルートディレクトリ以外は親ディレクトリが存在する。異なるところは、zノードと呼ばれるコンピュータで構成されている点である。また、ZooKeeperは、複数のアプリのメタ情報を保存しておく場所なので、1ファイルあたり、1kByte以下になるのが普通である。もし、1MBを越えるようなことがあれば、そのファイルを取り除くようになっている。よって、 ZooKeeperは小さなファイルをたくさん溜めるために使われる。

基本的には全てのデータはメモリ上に保存される。保存されるときに、いっしょに永続的なストレージ(HDDなど)に処理のログとスナップショットが保存される。メモリ上にデータがあるので、スループットが高く、待ち時間も短い。しかし、欠点もある.全てがメモリ上に保存されているために、保存できる容量に限界がある.また同じ理由で、永続的な保存ができない.

また、全てのサーバーでどのサーバーにどの情報があるのかを知っている。よって、大体のサーバーが動いていれば、ZooKeeperは使える。クライアントもサーバーのリスト情報を知っている。

クライアントは、ZooKeeperに接続するとき一台のサーバーとしか通信しない。通信プロトコルは、TCPである。もし通信が途絶えると、他の1台のサーバーと通信する。また、クライアントが始めてZooKeeperサーバーと通信するとき、クライアントのセットアップを自動でサーバー側で行う.もし他のサーバーと通信する必要があるときは、そのサーバーで再度セットアップが行われる。

クライアントから、読み込みのリクエストを受けたサーバーはローカルに処理する。そして、実際に読み込むときは接続したサーバーを通して読み込みたいサーバーと通信する。

書き込みリクエストは、他のサーバーにリクエスト内容を伝えて、他のサーバーに転送される。

同期リクエストも、他のサーバーに転送される。

よって、読み込みリクエストのスループットは、サーバーの数が多ければ大きくなるが、書き込みリクエストのスループットは、サーバーの数が多ければ小さくなる。

オーダー(読み込みリクエスト、書き込みリクエスト、同期リクエスト)は、非常に重要である.全てのアップデートは、オーダーである。ZooKeeper はそれぞれのアップデートに対して、記録します。記録するときに、zxidと呼ばれるユニークのidを付けて記録します。読み込みときは、アップデートするのが望ましい。また、読み込みレスポンスは、リードされるサーバーによって最後のzxidと一緒に記録される.つまり、すべてのレスポンスはxidともにZookeeperのサーバーに記録されている。

Attachments