Статьи

Infinispan как кластер удаленного кэша

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

Это оно!