使用集群模式和 preload_app 的 Puma 零停机部署 - 新连接和当前连接会发生什么情况?
Puma zero downtime deployment with cluster mode and preload_app - what happens to new and current connections?
现在我已经成功设置了我的 puma 运行,通过分阶段重启(在 nginx 后面提供服务)实现了零停机部署。
它工作得很好,因为没有连接丢失,并且可以无缝使用新版本。
但是:现在我们将进程数设置为 CPU 数量 - 1,因此对于具有 32 个 CPU 的大型服务器,有 31 个 puma 进程,它们在分阶段重启期间一个接一个地重启。
这对我们来说确实需要很长时间(大约 15 分钟,因为每个进程大约需要 30 秒才能启动(是的,很多 gems,大系统))。
我看到集群模式也可以通过设置 preload_app!
用于快速部署 - 但我不明白部署期间发生了什么:
当前请求会被丢弃吗?是否有一个不接受新连接的小时间范围?我试图通过自述文件弄明白,但我不清楚到底发生了什么。
很高兴听到解释,谢谢!
好的,我自己测试过:新连接卡住,你必须等到你的工人完成加载。现有连接不会关闭。因此,对于零停机部署,您确实需要分阶段重启(缺点是如果您有很多工作人员,则需要很长时间)。
现在我已经成功设置了我的 puma 运行,通过分阶段重启(在 nginx 后面提供服务)实现了零停机部署。
它工作得很好,因为没有连接丢失,并且可以无缝使用新版本。
但是:现在我们将进程数设置为 CPU 数量 - 1,因此对于具有 32 个 CPU 的大型服务器,有 31 个 puma 进程,它们在分阶段重启期间一个接一个地重启。 这对我们来说确实需要很长时间(大约 15 分钟,因为每个进程大约需要 30 秒才能启动(是的,很多 gems,大系统))。
我看到集群模式也可以通过设置 preload_app!
用于快速部署 - 但我不明白部署期间发生了什么:
当前请求会被丢弃吗?是否有一个不接受新连接的小时间范围?我试图通过自述文件弄明白,但我不清楚到底发生了什么。
很高兴听到解释,谢谢!
好的,我自己测试过:新连接卡住,你必须等到你的工人完成加载。现有连接不会关闭。因此,对于零停机部署,您确实需要分阶段重启(缺点是如果您有很多工作人员,则需要很长时间)。