跨集群共享java对象

跨集群共享java对象,java,jakarta-ee,weblogic,cluster-computing,Java,Jakarta Ee,Weblogic,Cluster Computing,我的要求是跨集群共享一个java对象 我感到困惑 是否编写EJB并跨集群共享java对象 或 使用任何第三方,如infinispan或memecached或terracotta或 那JCache呢 有这样的限制 我无法更改任何特定于任何应用程序的源代码 服务器(例如实现weblogic的单例服务) 我不能为集群和非集群环境提供两种构建 不应降低性能 我正在寻找唯一的开源第三方,如果我需要使用它 它也需要在weblogic、Websphere、Jbos和Tomcat中工作 考虑到这些限制,

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

我感到困惑

  • 是否编写EJB并跨集群共享java对象 或
  • 使用任何第三方,如infinispan或memecached或terracotta或
  • 那JCache呢
有这样的限制

  • 我无法更改任何特定于任何应用程序的源代码 服务器(例如实现weblogic的单例服务)
  • 我不能为集群和非集群环境提供两种构建
  • 不应降低性能
  • 我正在寻找唯一的开源第三方,如果我需要使用它
  • 它也需要在weblogic、Websphere、Jbos和Tomcat中工作
考虑到这些限制,任何人都能想出最好的选择。

  • 这只是一个想法。您可能需要检查具体的实现
  • 这会降低性能,但我不知道如何避免
  • 这不是一个容易实现的方案。也许你应该考虑负载平衡而不是集群。<李>

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

  • 提取对象的接口
  • 使用RMI访问真实对象(从所有集群,甚至从实际持有对象的集群)
  • 为了为现有代码创建RMI,您可以使用动态代理(同样..不确定实现)
*动态代理可以包装任何对象,并在每次方法调用时执行一些前置和后置任务。在这种情况下,它可能使用原始对象进行RMI调用

  • 为了传播RMI对象,您将需要集群之间的连接

这取决于您希望在集群中共享的对象的用例

我认为这可以归结为以下几个选项,从最复杂到最不复杂

分布式缓存

如果需要确保可以从每个节点上的缓存访问对象,那么分布式缓存是很好的。我已经使用eCache非常成功地进行了分发,不需要设置terracotta服务器,除非您需要规模,可以通过rmi将实例点到一起。还可以根据需求同步和异步工作。此外,如果节点宕机,缓存复制也很方便,所以缓存实际上是冗余的,不会丢失任何东西。如果需要确保对象已跨所有节点更新,则此选项很好

集群执行/数据分发

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

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

推出您自己的RMI/J团队


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

它不是开源的,但是Oracle Coherence很容易解决这个问题

如果您需要JCache的实现,我知道目前唯一可用的是Oracle Coherence;见:


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

是否有一个通用API可用于所有符合J2EE的服务器?关于JCache JSR 107呢?我一直在研究和研究Terracotta,以便找到一种方法使应用程序在JVM处理中共享对象:是否有一种通用API可以与所有符合J2EE的服务器一起工作?JCacheJSR107怎么样?