gpt4 book ai didi

deployment - Heroku 部署流程到底是如何运作的?

转载 作者:行者123 更新时间:2023-12-01 16:53:26 25 4
gpt4 key购买 nike

当我将新版本的服务部署到 Heroku 时,到底会发生什么?

假设我现在有 N 个在线网络测功机,其中 M 个当前正在处理请求。

  • 在新版本上线之前,它们都会关闭吗?当前正在处理的任何待处理请求会发生什么情况?
  • 有停机时间吗? (假设我只有一个无状态服务,没有任何迁移)
  • 是否有用于执行自定义迁移(例如迁移数据库表)的 Hook ?
  • 我可以启动 N 个运行新版本的服务器,让它们开始为请求提供服务,并在之前的 N 个服务器不再为任何请求提供服务时关闭它们吗?
  • 答案是否取决于堆栈/语言? (白杨/竹子/雪松,Ruby/Node.js/Java/...)

我没有任何关于此的官方文档,只是相反的帖子(有些说热 migrations are not possible ,而 others say there is no downtime )。有关于部署过程和上述问题的官方详细信息吗?

最佳答案

以下是 Heroku 部署期间发生的情况(截至 2011 年 10 月 20 日*)[1]:

  • Heroku 收到您的 git 推送
  • 新版本是根据您的应用的最新版本编译并存储的
  • [这些几乎同时发生]
    • dyno 网格收到信号以终止[2]您的应用的所有正在运行的进程
    • dyno 网格收到信号,为您的应用启动新进程
    • dyno 网格收到信号以停止应用的所有空闲进程
    • HTTP 路由器收到信号,开始将 HTTP 流量路由到运行新版本的 Web dyno

一般要点是,为了最大限度地减少任何可能的停机时间,您应该最大限度地减少应用程序的启动时间。

通过遵循仔细的迁移实践,可以推送新代码,然后在应用运行时进行迁移。以下是 Rails 的示例:http://pedro.herokuapp.com/past/2011/7/13/rails_migrations_with_no_downtime/

为了最大程度地减少重新启动期间丢失的连接,请使用通过开始正常关闭(完成现有连接,不接受新连接)来适当响应 SIGTERM 的 Web 服务器。 thin 的较新版本将正确处理 SIGTERM。

  1. 这个主题是内部讨论较多的话题,可能会 future 的改变。
  2. SIGTERM 10 秒后紧接着 SIGKILL 如果仍在运行

关于deployment - Heroku 部署流程到底是如何运作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7837328/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com