第 7 章 集群的计数


集群计数器 是数据网格集群中的所有节点之间分布和共享的计数器。计数器可以有不同的一致性级别:强度和弱点。

虽然强/弱一致的计数器都有单独的接口,但支持更新其值,并在更新其值时返回事件。本文档中提供了详细信息,以帮助您选择最适合您的用例。

7.1. 安装和配置

要开始使用计数器,您需要在 Maven pom.xml 文件中添加依赖项:

pom.xml

<dependency>
  <groupId>org.infinispan</groupId>
  <artifactId>infinispan-clustered-counter</artifactId>
</dependency>

计数器可以通过本文档后面详述的 CounterManager 接口配置数据源配置文件或按需配置。当 EmbeddedCacheManager 启动时,会在启动时在 Data Grid 配置文件中配置计数器。这些计数器会立即启动,它们在所有集群的节点中都可用。

configuration.xml

<?xml version="1.0" encoding="UTF-8"?>
<infinispan>
    <cache-container ...>
        <!-- if needed to persist counter, global state needs to be configured -->
        <global-state>
            ...
        </global-state>
        <!-- your caches configuration goes here -->
         <counters xmlns="urn:infinispan:config:counters:11.0" num-owners="3" reliability="CONSISTENT">
             <strong-counter name="c1" initial-value="1" storage="PERSISTENT"/>
             <strong-counter name="c2" initial-value="2" storage="VOLATILE">
                 <lower-bound value="0"/>
             </strong-counter>
             <strong-counter name="c3" initial-value="3" storage="PERSISTENT">
                 <upper-bound value="5"/>
             </strong-counter>
             <strong-counter name="c4" initial-value="4" storage="VOLATILE">
                 <lower-bound value="0"/>
                 <upper-bound value="10"/>
             </strong-counter>
             <weak-counter name="c5" initial-value="5" storage="PERSISTENT" concurrency-level="1"/>
         </counters>
    </cache-container>
</infinispan>

或以编程方式在 GlobalConfigurationBuilder 中:

GlobalConfigurationBuilder globalConfigurationBuilder = ...;
CounterManagerConfigurationBuilder builder = globalConfigurationBuilder.addModule(CounterManagerConfigurationBuilder.class);
builder.numOwner(3).reliability(Reliability.CONSISTENT);
builder.addStrongCounter().name("c1").initialValue(1).storage(Storage.PERSISTENT);
builder.addStrongCounter().name("c2").initialValue(2).lowerBound(0).storage(Storage.VOLATILE);
builder.addStrongCounter().name("c3").initialValue(3).upperBound(5).storage(Storage.PERSISTENT);
builder.addStrongCounter().name("c4").initialValue(4).lowerBound(0).upperBound(10).storage(Storage.VOLATILE);
builder.addWeakCounter().name("c5").initialValue(5).concurrencyLevel(1).storage(Storage.PERSISTENT);

另一方面,可以在 EmbeddedCacheManager 初始化后随时按需配置计数器。

CounterManager manager = ...;
manager.defineCounter("c1", CounterConfiguration.builder(CounterType.UNBOUNDED_STRONG).initialValue(1).storage(Storage.PERSISTENT).build());
manager.defineCounter("c2", CounterConfiguration.builder(CounterType.BOUNDED_STRONG).initialValue(2).lowerBound(0).storage(Storage.VOLATILE).build());
manager.defineCounter("c3", CounterConfiguration.builder(CounterType.BOUNDED_STRONG).initialValue(3).upperBound(5).storage(Storage.PERSISTENT).build());
manager.defineCounter("c4", CounterConfiguration.builder(CounterType.BOUNDED_STRONG).initialValue(4).lowerBound(0).upperBound(10).storage(Storage.VOLATILE).build());
manager.defineCounter("c2", CounterConfiguration.builder(CounterType.WEAK).initialValue(5).concurrencyLevel(1).storage(Storage.PERSISTENT).build());
注意

CounterConfiguration 是不可变的,可以重复使用。

如果计数器成功配置或 false,则方法 defineCounter () 将返回 true。但是,如果配置无效,方法将抛出 CounterConfigurationException。要查找计数器是否已定义,请使用方法 defined ()

CounterManager manager = ...
if (!manager.isDefined("someCounter")) {
    manager.define("someCounter", ...);
}

针对集群属性:

  • num-owners :设置计数器的副本数,以保持集群范围。较小的数量会加快更新操作,但将支持较少的服务器崩溃。它必须是正数,其默认值为 2
  • 可靠性 :在网络分区中设置计数器的更新行为。默认值为 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
注意

如果没有配置 下限上限,则强大的计数器被设置为 unbounded。

警告

initial-value 必须介于 lower-boundupper-bound inclusive内。

  • concurrency-level [weak] :设置并发更新的数量。其 值必须是正数,默认值为 16

7.1.1. 列出计数器名称

要列出定义的所有计数器,method CounterManager.getCounterNames () 返回集群范围的所有计数器名称的集合。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.