0

我试图解决的一般问题是:“如何在升级到新版本期间不让用户停止使用应用程序的情况下重新部署 Web 应用程序”。我想出了以下解决方案的假设场景:

  1. Web 应用程序的生产环境具有已配置的 Web 服务器(IIS 或可能是 Apache),并将运行 2 个相同配置的 JBoss 实例。

  2. 首先,Web 服务器将所有请求重定向到一个 JBoss 实例,运行当前版本的 Web 应用程序。

  3. 新版本的 Web 应用程序已准备好部署到生产环境。

  4. 我们将新版本部署到 JBoss 的第二个实例(而第一个实例仍在运行旧版本的 Web 应用程序)

  5. 然后,我们以某种方式配置 Web 服务器以将所有新的 HTTP 会话重定向到具有新版本 Web 应用程序的第二个 JBoss 实例。

  6. 当前活动会话仍被重定向到“旧”JBoss 实例,直到用户注销或会话到期。

  7. 对于另一个版本的重新部署,我们遵循相同的过程(但部署到第一个实例,同时保持第二个运行旧版本)。

目前我不知道这种情况是否有意义,我对该主题的谷歌搜索总是以 JBoss 集群配置结束,在我看来,这在这种情况下是一个过冲,因为我们不需要集群 HA 解决方案(在至少现在),编写应用程序时也没有考虑任何集群支持,这可能是一个真正的问题。

请给我一些关于这个话题的提示。如果有人解决了类似的问题,我也将不胜感激。关于我是否在此描述中遗漏了什么的任何建议也是可取的。

4

1 回答 1

2

首先,您要求的是 HA 场景——应用程序升级期间的高可用性。您提供的步骤实际上看起来不错。看来你已经花了很多心思了。但关键是如何进行第 5 步和第 6 步。

我不知道是否有任何 Web 服务器能够满足您的要求,但 F5 之类的负载均衡器应该可以解决问题。在负载均衡器中,您可以配置一个服务器池。假设一开始池中只有一台服务器(服务器 1)为请求提供服务。然后将服务器 2 添加到池中。服务器 2 应与升级应用程序一起部署。然后您指示负载均衡器不要向服务器 1 发送新请求,而是与所有现有用户保持连接。所有新请求都转到服务器 2。在服务器 1 上完成所有旧会话后,将其从池中取出。

于 2013-03-01T22:29:25.077 回答