CLOVER🍀

That was when it all began.

InfinispanとCAP定理

Infinispanを触ったり、NoSQLに関する勉強をしていて、ちょっと気になったので。

Infinispanは、CAP定理のどれを満たすことにしたのか?というところ。
*ちなみに、結論はうまくまとめられていません…

CAP定理というのは、NoSQL絡みでよく聞く

  • Consistency(整合性)
  • Availability(可用性)
  • Partition-tolerance(分断耐性)

のいずれか2つしか満たせない、ってやつですね。

Infinispanの基本的なスタンスとしては、CとAを取ってPを諦めましたと。
https://docs.jboss.org/author/display/ISPN/Consistency%2C+Availability+and+Partition-tolerance+%28CAP%29+Theorem

5/15 更新)
こちらに、よい記事が書かれていました。
Data Grids & CAP
http://howtojboss.com/2013/05/15/data-grids-cap/

まとめると

  • ネットワーク分断しないならCA
  • Hard Partition(1つ以上のノードが接続断)の場合は、AP
  • Soft Partition(1つ以上のノードのレスポンスがない)の場合は…

・sync(同期)モードの場合、相手のレスポンスを待ち続けてしまうのでCP
・async(非同期)モードの場合、レスポンスを待たないので一貫性を犠牲にするのでAP


という感じです。これはわかりやすかったです。


これ以降は、過去に書いた内容です。

結果整合性は今のところ、サポートされていません。ベクタ・クロック、リードリペア、QUORUMのどれになるんでしょうか?

ただ、結果整合性のモードにもなれるようです。

その他、関連情報。
http://infinispan.blogspot.jp/2011/07/infinispan-51-has-codename.html
https://issues.jboss.org/browse/ISPN-999

この辺りを見ていると、InfinispanをDistributionモードかつ同期モードで使用していると、C・Aとなり、常に最新の値が見えるそうな。

ただ、例外的に再ハッシュ中(ノードの追加、削除が発生した場合)には新規ノードにはまた状態が反映できていないかもしれないので、この時は結果整合性っぽくなる、と。とはいえ、実際には再ハッシュが終わるまで、呼び出し元は一定時間待たされることになるので、そんな見え方はしないかも?ということらしいです。

Infinispanを結果整合性っぽい動作にするには、

  • Distributionモードの設定を、asyncにする
  • Versioned APIを使用する(Infinispan 5.1からの機能)

といったところで調整するようです。

再ハッシュ中の動きとかを確認しようと思ったのですが、ちょっとうまいこといかなかったので、今日のところは諦めました…。