大規模なWebコンテンツで必要不可欠なのがキャッシュ機構だ。
これが無いと、多数ユーザからのアクセスに耐えられなくなって
システムが使いものにならなくなってしまう。
もちろんマシンを強化するという手もあるが、僕らはもっと
エコロジーなやり方で問題を解決できる。
一言でキャッシュと言っても色々な使い方があるが
今注目しているのが、シンプルで柔軟性のある
オブジェクトキャッシュ機構。
単純に言えば、Javaのオブジェクトをメモリ内にキャッシュしておくという
発想自体は今までのプログラムにもあったものだ。
ただ、今までのキャッシュ機構は柔軟性に乏しかった。
機能ごとにキャッシュマネージャを作り込む必要があったりして
正直スマートな実装とは言えないものが多かった。
最近になって、これらのキャッシュ機構をライブラリ化した
パッケージがいくつか出ている。
ちょっと紹介しよう。
JCS
Apacheグループで開発されている。
まだ開発段階なのに加え、依存性がやや高いのが難点。
JOCache
http://jocache.sourceforge.net/
ShiftOneというグループで開発されている。
ライセンスは今回紹介する中で唯一GPLなので良いのだが
最新リリースが1年半以上前で止まっているので、今後がちょっと心配。
JBossCache
ご存知JBossが開発している。
ツリー構造やマシン間レプリケーションなど機能は多彩だが
その反面ライブラリが巨大過ぎる。
--- Ehcache ---
で、本命がこれ。
http://ehcache.sourceforge.net/
「シンプルで速い」ことをウリにしている。
JOCacheに比べると、キャッシュの設定も豊富で
ディスクへのスワップIn/Outにも対応している。
依存性も低いので使いやすい。
Hibernateで採用されているので今後も成長する可能性は高いだろう。
ただ、ライセンスがApache 1.1なのが気掛り。
一応Forumに2.0にしてもらえないか報告はしておいたけど、
果たしてどうなる事やら。
--- Tomcat & ehcache ---
うむむ…どうもTomcat上でehcacheを使うと
コンテンツの再デプロイが行われる度にメモリが膨れ上がってしまう。
どっかに開放されないメモリが残ってるらしい。
ehcacheを外したらこの現象は起こならかったので
おそらく原因はehcacheだろう。
とはいっても、これはehcache自身に問題があるというわけではない。
ehcacheが元々メモリリークの問題があったJCSを置き換えるために開発された
という経緯から考えても、この製品にメモリリークがあるとは考えにくい。
ShiftOneを使っても同じような現象になったから、
どうやら問題はTomcatの再デプロイにありそうだ。
とりあえず回避方法としては、
ehcache.jarをTomcatのcommon/libの下に置くという手法がある。
こうすればコンテンツを再デプロイしても
ehcacheは再ロードされないので問題は回避できる。
が、どうもスマートじゃない。
暇が出来たらそこら辺調べてみようかな。