Запуск нескольких приложений с использованием Hibernate на одном автономном сервере EhCache - PullRequest
1 голос
/ 09 февраля 2011

У меня есть два сервера приложений (в данном случае Tomcat, но не обязательно этот контейнер), на которых запущено одно и то же приложение с балансировщиком нагрузки, направляющим работу на них.

За этими серверами у меня есть одна база данных, к которой оба сервера хотят подключиться через Hibernate. Я хочу кешировать обычные запросы объектов, используя EhCache. В конфигурации с одним сервером это тривиальное изменение конфигурации Hibernate для использования поставщика EhCache.

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

Первоначально я думал, что это будет простой вопрос настройки автономного сервера EhCache и указания конфигурации гибернации на них. Тем не менее, я не смог определить, как это можно сделать (если вообще).

Мои вопросы: может ли эта установка существовать и как ее настроить?

Если это невозможно, существует ли какой-либо другой способ (или другой поставщик кэширования), в котором я поддерживаю общий кэш гибернации между приложениями?

1 Ответ

1 голос
/ 10 февраля 2011

Я не знаю ни одного сервера EhCache, к которому можно получить доступ с нескольких машин. Вы можете написать это сами и раскрыть, например, REST API, но вам также придется реализовать собственный CacheRegionFactory для Hibernate, чтобы использовать удаленный сервер за кулисами. Много работы, и результат, скорее всего, будет неудовлетворительным из-за задержки в сети.

Другой подход заключается в том, чтобы иметь общий CacheManager, который может использоваться несколькими приложениями в одной JVM. Но так как у вас есть несколько JVM, это не вариант. Также требуется, чтобы EhCache.JAR загружался родительским загрузчиком классов только один раз, поскольку он использует простое статическое поле для сохранения одного экземпляра .

Наконец, ответ на ваш вопрос - либо с использованием репликации кэша, либо Terracotta . Хотя Terracotta является очень сложным продуктом, кэш EhCache replication очень зрелый и стабильный.

Идея проста: у каждого сервера есть независимый экземпляр диспетчера кэша, но менеджеры кэша обнаруживают себя автоматически, используя UDP и сетевое вещание. Когда изменение происходит в одном из кэшей, оно передается другим узлам. Он не очень масштабируемый, но для двух серверов он должен работать нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...