Конфигурация и использование кеша JCS LTCP AUX

Предыстория:

У нас есть 4 физических сервера (4 IPS), каждый из которых работает в JBOSS 6 EAP, работающем на порту 80. Все запросы перенаправляются на любой из этих серверов через балансировщик нагрузки. Теперь я попытался реализовать систему кеша Java для такой распределенной среды, чтобы наши свойства обновлялись в кеше каждого сервера.

POC: для этого мы сделали небольшой POC на наших локальных системах, реализующих боковое кэширование JCS v1.3. Включил его в нашем проекте maven. В файле .ccf используется следующая конфигурация:

  jcs.default=
  jcs.default.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes
  jcs.default.cacheattributes.MaxObjects=1000
  jcs.default.cacheattributes.MemoryCacheName=org.apache.jcs.engine.memory.lru.LRUMemoryCache
 # PRE-DEFINED CACHE REGION

##############################################################
##### AUXILIARY CACHES
# LTCP AUX CACHE
   jcs.auxiliary.LTCP=org.apache.commons.jcs.auxiliary.lateral.socket.tcp.LateralTCPCacheFactory
   jcs.auxiliary.LTCP.attributes=org.apache.commons.jcs.auxiliary.lateral.socket.tcp.TCPLateralCacheAttributes
  #jcs.auxiliary.LTCP.attributes.TcpServers=152.144.219.209:8080
   jcs.auxiliary.LTCP.attributes.TcpListenerPort=1118
   jcs.auxiliary.LTCP.attributes.UdpDiscoveryAddr=228.5.6.8
   jcs.auxiliary.LTCP.attributes.UdpDiscoveryPort=6780
   jcs.auxiliary.LTCP.attributes.UdpDiscoveryEnabled=true
   jcs.auxiliary.LTCP.attributes.Receive=true
   jcs.auxiliary.LTCP.attributes.AllowGet=true
   jcs.auxiliary.LTCP.attributes.IssueRemoveOnPut=false
   jcs.auxiliary.LTCP.attributes.FilterRemoveByHashCode=false
   jcs.auxiliary.LTCP.attributes.SocketTimeoOt=1001
   jcs.auxiliary.LTCP.attributes.OpenTimeOut=2002
   jcs.auxiliary.LTCP.attributes.ZombieQueueMaxSize=2000

И реализация методов получения и установки для сохранения строкового атрибута в кеше и получения его из кеша.

public void addProp(String propId)
        throws PimsAppException {
    try {
        configMSCache.put(propId, propId);
    } catch (CacheException e) {
        e.printStackTrace();
    }       

}

@Override
public String testProp(String propId) throws PimsAppException {
    if(configMSCache!=null){
        return (String) configMSCache.get(propId);
    }else{
    return "It dint work";
    }
} 

Приложение развернуто без ошибок при его запуске.

МЕТОД ТЕСТА: развернул project.war на моем локальном сервере и на удаленном сервере с разными IP-адресами. Обе машины находятся в одной сети, поэтому нет проблем с брандмауэром при доступе друг к другу по IP-адресу. Сохранили свойство на моем сервере и получите его. (Отлично работало) Попытался получить сохраненное свойство через мой локальный компьютер на удаленной машине. (Он возвращает пустой ответ). Означает, что функция распределенного кэша НЕ реализована.

Сомнения: 1. Правильно ли настроены вспомогательные кэши? Я имею в виду конфигурации 2. Правильно ли я тестирую или как я могу протестировать его в среде разработки. 3. Поскольку JCS UDP Discovery позволяет нам поддерживать одну и ту же конфигурацию на нескольких машинах, то почему она не работает на удаленной машине? 4. Или есть ли какой-либо механизм кэширования с хорошими примерами и документацией, который может удовлетворить потребности моего приложения (как упоминалось в разделе «Справочная информация»).

Заранее спасибо.


person MG_7    schedule 24.12.2015    source источник


Ответы (1)


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

JCSAdminBean admin = new JCSAdminBean();
LinkedList linkedList = admin.buildCacheInfo();
ListIterator iterator = linkedList.listIterator();
while (iterator.hasNext()) {
    CacheRegionInfo info = (CacheRegionInfo)iterator.next();
    CompositeCache compCache = info.getCache();
    System.out.println("Cache Name: " + compCache.getCacheName());
    System.out.println("Cache Type: " + compCache.getCacheType());
    System.out.println("Cache Misses (not found): " + compCache.getMissCountNotFound());
    System.out.println("Cache Misses (expired): " + compCache.getMissCountExpired());
    System.out.println("Cache Hits (memory): " + compCache.getHitCountRam());
    System.out.println("Cache value: " + compCache.get(propId));

}

person SE_007    schedule 17.03.2016