问题描述
我将管道配置为对Azure功能进行零停机时间部署。为此,我需要执行以下步骤:
- 创建广告位
- 部署到插槽
- 开始与预览交换
- 完全交换
我对这个过程的理解是,所有重新启动都应仅在预览插槽上进行(因此,仅JobHost应该重新启动),并且在最终交换之前应该有一个位置。但是,我在Application Insight上注意到Hosting stopped
导致在我点击函数时生成503
代码。有没有避免的方法?我不确定是否重要,但我使用的是高级计划。
解决方法
您无法避免重新启动,但是如果您的功能需要,可以使用自定义warm-up。
交换操作等待热身完成,然后再与目标交换进行交换。您可以在web.config
文件中进行配置,例如以下示例:
<system.webServer>
<applicationInitialization>
<add initializationPage="/" hostName="[app hostname]" />
<add initializationPage="/Home/About" hostName="[app hostname]" />
</applicationInitialization>
</system.webServer>
您还可以使用以下一项或两项应用程序自定义预热行为:
- WEBSITE_SWAP_WARMUP_PING_PATH:ping以预热站点的路径。通过指定以斜杠开头的自定义路径作为值来添加此应用设置。一个示例是/ statuscheck。默认值为/。
- WEBSITE_SWAP_WARMUP_PING_STATUSES:用于预热操作的有效HTTP响应代码。使用逗号分隔的HTTP代码列表添加此应用设置。一个示例是200,202。如果返回的状态码不在列表中,则预热和交换操作将停止。默认情况下,所有响应代码均有效。
我能够实现将零停机时间部署设置变量WEBSITE_ADD_SITENAME_BINDINGS_IN_APPHOST_CONFIG
设置为1
。有关更多信息,请查看https://plotly.com/python/network-graphs/。令人毛骨悚然的是部署期间处理请求的速度很慢。
我还建议关注here,其中涉及有关zer /最小停机时间部署的讨论。