使用Weblogic会话复制来排序内存数据库

时间:2016-02-03 17:32:06

标签: java java-ee weblogic session-replication

我必须构建一种内存数据库,我知道我可以使用内存数据管理解决方案,如EhCache和HazelCast,但我倾向于不将它们插入我的系统并实现使用Weblogic会话复制。

以下是我的问题:

  • 由于这实际上不是用户会话,我可以在应用程序启动时创建会话,然后使用Weblogic会话复制功能来实现会话复制吗?
    • 或者我应该考虑Weblogic应用程序上下文复制,是否可能?
  • 我是否强制要求让Weblogic集群使用WL会话复制,或者也可以在没有它的情况下完成它?
  • 假设我有4个WL服务器(在不同的盒子上运行)并且都在同一个集群中,如果任何节点/服务器获得了数据并将其放入会话中,那么它是否会在所有其他节点/服务器中自动复制?
  • 假设我关闭3个节点/服务器,重新启动这些节点后,我的活动节点会自动将数据推送到起始节点吗?

1 个答案:

答案 0 :(得分:3)

您应将Web会话用作内存数据库。大多数内存数据库允许微调数据在节点之间的分布方式。他们还拥有交易和恢复支持。 Web会话是节点之间非常简单的Java对象复制,您甚至不应该在那里保存关键数据。如果服务器出现故障,在Web会话对象中复制数据的主要目的是让用户登录到另一台服务器,并继续工作,即一些有状态的Web UI。

根据您使用的WebLogic版本(基于获取的许可证),您可能已经可以访问Coherence,即Oracle内存数据网格解决方案。

更新 OP的问题已在下面正确回答。

  

由于这实际上不是用户会话,我可以创建会话   应用程序启动然后使用Weblogic会话复制功能   实现会话复制?

     
      
  • 或者我应该考虑Weblogic应用程序上下文复制,是否可能?
  •   

应用程序范围(Web应用程序)中的对象不会被复制。您可能可以使用JNDI来做到这一点,但我再次不建议使用这些方法(包括启动监听器以某种方式将事情推送到会话中)。

  

我是否强制要求使用Weblogic集群来使用WL   会话复制还是可以在没有它的情况下完成?

是的,如果您想要会话复制,则需要WebLogic群集。除了使用群集之外,还有一些要求。请参阅文档章节6 Failover and Replication in a Cluster, in WLS 12.2.1 Docs

  

假设我有4个WL服务器(在不同的盒子上运行)并且全部在   相同的集群,如果任何节点/服务器已获取数据并将其放入   会话然后它将自动复制到所有其他   节点/服务器?

不是所有服务器,只有少数。有关使用Replication Groups和其他选项的详细信息,请参阅文档。

  

假设在重新启动这些节点后,我将关闭3个节点/服务器   我的活动节点会自动将数据推送到起始节点吗?

这不是那么简单,但总之,它并不像你希望的那样有效。会话不会复制到WebLogic群集中的所有节点。复制发生在足够的节点(主节点和辅助节点)上。有关WLS Docs for 12.2.1的更多信息。

同样,您不应将HTTP会话复制功能用作内存数据库。它根本不是为此而设计的。而不是"构建一种内存数据库"而是使用一个。

但是,如果你真的想要将HTTP Session用作内存数据库",至少要确保使用Coherence * Web作为WebLogic中的复制机制。