vBucketのメカニズムはハッシュ関数と任意のドキュメントIDを担当するサーバ間の間接的な層となります。この間接層は計画的な移行(例えばクラスタへのサーバの追加)や予期せぬ事態(サーバの故障)で発生するクラスタ設定の変更に対し、秩序ある移行を管理する上で有用です。
下の図は、vBucketを利用した際に、ドキュメントID
-
サーバのマッピングがどのように動作するかを示します。クラスタ内には3つのサーバがあります。クライアントはドキュメントIDに対応する値を取得(get)しようとしています。クライアントはまずドキュメントIDを所有しているvBucketを特定するためにIDをハッシュ化します。これを
Hash(ID) = vB8
と仮定します。次に、クライアントはvBucket -
サーバのマッピングテーブルを参照し、vB8をホストするサーバCを特定します。get
操作は、サーバCに送信されます
一定期間後に(例えば、成長中のアプリケーションで性能を維持するために)、クラスタにサーバーを追加する必要があるとします。管理者がサーバDをクラスタに追加すると、vBucketマップが次のように更新されます [注: vBucket - サーバ のマッピングはCouchbaseの内部的なアルゴリズムによって更新され、更新されたテーブルは Couchbaseがクラスタに参加している全てのノード(サーバやプロキシ)に送信します]
サーバを追加した後、クライアントはもう一度ドキュメントIDに対応する値を取得します。この場合、ハッシュアルゴリズムは以前から変わっていないので、前回と同様に、Hash(ID) = vB8 となります。クライアントは、vBucket - サーバのマッピングテーブルを調べて、今はサーバDがvB8を所有していると特定します。get操作は、サーバDに送信されます。