我一直在阅读有关该主题的帖子和文档,但仍然无法找到易于理解和信任的内容。
我目前将我的webapp部署在WildFly 10上,作为一个简单的war文件。
这是一个电子商务网站,已经投入生产几周了,而且每次我们需要部署一个新版本时,那......非常讨厌,因为有些客户可能会购物现在,部署显然会让他们失去他们的会话,这非常糟糕。
我需要一个解决方案来部署新战争,而无需重新启动应用程序服务器。首先,我阅读了有关群集的文档(域配置超过独立配置),但我不确定这对我来说是否足够......
想象一下,购物车中有一些商品(http会话)的同一个客户访问群集的第一个节点。 然后我把它放下,因为我正在部署。 好的,客户将被重定向到集群的第二个节点,但......会话数据是否仍然可用?他会失去'购物车项目?
我读到了粘性会话,但没有关于在WildFly中配置它们的内容。我在Amazon AWS上,所以我也可以使用ELB(负载均衡器)。 你能帮我理解我需要学习和使用的东西吗?
答案 0 :(得分:1)
每个WildFly实例都有自己的会话ID,它保存在cookie中。此id将仅恢复它来自的特定节点上的会话。
粘性会话意味着ELB将始终将用户重定向到群集中的同一节点,这样就无法解决您的问题。
要考虑的一些事情:
<强>聚类强>
群集可能有所帮助(不需要是域模式)。启用HA后,会话将自动在节点之间传输,以便客户端浏览器上的cookie能够恢复任一节点上的会话。这当然有一个问题,如果你先升级其中一个war文件,你可能会有一个因为它改变而无法再反序列化的对象。
在AWS上集群WF也有点棘手,因为您不能使用UDP广播来发现彼此。我们使用数据库连接来跟踪节点并进行聚类。
推出自己的
您可以做的一个选择是推出自己的解决方案,以便根据需要在客户端上保留最少量的信息。类似的东西:
我过去曾经使用过这样的方法来处理电子商务应用。它有另一个副作用,你现在可以将人的购物车保存在你的数据库中,很容易看到人们有兴趣购买的东西。
使用Tomcat并行部署
您的应用是否需要完整的应用服务器?如果它只是基于servlet,你可以尝试使用Tomcat及其并行部署功能。它允许您将旧的.war文件部署在旧文件之上。然后它将继续为旧战争服务旧会话,但新会话将转到新的战争档案。
如果您的应用程序非常简单,可以使用tomcat,那么并行部署非常酷。