第10章 クラスター化カウンター
クラスター化されたカウンター は、Data Grid クラスターのすべてのノードで分散され、共有されるカウンターです。カウンターは異なる整合性レベル (strong および weak) を持つことができます。
strong/weak と一貫性のあるカウンターには個別のインターフェイスがありますが、どちらもその値の更新をサポートし、現在の値を返し、その値が更新されたときにイベントを提供します。このドキュメントでは、ユースケースに最適なものを選択する上で役立つ詳細を以下に示します。
10.1. インストールおよび設定 リンクのコピーリンクがクリップボードにコピーされました!
カウンターの使用を開始するには、Maven の pom.xml
ファイルに依存関係を追加する必要があります。
pom.xml
<dependency> <groupId>org.infinispan</groupId> <artifactId>infinispan-clustered-counter</artifactId> </dependency>
<dependency>
<groupId>org.infinispan</groupId>
<artifactId>infinispan-clustered-counter</artifactId>
</dependency>
このカウンターは、本書で後述する CounterManager
インターフェイスを介して、Data Grid 設定ファイルまたはオンデマンドを設定できます。EmbeddedCacheManager
の起動時に、起動時に Data Grid 設定ファイルに設定されたカウンターが作成します。これらのカウンターは Eagerly で開始され、すべてのクラスターのノードで利用できます。
configuration.xml
または、プログラムを使用して GlobalConfigurationBuilder
で以下を行います。
一方、このカウンターは、EmbeddedCacheManager
を初期化した後にいつでも設定することができます。
CounterConfiguration
は変更できず、再利用できます。
カウンターが正常に設定されていると、defineCounter()
メソッドは true
を返します。そうでない場合は、true
を返します。ただし、設定が無効な場合は、メソッドによって CounterConfigurationException
が発生します。カウンターがすでに定義されているかを調べるには、isDefined()
メソッドを使用します。
CounterManager manager = ... if (!manager.isDefined("someCounter")) { manager.define("someCounter", ...); }
CounterManager manager = ...
if (!manager.isDefined("someCounter")) {
manager.define("someCounter", ...);
}
クラスターごとの属性:
-
num-owners
: クラスター全体で保持するカウンターのコピー数を設定します。数値が小さいほど更新操作は高速になりますが、サポートされるサーバークラッシュの数は少なくなります。正の値である必要があり、デフォルト値は2
です。 reliability
: ネットワークパーティションでカウンターの更新動作を設定します。デフォルト値はAVAILABLE
で、有効な値は次のとおりです。-
AVAILABLE
: すべてのパーティションはカウンター値の読み取りと更新が可能です。 -
CONSISTENT
: プライマリーパーティション (ノードの大多数) のみがカウンター値の読み取りと更新が可能です。残りのパーティションは、その値の読み取りのみ可能です。
-
カウンターごとの属性:
-
initial-value
[common]: カウンターの初期値を設定します。デフォルトは0
(ゼロ) です。 storage
[common]: クラスターのシャットダウンおよび再起動時のカウンターの動作を設定します。デフォルト値はVOLATILE
で、有効な値は次のとおりです。-
VOLATILE
: カウンターの値はメモリーでのみ利用できます。この値は、クラスターがシャットダウンすると失われます。 -
PERSISTENT
: カウンターの値はプライベートおよびローカル永続ストアに保存されます。この値は、クラスターがシャットダウンされたときに保持され、再起動後に復元されます。
-
オンデマンドおよび VOLATILE
カウンターは、クラスターのシャットダウン後にその値と設定を失います。再起動後に再度定義する必要があります。
-
lower-bound
[strong]: 強力な一貫性のあるカウンターの下限を設定します。デフォルト値はLong.MIN_VALUE
です。 -
upper-bound
[strong]: 強力な一貫性のあるカウンターの上限を設定します。デフォルト値はLong.MAX_VALUE
です。
lower-bound
も upper-bound
も設定されていない場合は、強力なカウンターは無制限として設定されます。
initial-value
は、lower-bound
以上 upper-bound
以下である必要があります。
-
concurrency-level
[weak]: 同時更新の数を設定します。正の値である必要があり、デフォルト値は16
です。
10.1.1. カウンター名の一覧表示 リンクのコピーリンクがクリップボードにコピーされました!
定義されたすべてのカウンターを一覧表示するには、CounterManager.getCounterNames()
メソッドは、クラスター全体で作成されたすべてのカウンター名のコレクションを返します。