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