我将管道配置为对 Azure Functions 进行零停机时间部署。为此,我有以下步骤:
- 创建槽
- 部署到插槽
- 开始交换预览
- 完全交换
我对这个过程的理解是,所有重新启动都应该只发生在预览槽上(所以只有 JobHost 应该重新启动),这应该在最终交换之前占有一席之地。但是,我在 Application Insight 上注意到,当我点击函数时,Hosting stopped
这会导致代码出现问题。503
有没有办法避免这种情况?我不确定这是否重要,但我使用高级计划。
我将管道配置为对 Azure Functions 进行零停机时间部署。为此,我有以下步骤:
我对这个过程的理解是,所有重新启动都应该只发生在预览槽上(所以只有 JobHost 应该重新启动),这应该在最终交换之前占有一席之地。但是,我在 Application Insight 上注意到,当我点击函数时,Hosting stopped
这会导致代码出现问题。503
有没有办法避免这种情况?我不确定这是否重要,但我使用高级计划。
您无法避免重新启动,但如果您的功能需要,您可以使用自定义预热。
交换操作在与目标交换交换之前等待预热完成。您可以在一个web.config
文件中配置它,示例如下:
<system.webServer>
<applicationInitialization>
<add initializationPage="/" hostName="[app hostname]" />
<add initializationPage="/Home/About" hostName="[app hostname]" />
</applicationInitialization>
</system.webServer>
您还可以使用以下一项或两项应用程序设置自定义预热行为:
我能够实现零停机时间部署设置变量WEBSITE_ADD_SITENAME_BINDINGS_IN_APPHOST_CONFIG
为1
. 有关更多信息,您可以查看此处。其中一个缺点是部署期间处理请求的速度很慢。
我还建议关注这个 github issue where is discussion about zer/miniam downtime deployment。