Cluster Shared Cache [zamknięty]

Szukam frameworka java, który pozwoliłby mi na współdzielenie pamięci podręcznej pomiędzy wieloma JVMs.

Potrzebowałbym czegoś takiego Hazelcast ale bez części "rozproszonej". Chcę być w stanie dodać element w pamięci podręcznej i mieć go automatycznie zsynchronizowany z innym "członkiem grupy" pamięci podręcznej. Jeśli to możliwe, chciałbym, aby pamięć podręczna była synchronizowana przez niezawodny multicast (lub coś podobnego).

I ' ve looked at Ławica ale niestety "Distributed State Cache" wydaje się niewystarczającą implementacją dla moich potrzeb.

I ' ve looked at JBoss Cache ale to trochę przesada, jak na to, co muszę zrobić.

I ' ve looked at JGroups, co wydaje się być najbardziej obiecującym narzędziem do tego, co muszę zrobić. Czy ktoś ma doświadczenia z JGroups ? Najlepiej, jeśli był używany jako współdzielona pamięć podręczna ?

Jakieś inne propozycje ?

Dzięki !

EDIT : Jesteśmy rozpoczynając testy, które pomogą nam zdecydować między Hazelcast i Infinispan, wkrótce przyjmę odpowiedź.

EDIT: z powodu nagłej zmiany wymagań, nie potrzebujemy już rozproszonej mapy. Będziemy używać JGroups dla frameworka sygnalizacyjnego niskiego poziomu. Dziękuję wszystkim za pomoc.

Author: Amro, 2009-06-11

8 answers

Co ty na to?

Miej lokalną mapę współbieżności jako lokalną pamięć podręczną. Utwórz rozproszoną mapę/pamięć podręczną Hazelcast. Zacznij nasłuchiwać rozproszonych wydarzeń map i zaktualizuj lokalną mapę współbieżności.

Teraz lokalne bufory na każdym członku będą takie same. Automatyczna synchronizacja.

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());            
        }
}
 13
Author: Talip Ozturk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-16 15:09:16

Czy rozważałeś Infinispan - http://www.jboss.org/infinispan / ? API jest bardzo proste i oparte na standardzie (JSR-107). Użycie jest również bardzo proste

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

Cache cache = manager.getCache();

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

--Hardy

 9
Author: Hardy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-12 08:49:03

Po kolejnych poszukiwaniach znalazłem ReplicatedHashMap JGroup. Nie został dokładnie przetestowany, ale wydaje się, że to doskonały początek. Spełnia wszystkie moje wymagania, nie dając mi zbyt wielu funkcji, których nie potrzebuję. Jest również dość elastyczny. Wciąż jednak Szukam "idealnej" odpowiedzi:)

Dzięki za odpowiedzi.

 8
Author: GuiSim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-12 11:02:40

Rozważałeś terakotę? Może być przesada: http://www.terracotta.org/web/display/orgsite/Data+Caching

Jakiś czas temu był JSR w obszarze buforowania, czy któryś z poniższych wpisów pasuje do rachunku: http://java-source.net/open-source/cache-solutions/jcache ?

Osobiście używałem FKache kilka lat temu i działało dobrze, ale nie używałem go w trybie rozproszonym.

Czy to ważne, że jest to rozproszona pamięć podręczna z lokalnymi kopiami danych? Są też rzeczy JavaSpaces, jeśli jest to pamięć dzielona, której potrzebujesz...

 5
Author: Dan Gravell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-12 08:34:53

Użyłem kilku technologii w tej dziedzinie, mogę gorąco polecić JBoss Cache jako najlepszy wybór dla tego, co próbujesz zrobić. Wykorzystuje JGroups jako swój transport, ale zapewnia wyższy poziom abstrakcji transakcyjnej. Out-of-the-box daje rozproszoną strukturę drzewa węzeł.

Edit: Aha, a JBossCache jest niezależny od serwera aplikacji JBoss, można go używać w każdym środowisku. Jeśli już, to działa lepiej poza Jbossem niż wewnątrz niego.

 3
Author: skaffman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-12 08:57:33
 1
Author: John Meagher,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-11 16:52:23

Moją opcją jest Java Caching System z Apache, posiada wsparcie TCP bocznej pamięci podręcznej, która moim zdaniem jest funkcja, której potrzebujesz.

 0
Author: victor hugo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-11 17:14:16

Http://ehcache.org / jest bardzo dobra i lekka pamięć podręczna. Może być współdzielony między wieloma JVMs. Wewnętrznie może używać JGroups.

 0
Author: Andrej Fink,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-20 10:12:47