1章はじめに

その昔は、アプリケーションと言えば、1つの計算機の1つのCPUで動く1つのプログラムだった。しかし、今ではすっかり事情が変わってしまった。ビッグデータとクラウドの世界では、アプリケーションは常に変化を続ける計算機群で稼働する多くの独立したプログラムで構成される。

これらの独立したプログラムの動作を協調させることは、1つの計算機で動く1つのプログラムを書くのよりもはるかに難しい。開発者が協調動作のロジックをうまく構成できなかったため、アプリケーションロジックを書く時間が足りなくなった、というのはよくある話だ。逆に、協調動作のロジックに時間を割かなかった結果、脆弱で単一故障点になるようなやっつけのマスタコーディネータができあがってしまった、などという話もよく聞く。

ZooKeeperは、アプリケーション開発者が、協調動作にではなくアプリケーションのロジックに専念できるようにするための頑健なサービスとして設計されている。ZooKeeperはファイルシステムのAPIにヒントを得た簡潔なAPIを提供する。このAPIを用いて、マスタサーバの選出や、グループメンバの管理や、メタデータの管理などの、一般的な協調動作を実装することができる。ZooKeeperは2つの主要なAPIを実装(JavaとC)を含むアプリケーションライブラリと、複数の専用のサーバから構成されるアンサンブル上で動作するJavaで書かれたサービスコンポーネントから構成される。サーバアンサンブルで動作することで、ZooKeeperは耐故障性とスケーラビリティを実現している。

ZooKeeperを用いてアプリケーションを設計する際には、アプリケーションデータと制御データ(もしくは協調データ)と分離するのが理想的だ。Webメールサービスであれば、ユーザが興味を持つのはメールボックスの中身であって、どのサーバが特定のメールボックスへのリクエストを処理しているか、ではない。メールボックスの中身がアプリケーションデータであり、メールボックスとメールサーバのマッピングが協調データ(もしくはメタデータ)である。ZooKeeperのアンサンブルが管理するのは後者だ。 ...

Get ZooKeeperによる分散システム管理 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.