Могут ли несколько клиентов реплицированного кэша Infinispan использовать одно и то же постоянное хранилище файлов? - PullRequest
2 голосов
/ 15 марта 2019

Кросс-публикация в https://developer.jboss.org/thread/279735

Предположим, у нас есть несколько контейнеров докеров (каждый из которых имеет Java-приложения, в сущности, несколько JVM), каждый из которых использует один и тот же реплицированный кэш Infinispan либо в:

  • Встроенный режим с использованием jgroups для обнаружения
  • Режим сервера с использованием Docker Hub в качестве сервера Infinispan и клиентов, подключающихся через hotrod.

В любом случаевсе члены / клиенты кэша имеют хранилище файлов, из которого они предварительно загружаются при запуске (пример для серверного режима, аналогично xml для встроенного режима):

Через docker compose путь в хранилище файлов каждого контейнера(допустим, /var/tmp/server/OUR_CACHE.dat) монтируется с привязкой к одному и тому же файлу на хосте докера.

<paths>
       <path name="cachestore.root" path="/var/tmp"/>
</paths>
...
    <local-cache name="OUR_CACHE">

         <expiration lifespan="-1"/>

         <locking isolation="SERIALIZABLE" acquire-timeout="30000" concurrency-level="1000" striping="false"/>

         <file-store relative-to="cachestore.root" path="server" max-entries="-1" purge="false" passivation="false" preload="true" fetch-state="true"/>

         <memory>

              <binary size="100000000" eviction="MEMORY"/>

         </memory>

    </local-cache>

Мой вопрос заключается в том, что - это механизм персистентности, разработанный для множественной репликацииклиенты кеша могут читать / записывать в / из одного и того же хранилища файлов без ошибок?

Насколько я понимаю, в режиме репликации значения ключейв конечном итоге станет согласованным по всей памяти узла.Но моя цель - обеспечить, чтобы несколько клиентских контейнеров, использующих одно и то же хранилище файлов для сохранения и предварительной загрузки, не оказывали неблагоприятного влияния на эту репликацию.

Если не рекомендуется использовать один и тот же файл .dat хранилища файлов, то чтоЛучше всего иметь GUID в пути к файлу для каждого контейнера в XML-файле.Имя хоста каждого контейнера-докера (который является containerId) уникально, но оно не будет известно до его развертывания, поэтому будет нелегко заполнить файл infinispan_server.xml статически значением "path".

Спасибо,

_Prateek

1 Ответ

1 голос
/ 01 апреля 2019

Не является ли смысл реплицируемого режима в том, что каждый узел имеет свою собственную независимую копию данных?Я не до конца понимаю, чего вы пытаетесь достичь.

К последнему пункту вашего вопроса:

Если не рекомендуется использовать один и тот же файловый магазин .datфайла, то каков наилучший метод - иметь GUID в пути к файлу для каждого контейнера в XML-файле.Имя хоста каждого контейнера-докера (это containerId) уникально, но оно не будет известно до его развертывания, поэтому будет нелегко заполнить файл infinispan_server.xml статически значением "path".

Можете ли вы поместить заполнитель в файл конфигурации xml (например: ${myprop}) и указать его при запуске (например: -Dmyprop=hostname01)?

...