0

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

以下是我的问题:

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

1 回答 1

3

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

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

更新以下正确回答的 OP 问题。

既然这实际上不是用户会话,那我可以在应用程序启动时创建一个会话,然后使用 Weblogic 会话复制功能来实现会话复制吗?

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

(Web 应用程序的)应用程序范围内的对象不会被复制。不过,您也许可以使用 JNDI 来做到这一点,但我也不推荐这两种方法(包括启动侦听器以某种方式将事物推送到会话)。

我是否必须拥有 Weblogic 集群才能使用 WL 会话复制,或者它也可以在没有它的情况下完成?

是的,如果您想要会话复制,则需要一个 WebLogic 集群。除了使用集群之外,还有一些要求。请参阅 WLS 12.2.1 Docs 中的文档第6 章集群中的故障转移和复制

假设我有 4 个 WL 服务器(在不同的机器上运行)并且都在同一个集群中,如果任何节点/服务器已经获取数据并将其放入会话中,那么它会在所有其他节点/服务器中自动复制吗?

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

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

它不是那么简单,但简而言之,它并不能如你所愿。会话不会复制到WebLogic 集群中的所有节点。复制发生在足够多的节点(主节点和辅助节点)上。有关12.2.1的 WLS 文档的更多信息。

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

但是,如果您真的非常想将 HTTP 会话用作“内存数据库”,至少要确保您使用 Coherence*Web 作为 WebLogic 中的复制机制。

于 2016-02-03T22:53:38.787 回答