繁体   English   中英

如何在 Azure App Service 中实现真正的零停机部署

[英]How to achieve true zero downtime deployment in Azure App Service

我在 Azure 应用服务上部署了一些容器。 为了实现零停机,Azure 建议使用部署槽并交换暂存槽和生产槽。 这对于普通的 web 应用程序来说很好,但是如果我有一个 web 应用程序,我还可以在其中执行其他操作,例如从队列中读取消息、在后台运行工作人员等。

如何确保容器以优雅的方式终止。 Do Azure 向 docker 容器发送某种信号,表明它正在终止应用程序,所以我们应该进行清理。 如果不是,我怎样才能让我的应用真正实现零停机时间部署在应用服务中?

但我有一个 web 应用程序,我还在其中做其他事情,比如从队列中读取消息,在后台运行工作人员等。

这种设计将使您很难进行零停机升级。 我建议拆分不同的用途,并将它们部署在可以通过不同方式升级的不同 azure 资源上:

  1. 您的 web 应用程序在Azure 应用程序服务上运行,使用部署槽进行蓝/绿升级
  2. 工作进程和队列处理都可以由Azure 函数完成,它们有自己的部署槽版本,用于零停机升级
  • 与其手动清理,不如告诉 Docker 在容器退出时自动清理容器并移除文件系统。 您可以通过添加–rm 标志来执行此操作,以便在该过程完成后自动删除容器数据。 请注意, –rm 标志将使 Docker 在容器关闭后将其删除。

  • 要停止容器,请使用 docker 停止命令并传递容器的名称和容器被杀死之前的秒数。 该命令在杀死之前将等待的默认秒数是 10 秒。

如何确保容器以优雅的方式终止。

您可以使用许多不同的 Docker 命令来停止正在运行的容器。

  • docker 停止
  • docker 杀
  • docker rm -f
  • 处理信号

如何使我的应用真正实现零停机时间部署在应用服务中

  • 在 Azure 应用服务上启用零停机时间部署的基本机制是通过部署槽进行蓝绿部署。
  • 这通过设置一个暂存槽,将新版本的服务部署到暂存槽,让它预热,所以它准备好了,然后将它与生产槽交换。

请参考Gracefully Stopping Docker Containers and Zero-downtime deployment with deployment slots in Azure

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM