2015-06-05 2 views
0

Я в процессе миграции своего веб-приложения Spring MVC + Hibernate в кластерную среду (кластеризация Tomcat). В приложении я храню некоторые таблицы поиска в статических переменных класса, всякий раз, когда есть изменение, я просто перезаряжаю таблицу в переменные (в основном, HashMap), это изменение сразу же отражается во всех частях приложения. Очевидно, что он не будет работать в кластерной среде, поскольку статические переменные доступны только в одной JVM. Я думал об использовании Ehcache с репликацией. Однако я только что протестировал репликацию Ehcache и выяснил, что два узла Ehcache могут содержать несогласованные данные. Например, я помещаю номер 1, 2, 3 ... в узел1 и отключенный узел1 и узел2 некоторое время, а затем снова подключаюсь, я обнаружил, что элементы, помещенные в узел1 в течение отключенного периода, отсутствуют в узле2. Это нормально для кеша. Однако я хочу, чтобы изменения, сделанные на одном сервере, сразу отражались на другом сервере в кластере. Таким образом, конечный пользователь может иметь такой же опыт, как и раньше. Может ли кто-нибудь предложить решение? Благодаря!Обмен данными в кластерной среде

+0

Вы посмотрели на Редис? Вы можете использовать Redis в качестве хранилища данных с кешем/ключом без суеты многоадресной рассылки, синхронизации кластера и т. Д. – mp911de

+0

Вы пробовали просто не кэшировать? Ваша база данных работает быстро, а таблицы поиска невелики. Запросы для этих таблиц должны быть быстрыми. –

+0

Спасибо, ребята. Я посмотрю Redis, я знаю, что Spring Session использует его в качестве backend-репозитория. – Yang

ответ

0

Отказ от ответственности: Я работаю в Terracotta

Вы можете группироваться Ehcache с Terracotta. Версия 4.3.0 снова имеет опцию с открытым исходным кодом.

Как вы заметили в своих тестах, опция репликации в Ehcache 2.x не предлагает никаких гарантий согласованности. Опция кластеризации, однако, сможет дать вам именно это.

Смежные вопросы