【问题标题】:Session replication across JVMs in WebSphereWebSphere 中跨 JVM 的会话复制
【发布时间】:2009-07-13 21:19:28
【问题描述】:

我们设置了一个基础架构,其中网络服务器是集群的,而应用程序服务器不是。网络服务器根据循环策略将请求路由到应用服务器。

在这种情况下,一个应用程序服务器中可用的会话数据在另一个应用程序服务器中不可用。无论如何,是否可以在第二个应用程序中提供来自第一个应用程序服务器的会话数据?两个应用服务器是物理上独立的盒子,位于不同的单元中。

一种方法是使用数据库 - 是否有其他方法可以完成此会话复制?

【问题讨论】:

  • 我相信您可以在 WAS 控制台中将它们配置为集群,不是吗?

标签: java session replication websphere


【解决方案1】:

在 WebSphere 中,基本上有两种复制会话数据的方法:

  1. 持久化到数据库
  2. 内存到内存传输

哪一个适合你的需求很大程度上取决于你的应用场景:

当您的所有应用服务器出现故障时,会话数据的持久性有多重要? 您同时拥有多少个会话对象?

在数据库中,您可以毫无问题地存储许多会话,另一个选项始终是可用内存量的问题。

我会选择数据库,如果你已经设置了一个,所有应用程序服务器都使用它。

这里是WebSphere Information Center 的链接以及必要的详细信息。

【讨论】:

  • 感谢您的回复 dertoni。我们使用了相当多的会话数据——同意这是一种不好的做法,但作为一个维护应用程序,到目前为止它是一个很好的例子。如果我们碰巧将数据保存在数据库中,我们将不得不检索它并重新填充应用程序对象以重新显示预期的页面,这将是一个挑战。
  • 您知道 websphere 是否复制会话数据,尽管在 web 应用程序的 web.xml 中,标签“distributable”不存在? stackoverflow.com/questions/26043080/…
【解决方案2】:

一个明显的解决方案是启用应用服务器集群。我假设从你提出问题的方式来看,你已经拒绝了这个选项。另一种选择是更改 Web 服务器使用的路由以使用会话亲和性(同一会话的请求转到同一应用服务器)。

除此之外,我会支持 dertoni 的答案。

【讨论】:

  • 会话亲和性在大多数情况下是解决这个问题的穷人解决方案。
【解决方案3】:

也许你可以看看“兵马俑”。它是一个缓存框架,可以缓存会话并在单独的服务器上运行

【讨论】:

    【解决方案4】:

    WebSphere 中有两个集群选项,会话复制或数据库。如果您有大型会话对象,则最好使用数据库,因为它允许您将陈旧的会话卸载到磁盘。如果它们随后被表示,那么它们可以从数据库中提取,如果您使用会话复制,那么这些会话不仅需要保留在目标服务器的内存中,还需要保留在复制组中的其他服务器上。对于大型会话,这可能会导致内存不足。

    通过数据库会话处理,它也非常可定制,并且在我使用它的环境中性能并不明显。

    【讨论】:

      【解决方案5】:

      不要忘记 oracle 的连贯性。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多