couchbase-client と spymemcached ライブラリの新機能の一つとして、vBucketサポートがあります。vBucketのアルゴリズムはサーバの再配置中でも、オフラインになったりしても、クライアントが必要なデータを持っているCouchbaseサーバへ自動的に接続することを可能とします。これはクライアントに対して透過的な、Couchbase内のバケット上の間接的なレイヤーです。Dustin Sallings が書いた記事によると、vBucketの開発のきっかけとなった基本的な要件は次のようになっています:
間違ったサーバ上でリクエストを処理しない
スケールアップおよびダウンを自由自在とする
サーバは自身が処理すべきでないコマンドを拒否する、ただし、
サーバは互いのことを知らない
データセットをあるサーバから他のサーバへ渡すことが出来る、ただし、
一時的な制約は置かない
一貫性を保障する
通常のケースではネットワークのオーバヘッドを完全に除去する
もしvBucketについてより深く理解したいなら Dustin の記事を読むことをお勧めします。それではこのチュートリアルアプリケーションがvBucketに接続するための変更を加えてみましょう。
この機能を利用するために必要なことは新しい
Couchbase
のコンストラクタを利用するだけです。ベースとなるURIとバケット名、パスワードを指定し、以前利用した
connect()
メソッドを実行します。
try { URI server = new URI(addresses); ArrayList<URI> serverList = new ArrayList<URI>(); serverList.add(server); CouchbaseClient client = new CouchbaseClient( serverList, "rags", "password"); } catch (Throwable ex) { ex.printStackTrace(); }
アプリケーションをコンパイルして実行します:
$ javac -cp couchbase-client-1.0.0.jar:spymemcached-2.8.0.jar Tutorial.java $ java -cp .:couchbase-client-1.0.0.jar:\ spymemcached-2.8.0.jar:jettison-1.1.jar:netty-3.2.0.Final.jar:\ commons-codec-1.5.jar Tutorial 192.168.3.104
サーバホストをご利用のサーバのホスト名かIPアドレスに変更してください、今回はポートを指定する必要はありません。次のような出力となります:
Jan 17, 2012 12:11:43 PM net.spy.memcached.MemcachedConnection createConnections INFO: Added {QA sa=/192.168.3.111:11210, #Rops=0, #Wops=0, #iq=0, topRop=null, topWop=null, toWrite=0, interested=0} to connect queue Jan 17, 2012 12:11:43 PM net.spy.memcached.MemcachedConnection handleIO INFO: Connection state changed for sun.nio.ch.SelectionKeyImpl@2abe0e27 Jan 17, 2012 12:11:43 PM net.spy.memcached.auth.AuthThread$1 receivedStatus INFO: Authenticated to /192.168.3.111:11210
サーバに接続し、自動的に全てのCouchbaseサーバのリストをロードし、それらに接続し認証を行っていることが分かります。これはvBucketのアルゴリズムを自動的に利用するので、アプリケーション側のコードを修正する必要がありません。