第7章 クラスター化カウンター
クラスター化されたカウンター は、Data Grid クラスターのすべてのノードで分散され、共有されるカウンターです。カウンターは異なる整合性レベル (strong および weak) を持つことができます。
strong/weak と一貫性のあるカウンターには個別のインターフェイスがありますが、どちらもその値の更新をサポートし、現在の値を返し、その値が更新されたときにイベントを提供します。このドキュメントでは、ユースケースに最適なものを選択する上で役立つ詳細を以下に示します。
7.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]:[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です。
7.1.1. カウンター名のリスト表示 リンクのコピーリンクがクリップボードにコピーされました!
定義されたすべてのカウンターをリスト表示するには、CounterManager.getCounterNames() メソッドは、クラスター全体で作成されたすべてのカウンター名のコレクションを返します。