TANGOSOL Coherence

仕事ネタも日記にしてしまいましょう.(^^;
Coherenceというのは,米TANGOSOL社の製品です.オープンソースではなく,いい値段のする商品(1995$/CPU〜)なのですが,評価版をダウンロードすることが出来ます.
このCoherenceを使うと何が出来るかというと,JVM間でメモリのレプリケーションを行ってくれるんですね.Coherenceというのは一貫性とかそういう意味を持つ単語です.この業界(どこ?)でよく耳にするところでは,SGIIBMのサーバに使われているCC-NUMA(Chache Coherent-Non Uniform Memory Access)というのがありますね.これは,分割された(不均一な)メモリ間でキャッシュの一貫性を保つというアーキテクチャです.CoherenceはこれのJava版といった感じです.もっと身近なところだと,OracleRACに使われているキャッシュ・フュージョンも似ているかな.
ということで,Coherenceもキャッシュの実装クラスを用意してくれています.このキャッシュは,他のJVMとネットワークを越えて内容の一貫性を維持してくれます.つまり,分散キャッシュなんですね.その実装方法(フルレプリケーションとかマスタースレーブとか)やポリシー(悲観的ロックとか楽観的ロックとか)は何種類か用意されていて,必要に応じて選択することが出来るようです.おもしろいことに,この分散キャッシュに対するJCAが提供されていて,分散トランザクションに参加することも出来るのだとか.分散システム全体でトランザクショナルに共有できるキャッシュなんてものが実現できる? 素晴らしいかも!
詳しく調べるのはこれからなのですが,Coherenceに単純なサンプルがついているので眺めてみました.このサンプルはコマンドライン・インタフェースを持っていて,分散キャッシュの内容を表示したり変更したりすることが出来ます.そのコードを見ると,使い方はとても簡単なんですね.
まずは初期化のところで分散キャッシュのインスタンスを取得します.

        NamedCache cache = CacheFactory.getCache("VirtualCache");

NamedCacheクラスは,java.util.Mapimplementsしています.ですから,後はget(Object)put(Object, Object)なんかを使えばいいだけなんですね.超簡単!*1
このサンプル,後はコマンドラインから命令を読み込んでキャッシュ(Map)を操作するだけです.ということで,動かしてしまいしょう.
サンプルを実行すると,コピーライトなどの表示の後に

Command: 

と聞いてくるので,まずはコマンドの一覧を確認.

Command: help

clear
get <key>
keys
info
put <key> <value>
quit
remove <key>

Command: 

楽勝っぽい.
では,キャッシュの内容が空なのを確認した上でエントリを追加してみましょう.

Command: keys


Command: put name koichik

>> Put Complete

Command: keys

>> name

Command: get name

>> Value is koichik

Command: 

キャッシュに値が入りました.
ここで,もう一つのプロセスを起動して,キャッシュの内容を確認します.

Command: keys

>> name

Command: get name

>> Value is koichik

Command: 

おぉ,ちゃんと共有できていますね.こちらからもエントリを追加してみます.

Command: put birthday 08/18

>> Put Complete

Command: 

そして元のプロセスで確認.

Command: keys

>> name
>> birthday

Command: get birthday

>> Value is 08/18

Command: 

いい感じ.
なお,この分散キャッシュはレプリケーションで共有されているので,サーバプロセスは不要です(サーバを使う構成も出来るようです).プロセスが一つでも生きていれば,内容は保持されます.ということで,最初のプロセスを終了してから2番目のプロセスでキャッシュを確認.

Command: keys

>> name
>> birthday

Command: get name

>> Value is koichik

Command: get birthday

>> Value is 08/18

Command: 

アイディア次第でいろいろな使い方が出来そうです.幸か不幸か来期の予算に含められているらしいので,なんとか使いこなしたいと思います.
でも連載は無理です... たぶん.

*1:名前空間がどうなってるとか,名前解決はどうなっている? ルータ超えられる? なんて疑問は当然ありますが,ともかく簡単に使えるのはいいことです.