4

我们的生产在 LB+TOMCAT 上运行,我们使用自己定制的 SAFE-DEPLOY 工具将更改部署到生产中。由于我们的系统致力于提供 24/7 可用性,该工具部署更改如下

用于特定服务的总服务器分为几组。让我们假设它分为 2 组,他们停止一组,部署更改并启动该组。第一个组完成后,他们将更改部署到另一个组。在大多数情况下,它运行良好,没有任何问题。

问题是由特殊情况引起的。一个服务生成一个令牌,客户端将其作为凭证,现在我们更改了令牌的格式,如果我们使用相同的部署方法,应该有一些潜在的问题。即 group1 停止并部署新代码然后重新启动(没关系),group2 停止(准备部署新代码),现在group2部署时可能会发生错误,因为在此期间group1可能会收到group2生成的旧格式令牌(1.group1部署时,group2运行旧代码,2.group2停止不能处理请求),客户端收到一个错误,表明令牌错误,但它不是真正的错误令牌。

我有一个解决方案是,让我们的代码既可以处理新格式令牌又可以处理旧格式令牌,但只生成新格式令牌,运行 1 天后,我们可以做一个只处理新格式令牌的部署。我想它工作得很好,但这不是恩典。

我的问题是,是否有任何优雅部署方法使服务器可以处理已生成的旧格式令牌和新格式令牌,而无需更改任何代码。

顺便说一句:我在 tomcat 上找到了一个参考,最佳实践热部署,它只适用于 tomcat 7,我们的工作 tomcat 是 6.0.26。

4

1 回答 1

0

是的,可能还有第二种方法。首先,您在 loadbalancern (apache + mod_jk) 上激活粘性会话。这意味着客户端始终与同一台服务器连接。其次,您禁用(而不是停止)工作人员(服务器)。只有现有的会话将被提供,没有新的会话。如果工作人员不再有打开的会话,您将停止工作人员,更新工作人员并在 LB 上启用工作人员。就是这样,但我建议你的方式。

于 2012-11-17T17:54:48.040 回答