Локальный ehcache Grails, настроенный в сочетании с удаленным Terracotta

У нас есть ehcache, настроенный в нашей среде Grails, и я пытаюсь выяснить, как локальный кеш может быть настроен с удаленным терракотовым кешем.

Сценарий заключается в том, что у нас есть некоторые данные, которые минимально затратны для вычисления и выигрывают от локального кеша в памяти, но преимущества сводятся к минимуму при использовании удаленного терракотового кеша.

На данный момент конфигурация довольно проста:

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd" >
  <diskStore path="java.io.tmpdir"/>
  <cacheManagerEventListenerFactory class="" properties=""/>
  <defaultCache
       maxElementsInMemory="20000"
       eternal="false"
       timeToLiveSeconds="12000"
       overflowToDisk="false"
       diskPersistent="false">
    <terracotta />
  </defaultCache>
  <terracottaConfig url="${com.ngs.app.tc.host}:${com.ngs.app.tc.port}" />

  <cache name="org.hibernate.cache.UpdateTimestampsCache"
      maxElementsInMemory="10000"
      timeToIdleSeconds="300"/>

  <cache name="org.hibernate.cache.StandardQueryCache"
      maxElementsInMemory="10000"
      timeToIdleSeconds="300"/>
</ehcache>

Вопросы:

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

  2. Возможна ли конфигурация, в которой он будет использовать локальный «горячий» кеш перед выполнением кругового пути к серверу?

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

Спасибо за любой совет...


person Conor Power    schedule 18.12.2014    source источник


Ответы (1)


Несколько моментов:

  • Приведенная выше конфигурация только объявляет кеш по умолчанию кластеризованным, именованные кеши не кластеризуются.
  • Ehcache работает с многоуровневой системой, поэтому это означает, что даже для кластеризованного кэша параметр maxElementsInMemory будет применяться к уровню кэша в куче, локальному для каждой части JVM кластера Terracotta. Примечание. maxElementsInMemory устарело и должно быть заменено на maxEntriesLocalHeap в последних версиях Ehcache.

Учитывая это, вот основные операции и их отношение к кластеризованному биту кеша:

  • Получите локальный хит: затрагивает только уровень в куче, не терракотовый путь туда и обратно
  • Получить с местным промахом: пойду попытаюсь найти значение в кластере - Терракота туда и обратно
  • Поставил: нужно будет обновить кластер - Терракота туда и обратно
  • Удалить: потребуется обновить кластер - Terracotta туда и обратно

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

Это означает, что ответы на ваши вопросы:

  1. См. выше
  2. да
  3. И да, и нет: если вам нужна только локальная часть, вы можете иметь только локальный кеш, просто опустите элемент terracotta в конфигурации кеша. Если вам нужен кластеризованный бит, но вы хотите, чтобы большинство попаданий в кэш были локальными, вам нужно настроить конфигурацию кластерного кэша.
person Louis Jacomet    schedule 18.12.2014
comment
это был отличный ответ, спасибо. Трудно найти хороший источник документации по Terracotta/ehcache. - person Conor Power; 20.12.2014