Download - Infinispan - Open Source Data Grid
Infinispan
Open Source Data Grid
Red HatSenior Software Maintenance Engineer
Takayoshi Kimura
Data Grid って?
• 複数のマシンに分散されている大量のデータに高速にアクセスできるミドルウェア
• 何ができるの?– 同上
Infinispan とは
• JBoss で使われていたクラスタリングライブラリ JBoss Cache を起源とするデータグリッドソフトウェア
• JSR-107 JCache サポート• JSR-347 Data Grids for Java
– スペックリードは Infinispan の Manik Surtani
– Java EE 7 で JSR-347 が収録される可能性が高い
ユースケース
• キャッシュとして利用する• 分散キャッシュとして利用する• クラスタリングライブラリとして利用
する• インメモリデータグリッドとして利用
する
キャッシュ
• ConcurrentHashMap の代わりに– より高い並列性– 古いエントリを消す– 古いエントリをディスクや DB へ– イベントリスナサポート– トランザクション連携
キャッシュ
• データベースのキャッシュ– Hibernate の 2nd level キャッシュ
• ビューのキャッシュ– Seam のビューフラグメントキャッシュ
• とにかく読み込むコストの高いデータに適用– Read-most が原則– そうではない場合逆に遅くなる可能性
分散キャッシュ
• クラスタ対応キャッシュ– 使い方はローカルキャッシュと一緒– ローカルキャッシュでは複数 VM からは利
用できない– 例えば DB のキャッシュとして利用してい
て、別ノードが DB とキャッシュを更新したらどうする?
クラスタリングライブラリ
• 「クラスタ対応」したいときに– 複数ノード間でのデータの共有– イベントリスナを利用して各ノードで処理
をトリガ• JBoss AS でも利用
インメモリデータグリッド
• データの分散配置– コンシステントハッシュと仮想ノード– 遠隔地クラスタリレー、ディザスターリカ
バリ• データの分散処理
– Distributed Executor– MapReduce
データ分散配置デモ
• https://github.com/nekop/infinispan-scala-swing-demo
Eviction
• アクセスされないデータを追い出す– Passivation モードだとディスクなどに書
き出す– そうではない場合は消す
• キャッシュアルゴリズム– どのように「アクセスされない」を決定
するか– LRU, MRU, LFU, LIRS
LRU
• Least Recently Used
• 最もアクセスが無い期間が長いデータを追い出す– 最新のものをキープする– 単純なユースケースに最適
LRU
• 最新 != ホット– 1000 のデータ、 200 のキャッシュ– 例えばバッチ処理で全データ一回舐めるだ
けでキャッシュがめちゃくちゃに• 一回だけたまたまアクセスされたエン
トリが長く生き残る• アクセスが偏るとホットなエントリが
消される
LIRS
• Low Inter-reference Recency set
• 二つの領域– LIR エリア – ホットなキー– HIR エリア – 最近のキー
• シンプルなアクセス履歴を保持– ホットなキーを長期保持
Distributed Execution Framework
• Distributed Executor– DistributedCallable
• MapReduce– Mapper
– Reducer– Collator
References
• Infinispan ユーザガイド– https://docs.jboss.org/author/display/ISPN/User+Guide
• JBoss World 2011– http://www.redhat.com/summit/2011/presentations/jbossworld/
• JUDCon 2011– http://www.jboss.org/events/JUDCon/presentations.html