Это руководство проведет вас через настройку и запуск Infinispan в качестве удаленного кластера распределенного кэша.
Infinispan предлагает четыре режима работы, которые определяют, как и где хранятся данные:
-
Локальный, где записи хранятся только на локальном узле, независимо от того, сформирован ли кластер. В этом режиме Infinispan обычно работает как локальный кеш
-
Invalidation, где все записи хранятся только в кэш-хранилище (например, в базе данных) и становятся недействительными со всех узлов. Когда узлу требуется запись, он загружает ее из хранилища кеша. В этом режиме Infinispan работает как распределенный кеш, поддерживаемый каноническим хранилищем данных, таким как база данных.
-
Репликация, где все записи реплицируются на все узлы. В этом режиме Infinispan обычно работает как сетка данных или временное хранилище данных, но не предлагает увеличенного пространства кучи.
-
Распределение , где записи распространяются только на подмножество узлов. В этом режиме Infinispan обычно работает как сетка данных, обеспечивая увеличенное пространство кучи.
Invalidation, Replication и Distribution могут использовать синхронную или асинхронную связь.
Infinispan предлагает два шаблона доступа, каждый из которых доступен в любой среде выполнения:
-
Внедрено в код вашего приложения
-
В качестве удаленного сервера, к которому обращается клиент (REST, memcached или HotRod)
В этой статье мы настроим сервер Infinispan с конечной точкой HotRod и получим доступ к нему через клиент Java HotRod. Одна из причин использования протокола HotRod — это автоматическая балансировка нагрузки и отработка отказа.
1. Загрузите полную версию Infinispan версии 5.1.5.
2. Настройте Infinispan для работы в распределенном режиме. Создайте infinispan-distrib.xml.
<infinispan xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:infinispan:config:5.1" xsi:schemalocation="urn:infinispan:config:5.1 http://www.infinispan.org/schemas/infinispan-config-5.1.xsd">
<global> <globaljmxstatistics enabled="true"> <transport> <properties> <property name="configurationFile" value="jgroups.xml"> </property></properties> </transport> </globaljmxstatistics></global> <default> <jmxstatistics enabled="true"> <clustering mode="distribution"> <async> <hash numowners="2"> </hash></async></clustering> </jmxstatistics></default> <namedcache name="myCache"> <clustering mode="distribution"> <sync> <hash numowners="2"> </hash></sync></clustering> </namedcache> </infinispan>
Мы будем использовать JGroups для настройки связи кластера. Скопируйте файл etc / jgroups-tcp.xml как jgroups.xml.
3. Поместите infinispan-distrib.xml и jgroups.xml в папку bin. Запустите 2 экземпляра Infinispan на одной или разных машинах.
Запустить сервер Infinispan довольно просто. Вам нужно скачать и распаковать дистрибутив Infinispan и использовать скрипт startServer.
bin\startServer.bat --help // Print all available options bin\startServer.bat -r hotrod -c infinispan-distributed.xml -p 11222 bin\startServer.bat -r hotrod -c infinispan-distributed.xml -p 11223
Два экземпляра сервера начнут общаться друг с другом через JGroups.
4. Создайте простой Remote HotRod Java Client.
import java.net.URL; import java.util.Map; import org.infinispan.client.hotrod.RemoteCache; import org.infinispan.client.hotrod.RemoteCacheManager; import org.infinispan.client.hotrod.ServerStatistics; public class Quickstart { public static void main(String[] args) { URL resource = Thread.currentThread().getContextClassLoader() .getResource("hotrod-client.properties"); RemoteCacheManager cacheContainer = new RemoteCacheManager(resource, true); //obtain a handle to the remote default cache RemoteCache cache = cacheContainer.getCache("myCache"); //now add something to the cache and make sure it is there cache.put("car", "ferrari"); if(cache.get("car").equals("ferrari")){ System.out.println("Cache Hit!"); } else { System.out.println("Cache Miss!"); } //remove the data cache.remove("car"); cacheContainer.stop(); } }
5. Определите hotrod-client.properties.
infinispan.client.hotrod.server_list = localhost:11222;localhost:11223; infinispan.client.hotrod.socket_timeout = 500 infinispan.client.hotrod.connect_timeout = 10 ## below is connection pooling config maxActive=-1 maxTotal = -1 maxIdle = -1 whenExhaustedAction = 1 timeBetweenEvictionRunsMillis=120000 minEvictableIdleTimeMillis=1800000 testWhileIdle = true minIdle = 1
См. RemoteCacheManager для всех доступных свойств.
6. Запустите QuickStart.java. Вы увидите что-то вроде этого на консоли:
Jul 22, 2012 9:40:39 PM org.infinispan.client.hotrod.impl.protocol.Codec10 readNewTopologyAndHash INFO: ISPN004006: localhost/127.0.0.1:11223 sent new topology view (id=3) containing 2 addresses: [/127.0.0.1:11223, /127.0.0.1:11222] Found hits : 3 currentNumberOfEntries : 1 totalBytesRead : 332 timeSinceStart : 1281 totalNumberOfEntries : 8 totalBytesWritten : 926 removeMisses : 0 removeHits : 0 retrievals : 3 stores : 8 misses : 0 {whenExhaustedAction=1, maxIdle=-1, infinispan.client.hotrod.connect_timeout=10, maxActive=-1, testWhileIdle=true, minEvictableIdleTimeMillis=1800000, maxTotal=-1, minIdle=1, infinispan.client.hotrod.server_list=localhost:11222;localhost:11223;, timeBetweenEvictionRunsMillis=120000, infinispan.client.hotrod.socket_timeout=500
Как вы заметите, сервер кеша возвращает топологию кластера, когда соединение установлено. Вы можете запустить больше экземпляров Infinispan, и вам следует быстро изменить топологию кластера.
Это оно!