Infinispan Режимы работы

Недавно я начал рассматривать Infinispan как наш уровень кэширования. После прочтения режимов работы в Infinispan, как указано ниже.

  1. Встроенный режим: это когда вы запускаете Infinispan в той же JVM, что и ваши приложения.
  2. Режим клиент-сервер: это когда вы запускаете удаленный экземпляр Infinispan и подключаетесь к нему, используя различные протоколы.

Во-первых, я сейчас запутался, какой из двух вышеперечисленных режимов лучше всего подойдет для моего приложения.

У меня есть очень простой вариант использования, у нас есть код на стороне клиента, который будет вызывать нашу службу REST, используя основной виртуальный IP-адрес службы, а затем он будет балансировать нагрузку на отдельный Service Server, где мы развернули нашу службу, а затем он будет взаимодействовать с базой данных Cassandra для получения данных на основе идентификатора пользователя. Ниже картинка все прояснит. введите здесь описание изображения

Предположим, например, что если клиент ищет какие-то данные для userId = 123, тогда он вызовет нашу службу REST, используя основной VIP, а затем будет сбалансирована нагрузка на любой из наших четырех серверов службы, предположим, что она будет сбалансирована по нагрузке на Service1, а затем на service1. вызовет базу данных Cassandra, чтобы получить запись для userId = 123, а затем вернется к клиенту.

Теперь мы планируем кэшировать данные с помощью Infinispan, поскольку сжатие убивает нашу производительность, поэтому наша скорость чтения может немного повыситься. Итак, я начал изучать Infinispan и наткнулся на два режима, о которых я упоминал ниже. Я не уверен, как лучше всего использовать Infinispan в нашем случае.

Во-вторых, что касается кеша Infinispan, я ожидаю, что если я буду использовать встроенный режим, то он должен выглядеть примерно так.

введите здесь описание изображения

Если да, то как кэши Infinispan будут взаимодействовать друг с другом? Возможно, в какой-то момент мы будем искать данные для тех идентификаторов пользователей, которые будут находиться в кэше Infinispan другого экземпляра службы? Верно? Так что же произойдет в этом сценарии? Позаботится ли об этом Infinispan? если да, то какую настройку конфигурации мне нужно иметь, чтобы убедиться, что эта штука работает нормально.

Простите мое невежество, если я что-то упустил. Любая четкая информация прояснит для меня мои два вышеуказанных вопроса.


person arsenal    schedule 15.07.2013    source источник


Ответы (2)


Что касается вашего второго изображения, да, архитектура будет выглядеть именно так.

Если да, то как кэши Infinispan будут взаимодействовать друг с другом?

Пожалуйста, посмотрите здесь: https://docs.jboss.org/author/display/ISPN/Getting+Started+Guide#GettingStartedGuide-UsingInfinispanasanembeddeddatagridinJavaSE Infinispan будет управлять этим используя протокол JGroups и отправляя сообщения между узлами. Кластер будет сформирован, и узлы будут сгруппированы. После этого вы можете испытать ожидаемое поведение репликации записей между определенными узлами.

И здесь мы переходим к вашему следующему вопросу:

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

Infinispan был разработан для этого сценария, поэтому вам не нужно беспокоиться об этом. Если у вас есть, например, 4 узла и установлен режим распределения с numberOfOwners = 2, ваши кэшированные данные будут жить ровно на 2 узлах в каждый момент. Когда вы выполняете команду GET на узле НЕ владельца, запись будет получена от владельца.

Вы также можете установить режим кластеризации на репликацию, где все узлы содержат все записи. Подробнее о режимах читайте здесь: https://docs.jboss.org/author/display/ISPN/Clustering+modes и выберите то, что лучше всего подходит для вашего варианта использования.

Кроме того, когда вы добавляете новый узел в кластер, происходит StateTransfer и синхронизация/перебалансировка записей в кластере. NonBlockingStateTransfer уже реализован, поэтому ваш кластер по-прежнему сможет обслуживать ответы на этом этапе присоединения. См.: https://community.jboss.org/wiki/Non-BlockingStateTransferV2 Аналогично для удаление/сбой узлов в вашем кластере. Будет автоматический процесс перебалансировки, например, некоторые записи (numOwners=2), которые после сбоя будут жить только на одном узле, будут реплицированы соответственно на 2 узла в соответствии со свойством numberOfOwners в режиме распределения.

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

