2013-08-07 145 views
5

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

我弄糊涂

  • 是否写一个EJB,共享整个集群的java对象 或
  • 使用任何第三方,例如Infinispan的或memecached或赤土色或
  • 怎么样的JCache ?

  • 我不能任何的具体我的源代码更改为任意应用程序 服务器(如执行WebLogic的单服务)的约束。
  • 我无法为群集和非群集环境提供两个构建版本。
  • 性能不应降级。
  • 我正在寻找只有开源第三方,如果我需要使用它。
  • 它也需要在weblogic,Websphere,Jbos和Tomcat中工作。

任何人都可以在考虑到这些约束的情况下想出最佳选择。

回答

0
  • 这只是一个想法。你可能想要检查确切的实现。
  • 它会降低性能,但我不明白如何避免它。
  • 这不是一件容易的事情。可能你应该考虑负载平衡而不是集群。

你可能会考虑RMI和/或动态代理。

  • 提取对象的接口。
  • 使用RMI访问真实对象(从所有集群中,即使是实际上持有对象的集群)
  • 为了创建您可能使用动态代理的现有代码的RMI(再次..不确定实现)

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

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

是否有一个适用于所有J2EE兼容服务器的通用API?那么JCache JSR 107呢? – Dineshkumar

2

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

我认为它归结为真正下列选项中最复杂,最复杂的

分布式cacheing http://www.ehcache.org

分布式cacheing是好的,如果你需要确保的对象是可访问从缓存在每个节点上。我已经使用Ehache进行了相当成功的分发,除非需要扩展,否则不需要安装兵马俑服务器,只需通过rmi指向实例即可。根据需求也可以同步和异步工作。如果节点关闭,缓存复制也很方便,所以缓存实际上是多余的,不会丢失任何东西。如果需要确保对象已在所有节点上更新,那么这很好。

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

Hazelcast也是一个很好的选择,因为提供在一个集群执行Java类的方式。如果您有一个代表需要执行的工作单元的对象,并且您不太在乎它执行的位置,那么这会更有用。

也为分布式集合有用的,即分布地图或队列

推出自己的RMI/JGroups的

可以编写自己的客户机/服务器,但我想你会开始遇到问题该如果您处理的对象的要求开始变得复杂,那么更大的框架就可以解决问题。现实Hazelcast非常简单,应该真正消除需要推出自己的。

+0

是否有一个适用于所有J2EE兼容服务器的通用API?那么JCache JSR 107呢? – Dineshkumar