目标
我有一个在嵌入式+复制模式下使用Infinispan的集群。群集大小只有2个系统。为了通过使用复制队列来使用异步复制来检查性能提升,我尝试了一下其详细信息如下
以下是我正在使用的基本测试设置
群集:具有以下Infinispan配置的简单2节点群集 代码:我使用" async_repl_cache"的配置创建了一个异步缓存。 (请参阅下面粘贴的infinispan.xml)作为template-config,我不会覆盖任何配置,如下所示
templateCfg = ecManager.getCacheConfiguration("async_repl_cache");
ecManager.defineConfiguration(cacheName, templateCfg);
版本:我在嵌入模式下使用5.3.0的Infinispan
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而其他节点只接收来自远程系统的puts。这主要是为了在同步和异步模式下获得明确的延迟测量差异。我注意到的是50K投注的持续时间保持不变
写了一个简单的Btrace脚本来跟踪是否正在调用add
org.infinispan.remoting.ReplicationQueueImpl
方法,以便我可以确定该队列正用于复制远程调用。 我注意到这个方法永远不会被调用
使用VisualVM的采样器查看是否可以跟踪对put
方法的调用以找到org.infinispan.remoting.ReplicationQueueImpl
的路径。 我观察到RPC的整个调用堆栈是在调用者的线程而不是scheduled-replication
线程中进行的
问题
我推断尽管使用异步配置,复制仍在同步进行。那么,如果我在配置中遗漏了某些内容,有人可以告诉我吗?
PS :不确定这是否相关 - 但是......我可以看到状态转移在节点上正常发生,该节点在第一个节点启动后稍后加入并接收所有没有任何不一致的数据
答案 0 :(得分:1)
(这更适合作为评论,但我没有足够的声誉。)
根据您的描述,我感觉您的测试看起来像这样:
这将导致从第1个节点到第2个节点的状态转移。如果第二个节点已在运行,则仅在步骤2中使用复制队列 所以我的建议是首先启动两个节点,然后执行puts。