跨群集共享java对象

时间:2013-08-07 11:56:43

标签: java java-ee weblogic cluster-computing

我的要求是在群集中共享一个java对象。

我感到困惑

  • 是否编写EJB并在群集中共享java对象 或
  • 使用任何第三方,如infinispan或memecached或terracotta或
  • JCache怎么样?

具有

的约束
  • 我无法更改任何特定于任何应用程序的源代码 服务器(例如实现weblogic的单例服务)。
  • 我无法为群集和非群集环境提供两个版本。
  • 表现不应降级。
  • 如果我需要使用它,我只会寻找开源第三方。
  • 它也需要在weblogic,Websphere,Jbos和Tomcat中工作。

任何人都可以考虑到这些限制条件,提出最佳选择。

3 个答案:

答案 0 :(得分:4)

它可能取决于您要在群集中共享的对象的用例。

我认为它归结为最复杂到最不复杂的

中的以下选项

分布式缓存 http://www.ehcache.org

如果需要确保可以从每个节点上的缓存访问对象,则分布式缓存很有用。我已经使用ehache进行了非常成功的分发,除非你需要比例,否则无需设置兵马俑服务器,只需通过rmi将实例指向一起即可。也可以根据需要同步和异步工作。如果节点出现故障,缓存复制也很方便,因此缓存实际上是多余的,不会丢失任何东西。如果您需要确保在所有节点上更新了对象,那就太好了。

群集执行/数据分发 http://www.hazelcast.com/

Hazelcast也是一个很好的选择,它提供了一种在集群中执行java类的方法。如果您有一个表示需要执行的工作单元的对象,并且您不太关心它执行的位置,那么这将更有用。

对分布式集合也很有用,即分布式映射或队列

滚动您自己的RMI / Jgroup

可以编写自己的客户端/服务器,但我认为如果您处理的对象的要求开始变得复杂,您将开始遇到更大框架解决的问题。实际上Hazelcast非常简单,应该真的不需要自己动手。

答案 1 :(得分:1)

它不是开源的,但Oracle Coherence可以轻松解决这个问题。

如果你需要JCache的实现,那么我唯一知道今天可用的是Oracle Coherence;见:http://docs.oracle.com/middleware/1213/coherence/develop-applications/jcache_part.htm

为了充分披露,我在Oracle工作。本文中表达的观点和观点是我自己的,不一定反映我的雇主的意见或观点。

答案 2 :(得分:0)

  • 这只是一个想法。你可能想检查确切的实现。
  • 它会降低性能,但我不知道如何避免它。
  • 实施起来并不容易。可能你应该考虑负载平衡而不是群集。

您可能会考虑使用RMI和/或动态代理。

  • 提取对象的界面。
  • 使用RMI访问真实对象(来自所有群集,甚至是实际拥有该对象的群集)
  • 为了为现有代码创建RMI,您可以使用动态代理(再次......不确定实现)

*动态代理可以包装任何对象,并在每个方法调用上执行一些前后任务。在这种情况下,它可能使用原始对象进行RMI调用

  • 您需要群集之间的连接才能传播RMI对象。