Общий кеш между веб-приложениями Tomcat - PullRequest
7 голосов
/ 19 апреля 2011

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

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

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

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

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

Ответы [ 2 ]

4 голосов
/ 19 апреля 2011

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

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

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

3 голосов
/ 19 апреля 2011

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

...