Централизованный кеш-сервер. (Ehcache или Hazelcast)
В настоящее время у нас есть 2 сервера приложений, каждый из которых имеет кэш на уровне приложений и имеет централизованный сервер базы данных. Чтобы синхронизировать кеш приложений обоих серверов, мы установили JMS-брокер между ними. В кеше очищается на одном сервере, который отправляет сообщение в JMS, поскольку другой зарегистрирован, поэтому он получит сообщение и очистит запись perticular на основе содержимого сообщения.
Поскольку эта система обмена сообщениями добавляет задержку при очистке записи кэша, в течение некоторого промежутка времени будут существовать несоответствия между кэшами уровня приложения.
Поэтому мы подумали о том, чтобы иметь сервер централизованного кэширования, чтобы избежать всей этой дополнительной работы, выполняемой для синхронизации всех кэшей.
Мы думаем об использовании Ehcache/Terracotta или Hazelcast, в этом кеше хранятся наборы результатов, информация о блокировках и некоторые системные переменные.
Пожалуйста, предложите лучшее решение для кеша для нас.
2 ответа
Я, вероятно, не могу предложить лучшее решение для вас, но я постараюсь дать несколько идей:
Hazelcast: предлагает очень простую в использовании распределенную карту (и многое другое, на что стоит обратить внимание - распределенный SQL-запрос очень удобен):
Map<String, Object> map = Hazelcast.getMap("xxx");
и вы сделали. Работайте над картой, используя стандартные API. Настройка / настройка Hazelcast довольно проста (по сравнению с Ehcache/TC). Мониторинг веб-приложения также прост в использовании и полезен, но некоторые вещи отсутствуют. Производительность должна быть более чем достаточной для небольшого кластера (например, 2 ваших сервера).
Ehcache / Terracotta: добавит новый компонент инфраструктуры в вашу установку (Terracotta Server) - может быть недостатком. Использование этой настройки в моем опыте довольно интенсивно с точки зрения того, что нужно изучить и опробовать. Обещание - производительность и мониторинг на уровне предприятия.
Если у вас нет предельно высоких требований к производительности, я бы лично пошел на Hazelcast и избежал сложности Ehcache/TC.
Мы использовали централизованный сервер Memcached (в качестве кэша Hibernate 2-го уровня и других требований кэширования), и он хорошо работает для нас. Мы используем Memcached с клиентом XMemcached, и пока он работает без проблем.