Подтвердить что ты не робот

Общий кэш кластера

Я ищу фреймворк java, который позволит мне совместно использовать кеш между несколькими JVM.

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

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

Я посмотрел JBoss Cache, но, похоже, немного переборщил за то, что мне нужно сделать.

Я просмотрел JGroups, который, кажется, является наиболее перспективным инструментом для того, что мне нужно сделать, Кто-нибудь имеет опыт работы с JGroups? Предпочтительно, если он использовался как общий кэш?

Любые другие предложения?

Спасибо!

EDIT. Мы начинаем тесты, чтобы помочь нам решить между Hazelcast и Infinispan, я скоро приму ответ.

EDIT. Из-за внезапных изменений требований нам больше не нужна распределенная карта. Мы будем использовать JGroups для низкоуровневой системы сигнализации. Спасибо всем за помощь.

4b9b3361

Ответ 1

После некоторого поиска я нашел JGroup ReplicatedHashMap. Он не был тщательно протестирован, но кажется отличным началом. Он заполняет все мои требования, не давая мне слишком много функций, которые мне не нужны. Это также довольно гибко. Я все еще ищу "идеальный" ответ, хотя:)

Спасибо за ваши ответы.

Ответ 2

Как насчет этого?

У вас есть локальный ConcurrentHashMap в качестве локального кеша. Создайте распределенную карту/кеш-память Hazelcast. Начните прослушивать распределенные события карты и обновить локальную ConcurrentHashMap.

Теперь локальные кеши на каждом члене будут одинаковыми. Авто-синхронизируется.

import com.hazelcast.core.IMap; 
import com.hazelcast.core.Hazelcast;
import com.hazelcast.core.EntryListener;
import com.hazelcast.core.EntryEvent; 
import java.util.concurrent.ConcurrentHashMap;

public class Sample implements EntryListener {
        Map localCache = new ConcurrentHashMap ();

        public static void main(String[] args) { 
                Sample sample = new Sample();
                IMap   map    = Hazelcast.getMap("default"); 

                //Listen for all added/updated/removed entries
                map.addEntryListener(sample, true);  
        }

        public void entryAdded(EntryEvent event) {
             localCache.put(event.getKey(), event.getValue());            
        }

        public void entryRemoved(EntryEvent event) {
             localCache.remove(event.getKey());            
        }

        public void entryUpdated(EntryEvent event) {
             localCache.put(event.getKey(), event.getValue());            
        }
}

Ответ 3

Вы считали Infinispan - http://www.jboss.org/infinispan/? API очень прост и основан на стандарте (JSR-107). Использование также очень просто

CacheManager manager = new DefaultCacheManager(
                GlobalConfiguration.getClusteredDefault() );

Cache cache = manager.getCache();

cache.put("key", "value");

- Hardy

Ответ 4

Вы считали Терракоту? Может быть излишним: http://www.terracotta.org/web/display/orgsite/Data+Caching

В области кэширования некоторое время назад существовал JSR, любое из следующего соответствует счету: http://java-source.net/open-source/cache-solutions/jcache?

Я лично использовал FKache несколько лет назад, и он работал хорошо, но я не использовал его в распределенном режиме.

Важно ли, чтобы это распределенный кеш с локальными копиями данных? Там также материал JavaSpaces, если вам нужна общая память...

Ответ 5

Я использовал несколько технологий в этой области, я могу порекомендовать JBoss Cache как лучший выбор для того, что вы пытаетесь делать. Он использует JGroups в качестве транспорта, но обеспечивает транзакционную абстракцию более высокого уровня. Из-за коробки он дает структуру распределенного дерева node.

edit: О, и JBossCache не зависит от JBoss Application Server, вы можете использовать его в любой среде. Во всяком случае, он работает лучше, чем JBossAS, чем внутри него.

Ответ 7

Мой вариант Java Caching System от Apache, у него есть поддержка бокового кэша TCP, который, на мой взгляд, является той функцией, которая вам нужна.

Ответ 8

http://ehcache.org/ - это очень хороший и легкий кеш. Он может быть разделен между несколькими JVM. Внутри он может использовать JGroups.