我想我并不完全了解部署过程。这是我所知道的:
- 当我们需要进行热部署时——这意味着我们需要更改实时代码——我们可以通过重新加载模块来实现,但是
imp.reload
是个坏主意,我们应该重新启动应用程序而不是重新加载更改的模块- 理想情况下,运行代码应该是您的代码存储库的克隆,并且在您需要部署的任何时候,您只需拉取更改
现在,假设我有多个wsgi
应用程序实例在反向代理后面运行nginx
(在 8011、8012 等端口上)。而且,我们还假设我5
每秒收到请求。
现在在这种情况下,我应该如何在应用程序的所有运行实例中更新我的代码。
- 如果我停止所有实例,然后更新所有实例,然后重新启动它们——我肯定会丢失一些请求
- 如果我一个一个地更新每个实例——那么实例将处于不一致的状态(一些将运行旧代码,一些将运行新代码),直到所有实例都被更新。现在,如果一个请求命中一个更新的实例,然后一个后续(和相关的)请求命中一个较旧的实例(尚未更新)——那么我会得到错误的结果。
有人可以彻底解释像这样繁忙的应用程序是如何热部署的吗?