第12章 クラスター化カウンター
クラスター 化 されたカウンターは、Red Hat Data Grid クラスターのすべてのノード間で分散され、共有されるカウンターです。カウンターは異なる整合性レベル(strong および weak)を持つことができます。
strong/weakと一貫性のあるカウンターには個別のインターフェイスがありますが、どちらもその値の更新をサポートし、現在の値を返し、その値が更新されたときにイベントを提供します。このドキュメントでは、ユースケースに最適なものを選択する上で役立つ詳細を以下に示します。
12.1. インストールおよび設定 リンクのコピーリンクがクリップボードにコピーされました!
カウンターの使用を開始するには、Maven の pom.xml ファイルに依存関係を追加する必要があります。
pom.xml
<dependency>
<groupId>org.infinispan</groupId>
<artifactId>infinispan-clustered-counter</artifactId>
<version>${version.infinispan}</version>
</dependency>
<dependency>
<groupId>org.infinispan</groupId>
<artifactId>infinispan-clustered-counter</artifactId>
<version>${version.infinispan}</version>
</dependency>
${version.infinispan} を Red Hat Data Grid の適切なバージョンに置き換えます。
カウンターは、本書で後述する CounterManager インターフェースを介して Red Hat Data Grid 設定ファイルまたはオンデマンドを設定できます。EmbeddedCacheManager の起動時に、Red Hat 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です。
12.1.1. カウンター名の一覧表示 リンクのコピーリンクがクリップボードにコピーされました!
定義されたすべてのカウンターを一覧表示するには、CounterManager.getCounterNames() メソッドは、クラスター全体で作成されたすべてのカウンター名のコレクションを返します。