在将代码推送到生产环境时保持服务器网关处于活动状态



所以我最近遇到了这种情况,因为这种情况经常发生在我身上,不得不让办公室里的每个人都知道服务器会因为我将代码推送到生产环境而关闭,这有点烦人。 这通常只发生在热修复/错误修复期间。 我在网上搜索了这个问题,但关于如何做这样的事情并没有太多。 有没有办法在我将代码推送到生产环境时保持服务器网关正常运行,而不会中断服务?

我正在运行一个React应用程序,该应用程序使用托管在AWS EC2服务器上的express,这是我提取代码并重新启动应用程序的地方。 如果有帮助的话,我还使用NGINX作为我的服务器的网关。

我唯一能想到的是,如果有一种方法可以在我推送新代码时,服务器识别应用程序已中断并使用旧代码。 推送新代码后,它将识别出应用程序再次运行,而是使用新代码运行它,而不会中断服务。

这可能是一个非常模糊的描述,但希望有人理解我在这里想要得到什么。 如果有人有任何建议,我将不胜感激。 谢谢!

您通常需要运行服务器的多个实例,因此您可以配置路由器或负载均衡器,以便一个实例是主实例(接收所有传入请求),当另一个实例完成处理它正在处理的任何请求时,您可以停止并升级它,然后启动新升级的服务器,然后反向升级另一个实例的过程。

这两个实例可以始终运行,并且每个实例都为一些新请求提供服务,或者第二个实例只能在升级过程中使用。

下面是一个简化的序列:

  1. 创建已升级的服务器实例(在磁盘上的新目录位置)
  2. 启动该服务器
  3. 配置负载均衡器或路由器以将所有新的传入请求路由到新升级和启动的服务器实例
  4. 等到原始服务器实例完成处理完它正在处理的所有请求(此时它应该没有收到新的传入请求),然后将其关闭。
  5. 如果一次只保持一个服务器实例运行,请删除原始服务器实例的代码,以免意外再次使用它,因此仅使用新升级的实例。

最新更新