Общий кэш между веб-приложениями Tomcat

Я ищу решение для совместного использования кэша между двумя веб-приложениями tomcat, работающими на разных хостах. Кэш используется для синхронизации данных, поэтому кэш должен быть гарантированно обновлен в любое время между двумя экземплярами tomcat. (Извините, я не на 100% уверен, что правильная терминология для этого требования - "согласованность" или что-то более конкретное, например, свойство ACID). Другое требование, конечно, заключается в том, что он должен быть быстрым для доступа к кэшу, с примерно равное количество записывает как читает. У меня есть доступ к общей файловой системе, так что это рассмотрение.

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

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

Я ищу предложения о том, как лучше решить эту проблему. Решение должно быть относительно зрелой технологией, как он будет использоваться в производственной среде.

спасибо заранее!

2 ответов


Я уверен, что вам не нужен сервер terracotta или ehcache, если вам нужен распределенный кэш. Ehcache с одним из четыре механизма репликации будет делать.

однако, основываясь на том, что вы написали, Я предполагаю, что вы ищете больше, чем просто кэш. Memcached / Ehcache-примеры того, что вы можете назвать кэширующий слой для приложения - не более.

Если вы обнаружите, что используете такие слова, как "гарантированный ""обновленный ""ACID" вам лучше использовать БД в памяти, такую как Oracle Times Ten/MySQL Cluster/Redis с постоянным дисковым хранилищем.


можно использовать memcached (не memcachedb) для быстрого и эффективного кэширования. Redis или memcachedb может быть излишним, если вы не хотите постоянного кэширования. Memcached может быть кластеризован очень легко, и вы можете использовать spymemcached клиент java для доступа к нему. Memcacached очень зрелый и работает в нескольких сотнях тысяч, если не миллионах производственных серверов. Его можно контролировать через системы Nagios и Munin когда в продукции.