Asynchronous Infinispan异步复制队列-配置时不使用

Asynchronous Infinispan异步复制队列-配置时不使用,asynchronous,cluster-computing,infinispan,Asynchronous,Cluster Computing,Infinispan,目标 我有一个在嵌入式+复制模式下使用Infinispan的集群。集群大小仅为2个系统。为了检验通过使用复制队列进行异步复制所获得的性能收益,我进行了一些试验,其详细信息如下所示 下面是我正在使用的基本测试设置 集群:具有以下Infinispan配置的简单2节点集群 代码:我使用“async_repl_cache”(请参阅下面粘贴的infinispan.xml)的配置作为模板配置创建了一个异步缓存,并且我没有覆盖下面的任何配置 templateCfg = ecManager.getCach

目标

我有一个在嵌入式+复制模式下使用Infinispan的集群。集群大小仅为2个系统。为了检验通过使用复制队列进行异步复制所获得的性能收益,我进行了一些试验,其详细信息如下所示

下面是我正在使用的基本测试设置

集群:具有以下Infinispan配置的简单2节点集群 代码:我使用“async_repl_cache”(请参阅下面粘贴的infinispan.xml)的配置作为模板配置创建了一个异步缓存,并且我没有覆盖下面的任何配置

   templateCfg = ecManager.getCacheConfiguration("async_repl_cache");
   ecManager.defineConfiguration(cacheName, templateCfg);
版本:我在嵌入式模式下使用Infinispan的5.3.0

Infinispan配置XML

<infinispan
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="urn:infinispan:config:6.0 http://www.infinispan.org/schemas/infinispan-config-5.3.xsd"
    xmlns="urn:infinispan:config:5.3">
  <global>
    <transport nodeName="${nodeName}">
      <properties>
        <property name="configurationFile" value="jgroups_tcp.xml"/>
      </properties>
    </transport>

  </global>

  <default>
    <clustering mode="replication">
        <sync/>
    </clustering>
  </default>

  <namedCache name="repl">
    <!-- Use the configuration of the default cache as it is -->
  </namedCache>

  <namedCache name="async_repl_cache">
    <jmxStatistics enabled="true"/>
    <clustering mode="replication">
        <async useReplQueue="true" replQueueInterval="2000" />
    </clustering>
  </namedCache>


</infinispan>

观察结果

  • 我使用具有50K条目的简单缓存执行了一个小测试。一个节点只执行put,另一个节点只接收来自远程系统的put。这主要是为了获得同步和异步模式下的明确延迟测量差异。我注意到的是,50K看跌期权的持续时间保持不变

  • 编写了一个简单的Btrace脚本来跟踪是否调用了org.infinispan.remoting.ReplicationQueueImpl的
    add
    方法,以便我可以确保队列用于复制远程调用我注意到从未调用此方法

  • 使用VisualVM的采样器查看对
    put
    方法的调用是否可以跟踪到
    org.infinispan.remoting.ReplicationQueueImpl
    我观察到RPC的整个调用堆栈是在调用方的线程中进行的,而不是
    计划的复制
    线程

问题

我推断,尽管使用了异步配置,复制仍在同步进行。那么,如果我在配置中遗漏了什么,请有人告诉我好吗

PS:不确定这是否相关-但是。。。我可以看到,状态转移在第一个节点启动后稍晚加入并接收所有数据的节点上正确发生,没有任何不一致之处(作为注释,这更合适,但我没有足够的信誉)。
根据您的描述,我感觉您的测试如下:

  • 开始第一个节点
  • 将数据放入第一个节点
  • 开始第二个节点
  • 这将导致状态从第一个节点转移到第二个节点。只有在第二个节点已在运行的情况下,才会在步骤2中使用复制队列。
    所以我的建议是首先启动两个节点,然后执行puts