【问题标题】:Warming up Azure Web App after deploy (without using deployment slots)部署后预热 Azure Web App(不使用部署槽)
【发布时间】:2019-01-22 07:50:51
【问题描述】:

我们有许多 Azure Web 应用程序,我们会定期(每周几次)部署这些应用程序。部署是使用 Zip Push Deploy 方法 (https://docs.microsoft.com/en-us/azure/azure-functions/deployment-zip-push) 执行的,效果很好。

我们的问题是,直到向服务器发出第一个请求后,不同的 Web 应用程序才会正确启动,这意味着第一个用户会受到很大的性能损失。我们试图通过在部署完成后立即发出请求来解决此问题,但似乎我们经常使用旧版本的网络应用程序而不是预热新版本。

我知道我们可以使用部署槽及其预热功能,但由于许多原因,我们现在不能选择部署槽。

有什么方法可以让我们知道部署何时完成,这样我们就不会在新代码启动并运行之前触发预热调用(例如,使用 Powershell 脚本)?

目前我们使用类似于以下的 Powershell 查询来访问应用服务,但由于部署尚未完成,它们通常会很快返回:

# Warmup Azure service
$warmupUrl = "https://$appName.azurewebsites.net/"
Write-Output "Making request to $warmupUrl"
$stopwatch = [Diagnostics.Stopwatch]::StartNew()

Try {
  # Allow redirections on the warm up
  $response = Invoke-WebRequest -UseBasicParsing $warmupUrl - 
MaximumRedirection 10 -TimeoutSec 240
   $stopwatch.Stop()
   $statusCode = [int]$response.StatusCode
  Write-Output "$statusCode Warmed Up Site $TestUrl in 
$($stopwatch.ElapsedMilliseconds)s ms"
} catch {
    #$_.Exception|format-list -force
} Finally
{
     $stopwatch.Stop()
     Write-Output "Warmed Up Site $warmupUrl in 
 $($stopwatch.ElapsedMilliseconds)s ms"
}

【问题讨论】:

    标签: azure azure-web-app-service continuous-deployment azure-deployment


    【解决方案1】:

    您是否有机会使用 async zipdeploy 而不是等待它?如果你等待它,新的位应该很快就会生效。为了安全起见,请在部署后等待 10 秒(以允许传播文件更改通知),我不认为您会使用旧版本。

    【讨论】:

    • 嗨@david-ebbo。感谢您的答复。我们目前没有使用异步选项,我们的“hack”是您建议的,即等待几秒钟。我只是希望我可以使用一种不依赖固定等待期的方法。如果 Azure Web 应用在部署完成时支持某种通知,或者 Azure Web 应用可以在部署完成时执行脚本,那就太好了。
    • 当 zip 部署完成后,部署就真正完成了,因为所有文件都已复制到它们所属的位置。缺少的是 runtime 需要时间来对其做出反应,而这是不可预测的,尤其是在您有多个实例的情况下。
    • 很高兴能够知道运行时何时完成对更改的反应,但在可能之前(如果有的话),我们将使用大约 10 秒的超时。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    • 2018-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多