2013-08-07 4 views
5

Meine Anforderung besteht darin, ein Java-Objekt über einen Cluster hinweg zu teilen.Freigabe eines Java-Objekts über einen Cluster hinweg

ich verwirrt

  • ob ein EJB zu schreiben und die Java-Objekte über den Cluster teilen oder
  • Dritten wie Infinispan zu verwenden oder memecached oder Terrakotta oder
  • was JCache ?

mit der Einschränkung, dass

  • Ich kann nicht mit spezifisch für jede Anwendung Server (wie die Umsetzung der WebLogic des Singleton-Dienste) jede meiner Quellcode ändern.
  • Ich kann zwei Builds für Cluster- und Nicht-Cluster-Umgebung nicht anbieten.
  • Leistung sollte nicht herabgestuft werden.
  • Ich suche nur Open-Source-Dritte, wenn ich es verwenden muss.
  • Es muss in Weblogic, Websphere, Jbos und Tomcat auch arbeiten.

Kann jemand die beste Option mit diesen Einschränkungen im Auge haben.

Antwort

0
  • Es ist nur eine Idee. Vielleicht möchten Sie die genaue Implementierung überprüfen.
  • Es wird die Leistung herabstufen, aber ich sehe nicht, wie es möglich ist, es zu vermeiden.
  • Es ist nicht einfach zu implementieren. Möglicherweise sollten Sie die Lastverteilung anstelle der Clusterbildung in Betracht ziehen.

können Sie RMI und/oder Dynamic-Proxy betrachten.

  • extrahieren Schnittstelle Ihrer Objekte.
  • Verwenden Sie RMI, um auf das reale Objekt zuzugreifen (von allen Clustern selbst dasjenige, das das Objekt tatsächlich enthält)
  • um RMI für einen vorhandenen Code zu erstellen, können Sie dynamic-proxy verwenden (wieder .. nicht sicher über die Implementierung)
  • * dynamischer Proxy kann jedes Objekt umbrechen und einige Aufgaben vor und nach jedem Methodenaufruf ausführen. In diesem Fall könnte das ursprüngliche Objekt für den RMI-Aufruf verwendet werden

  • Sie benötigen Konnektivität zwischen Clustern, um das RMI-Objekt zu propagieren.
+0

Gibt es eine generische API, die mit allen J2EE-konformen Servern funktioniert? Was ist mit JCache JSR 107? – Dineshkumar

2

Dies kann vom Anwendungsfall der Objekte abhängen, die Sie im Cluster freigeben möchten.

ich denke, es kommt darauf an, wirklich eine der folgenden Optionen in den meisten Komplex am wenigsten komplexe

Distributed Cacheing http://www.ehcache.org

Distributed Caching ist gut, wenn Sie benötigen, um sicherzustellen, dass ein Objekt von einem zugänglich ist Cache auf jedem Knoten. Ich habe ehache verwendet, um ziemlich erfolgreich zu verteilen, keine Notwendigkeit, einen Terrakotta-Server einzurichten, es sei denn, Sie benötigen die Waage, können Instanzen einfach über rmi zusammenführen. Arbeitet auch synchron und asynchron, je nach Anforderungen. Auch die Cache-Replikation ist praktisch, wenn Knoten ausfallen, so dass der Cache tatsächlich redundant ist und nichts verliert. Gut, wenn Sie sicherstellen müssen, dass das Objekt über alle Knoten hinweg aktualisiert wurde.

Clustered Execution/Datenverteilung http://www.hazelcast.com/

Hazelcast ist auch eine gute Wahl als eine Möglichkeit bietet, Java-Klassen über einen Cluster auszuführen. Dies ist nützlicher, wenn Sie ein Objekt haben, das eine Arbeitseinheit darstellt, die ausgeführt werden muss, und es Ihnen nicht so wichtig ist, wo es ausgeführt wird.

Auch nützlich für verteilte Sammlungen, dh eine verteilte Karte oder Warteschlange

rollen Sie Ihre eigenen RMI/JGroups

Können Sie Ihre eigenen Client/Server schreiben, aber ich denke, Sie werden in Probleme zu laufen beginnen, dass Die größeren Frameworks lösen, wenn die Anforderungen der Objekte, mit denen Sie zu tun haben, komplex werden. Realistisch Hazelcast ist wirklich einfach und sollte wirklich die Notwendigkeit beseitigen, Ihre eigenen zu rollen.

+0

Gibt es eine generische API, die mit allen J2EE-konformen Servern funktioniert? Was ist mit JCache JSR 107? – Dineshkumar

1

Es ist nicht Open Source, aber Oracle Coherence würde dieses Problem leicht lösen.

Wenn Sie eine Implementierung von JCache benötigen, ist die einzige, die mir bekannt ist, heute Oracle Coherence; siehe: http://docs.oracle.com/middleware/1213/coherence/develop-applications/jcache_part.htm

Aus Gründen der vollständigen Offenlegung arbeite ich bei Oracle. Die in diesem Beitrag geäußerten Meinungen und Ansichten sind meine eigenen und spiegeln nicht unbedingt die Meinungen oder Ansichten meines Arbeitgebers wider.