繁体   English   中英

跨群集共享java对象

[英]Sharing a java object across a cluster

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

我有点迷惑不解了

  • 是否编写EJB并在集群中共享java对象
  • 使用任何第三方,如infinispan或memecached或兵马俑或
  • 那么JCache呢?

有约束的

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

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

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

我认为它归结为最复杂到最不复杂的以下选项

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

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

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

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

也适用于分布式集合,即分布式映射或队列

滚动您自己的RMI / Jgroups

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

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

如果你需要JCache的实现,那么我所知道的唯一一个就是Oracle Coherence; 请参阅: http//docs.oracle.com/middleware/1213/coherence/develop-applications/jcache_part.htm

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM