azure - Azure Linux Web 应用程序上交换插槽速度缓慢

标签 azure azure-devops azure-web-app-service azure-pipelines

我已在 Azure DevOps 中设置了一个部署管道,它将 .NET 5 Web API 部署到 Azure Linux Web 应用部署槽。部署完成后,它将部署槽与生产槽交换。

交换按其应有的方式工作,但速度相当慢 - 交换大约需要 5 分钟。看起来预热很快,但占用时间的却是交换。

我的管道 yaml 任务如下所示:

- task: AzureWebApp@1
  displayName: "Deploy My webapp"
  inputs:
     azureSubscription: <azureSubscriptionName>
     appType: 'webAppLinux'        
     deployToSlotOrASE: true           
     appName: 'my-web-app'                    
     slotName: 'my-web-app-slot'
     package: '$(PIPELINE.WORKSPACE)/MyWebApp/MyWebApp.zip'

 - task: AzureAppServiceManage@0
   inputs:
     azureSubscription: <AzureSubscriptionName>
     Action: 'Swap Slots'
     WebAppName: 'my-web-app'
     ResourceGroupName: 'MyResourceGroup'
     SourceSlot: 'my-web-app-slot'

在执行Swap Slots任务时查看管道的日志,执行了以下“任务”:

  1. 热身时段
  2. 交换应用服务“my-web-app”插槽 -“my-web-app-slot”和“生产”

热身时段几乎是即时的。它执行三次 GET 请求,其中第三次请求返回应用服务状态代码:“302”。状态消息:“找到” 表示插槽确实已启动/已预热。

交换应用程序服务“my-web-app”插槽 -“my-web-app-slot”和“生产” 是所有时间都被使用的地方。我首先向 URL 发送 POST 请求:https://management.azure.com/subscriptions/mysubscription/resouceGroups/myresourcegroup/providers/Microsoft.Web/sites/my-web -app/slots/my-web-app-slot/slotsswap?api-version=2016-08-01

POST之后,它开始对URL执行GET请求:https://management.azure.com/subscriptions/mysubscription/resouceGroups/myresourcegroup/providers/Microsoft.Web/sites/my-web-app/slots/my-web-app-slot/operationresults/some-guid?api-version=2016-08-01 ==> undefined 返回状态代码202

从上述 GET 请求中获取 202 后 4 - 5 分钟,最终收到 200 http 响应,交换完成。

问题是:在交换期间,GET 请求不断返回 202 http 状态代码,到底发生了什么?还有:有什么方法可以加快这个过程吗?

提前非常感谢。

最佳答案

谢谢@dixitarora-msft ,您需要根据状态代码进行交换,方法是在应用设置中添加 WEBSITE_SWAP_WARMUP_PING_PATHWEBSITE_SWAP_WARMUP_PING_STATUSES

交换操作期间,暂存槽中的站点通过向以下位置发出 HTTP 请求来预热:它的根目录。引用这里How to warm up Azure Web App during deployment slots swap .

默认情况下,一旦网站响应任何状态代码交换就会继续。如果应用程序无法预热交换无法继续,那么您可以使用以下应用程序设置进行配置:

WEBSITE_SWAP_WARMUP_PING_PATH:发出预热请求的路径。将其设置为以斜线开头的 URL 路径作为值。例如,“/warmup.php”。默认值为/。

WEBSITE_SWAP_WARMUP_PING_STATUSES:预热操作的预期 HTTP 响应代码。将其设置为以逗号分隔的 HTTP 状态代码列表。例如:“200,202”。如果返回的状态码不在列表中,则交换操作将无法完成。默认情况下,所有响应代码均有效。

引用here

关于azure - Azure Linux Web 应用程序上交换插槽速度缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69802490/

相关文章:

azure - 使用 Rest API 从 LogAnalytics Workspace 获取日志数据

azure - 将 Azure Application Insights 数据发送到事件中心

Azure http 日志解释

azure - 从 Windows Azure 管理门户停止辅助角色实例

azure - 身份和访问工具。未在 vs2012 菜单中列出

c# - Azure Pipeline 在 dotnet 构建中失败,需要升级到最新的 .net core 版本

azure - 无法在 Azure devops 中找到 powerplatform

在阶段之间传播期间第二次访问时,Azure Pipeline 变量值会丢失

azure - 如何重写通过 Azure blob 和 CDN 托管的静态站点的 URL?

azure - ABCpdf .NET 与 Azure 应用服务