Очередь асинхронной репликации Infinispan — не используется при настройке

Цель

У меня есть кластер, использующий 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: не уверен, что это связано с чем-то, но... я мог видеть, что передача состояния происходит правильно на узле, который присоединяется немного позже после запуска первого узла и получает все данные без каких-либо несоответствия


person user1511595    schedule 09.07.2014    source источник


Ответы (1)


(Это было бы более уместно в качестве комментария, но мне не хватает репутации.)
Из вашего описания у меня такое ощущение, что ваш тест выглядит так:

  1. запустить 1-й узел
  2. поместить данные в 1-й узел
  3. запустить 2-й узел

Это приведет к передаче состояния с 1-го на 2-й узел. Очередь репликации будет использоваться только на шаге 2, если второй узел уже запущен.
Поэтому я предлагаю сначала запустить оба узла, а затем выполнить размещение.

person Jakub Markos    schedule 13.07.2014