Кластер Tomcat 6 с общими объектами - PullRequest
3 голосов
/ 03 февраля 2010

У нас есть большой кластер серверов Tomcat, и я пытаюсь найти эффективный способ разделить счет между всеми ними. Это количество купленных «виджетов», которое необходимо проверять для каждого просмотра страницы. Любой сервер может завершить продажу и увеличить этот счет, после чего новое значение должно стать доступным для всех членов кластера.

Мы не хотим использовать счетчик из базы данных, потому что между обновлениями в кластере будет много просмотров страниц, и операция get для db для каждого просмотра страниц кажется ненужной.

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

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

Как вы справились с этим в своих приложениях? Я слишком обдумываю это ... мы должны просто выбросить его в memcached?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 03 февраля 2010

Оба JBossCache и EhCache могут работать в режиме многоадресной передачи UDP, реплицируя кэш в памяти на несколько виртуальных машин. В отличие от memcached, они работают внутри виртуальной машины, поэтому «получение кэша» по сути является бесплатной операцией. Они также являются чисто Java, поэтому нет необходимости поддерживать отдельную систему кэширования.

JBossCache также предоставляет транзакции и синхронизацию / асинхронную операцию, поэтому, если они вас интересуют, я бы выбрал это вместо EHCache.

1 голос
/ 03 февраля 2010

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

1 голос
/ 03 февраля 2010

Посмотрите на Терракотовая . Это дает вам распределенную модель памяти JVM, поэтому значение объекта в каждом блоке обновляется сразу.

У них есть оболочка для Ehcache, или вы можете использовать ее прозрачно для своего кода с некоторыми настройками XML.

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

...