Цель
У меня есть кластер, использующий Infinispan в режиме встроенного + репликация. Размер кластера всего 2 системы. Чтобы изучить прирост производительности за счет использования асинхронной репликации с использованием очереди репликации, я немного поэкспериментировал, детали которого приведены ниже.
Ниже приведена базовая тестовая установка, которую я использую.
Кластер: простой кластер из 2 узлов со следующей конфигурацией Infinispan. Код: я создал один асинхронный кеш, используя конфигурацию «async_repl_cache» (см. infinispan.xml, вставленный ниже) в качестве шаблона-конфигурации. и я НЕ отменяю любую конфигурацию, как показано ниже
templateCfg = ecManager.getCacheConfiguration("async_repl_cache");
ecManager.defineConfiguration(cacheName, templateCfg);
Версия: я использую 5.3.0 Infinispan во встроенном режиме.
XML-файл конфигурации Infinispan
<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>
Наблюдения
Я провел небольшой тест с простым кешем с 50К записей. Один узел просто делает путы, а другой узел просто получает путы из удаленной системы. Это было сделано главным образом для того, чтобы получить четкую разницу в измерениях задержки в синхронном и асинхронном режимах. Что я заметил, так это то, что продолжительность 50 000 путов осталась прежней.
Написал простой скрипт Btrace для отслеживания, вызывается ли когда-либо
add
методorg.infinispan.remoting.ReplicationQueueImpl
, чтобы я мог быть уверен, что очередь используется для удаленных вызовов репликации. Я заметил, что этот метод никогда не вызываетсяИспользовал сэмплер VisualVM, чтобы увидеть, можно ли отследить вызов метода
put
, чтобы найти его путь кorg.infinispan.remoting.ReplicationQueueImpl
. Я заметил, что весь стек вызовов RPC создается в потоке вызывающей стороны, а не вscheduled-replication
потоке
Вопрос
Я предполагаю, что репликация происходит синхронно, несмотря на использование асинхронной конфигурации. Итак, может кто-нибудь, пожалуйста, дайте мне знать, если я что-то упустил в конфигурации?
PS: не уверен, что это связано с чем-то, но... я мог видеть, что передача состояния происходит правильно на узле, который присоединяется немного позже после запуска первого узла и получает все данные без каких-либо несоответствия