если да, то какую настройку конфигурации мне нужно иметь, чтобы убедиться, что эта штука работает нормально.

Вышеупомянутое руководство по началу работы полно примеров, кроме того, вы можете найти несколько примеров файлов конфигурации в дистрибутиве Infinispan: ispn/etc/config-samples/*

Я бы посоветовал вам также взглянуть на этот источник: http://refcardz.dzone.com/refcardz/getting-started-infinispan, где можно найти еще более простые и очень быстрые примеры настройки.

Этот источник также предоставляет информацию, связанную с решением для вашего первого вопроса: "Должен ли я использовать встроенный режим или удаленный режим клиент-сервер?" С моей точки зрения, использование удаленного кластера более подходит для предприятий решение (см.: http://howtojboss.com/2012/11/07/data-grid-why/). Ваш уровень кэширования очень легко масштабируется, обладает высокой доступностью и отказоустойчивостью и не зависит от уровня вашей базы данных и уровня приложения, потому что он просто находится между ними.

Эта функция также может вас заинтересовать: https://docs.jboss.org/author/display/ISPN/Cache+Loaders+and+Stores

person tsykora    schedule 16.07.2013
comment
Цикора большое спасибо за помощь. Это развеяло все мои сомнения. Еще один быстрый вопрос, который вы упомянули в последнем абзаце об удаленной настройке кластера. Я думаю, вы в основном говорите о наличии отдельного сервера для уровня кэширования по сравнению с сервисным сервером. Верно? Вы знаете, как я могу это сделать? Любой пример будет очень полезен. - person arsenal; 17.07.2013
comment
Ничего страшного, я рад, что помог вам хоть немного :) Да, самый распространенный вариант использования — иметь для него отдельный сервер. Тогда этот сервер действует как ваш кеш (и это может быть больше серверов, вся сетка, например, до 128 узлов). Я нашел здесь один пример: java.dzone.com/articles/infinispan-remote- cache Я бы рекомендовал ориентироваться на протокол HotRod, который, помимо прочих преимуществ, поддерживает умную маршрутизацию. - person tsykora; 17.07.2013
comment
И я нашел одну интересную статью о взаимодействии с сервером, работающим в той же JVM: docs.jboss.org/author/display/ISPN/ (я бы сказал, что это может быть какой-то экспериментальный материал? Никогда не играл с этим, поскольку я не разработчик) Если вам нужна более конкретная информация, связанная с реализацией, архитектурой и т. д., я бы рекомендовал вам связаться с разработчиками/архитекторами сообщества (почта, irc), и они могут вам помочь. Контакты можно найти здесь: jboss.org/infinispan/community - person tsykora; 17.07.2013
comment
Цикора спасибо. Я перешел по этой ссылке, чтобы скачать Infinispan, и загрузил Binaries and demos раздел Infinispan, и после загрузки я не могу найти файл startServer.bat для запуска сервера, как указано в вики, которую вы мне дали. Есть ли что-то еще, что я должен загрузить? - person arsenal; 17.07.2013
comment
Я прокомментировал ваш новый вопрос. - person tsykora; 18.07.2013
comment
@tsykora Отличный ответ. Я споткнулся об одну вещь: вы говорите, что удаленный кластер больше подходит для предприятий. Глядя на JBoss 7 (я считаю это встроенным), я вижу такие преимущества, как: кеш и веб-приложение работают в режиме общей памяти, встроенной консоли администратора, только один сервер для запуска. Итак, какие проблемы характерны для встроенного режима? - person Beryllium; 29.08.2013
comment
Привет @Бериллий! Спасибо за ваш вклад. Пожалуйста, ознакомьтесь с этой статьей: howtojboss.com/2012/11/07. /data-grid-why Это ответ на ваш вопрос? Я упомянул об этом в своем ответе как о какой-то идее / воспоминании, которая неявно возникла у меня в голове ... может быть, на основе ^ поста. - person tsykora; 30.08.2013

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

перейдите по ссылке ниже, чтобы настроить среду кэширования для поддержки встроенного или удаленного доступа.

Взаимодействие между встроенным и удаленным Конечные точки сервера

person Thimira Dunuville    schedule 16.07.2013
comment
К сожалению, это не ответ на этот вопрос. - person tsykora; 02.11.2013