node.js - 生产后端服务器上的 CI/CD
问题描述
我正在开发一个应用程序,我希望能够快速迭代版本(修复错误和添加功能等),所以这样做的明显途径是开发 CI/CD 工作流。前端很简单,只需将我的服务器提供的资产换成新版本,当人们访问该站点时,这些资产就会被提供。但是,我不太确定如何更新由 express 和 node 提供支持的生产后端服务器。在开发中,我可以轻松地重新启动服务器以反映新的更改,但是在生产环境中这样做可能会对在更新时使用我的服务的人产生不利影响。
总的来说,我的问题是在不停机/中断使用的情况下将新的后端服务器更新推送到我的生产环境的最佳方法是什么?
解决方案
理想情况下,您需要运行某种进程集群。
这背后的第一步是确保您的应用程序是完全无状态的,并且您可以同时运行快速服务器的同时副本以实现负载平衡。
如果您确实需要维护某种形式的状态,您可以使用基于内存的存储(例如 Redis)在服务器实例之间共享状态。
一旦你有了这样的架构,你就可以引导和限制流量,使集群中的每个服务器实例都有机会重新启动,而没有流量指向它。
假设您有 4 个实例运行您的服务器。您将关闭实例 1,您的负载平衡会将您的流量发送到 2、3 和 4。
在此期间,您可以热重新加载或完全重新加载实例 1。然后重新打开实例 1 并使用 2、3 和 4 重复该过程。
这样的过程称为“滚动更新”
推荐阅读
- spark-ar-studio - 音频在 Spark-ar 中有效,但在 Instagram 中无效
- mysql - MySQL Group By 用于排序表
- php - 如何在laravel中使用与数组的关系
- javascript - 如何使我的搜索栏在聚焦时不会折叠?
- powershell - 查找两个文件的差异并附加到第一个文件 powershell
- c# - 如何在 .NET Core Web API 的 Dictionary 键中将枚举转换为 int
- javascript - 如何通过执行切片用地图重写推送?
- reactjs - 在类组件中反应 useEffect 等效项
- deep-learning - 是否可以在 FPGA 上训练 YOLO - 对象检测模型?
- javascript - next() 在 Express 4 上不起作用,错误 [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client