【问题标题】:Azure ASP.NET Warm Up and Deployment SlotAzure ASP.NET 预热和部署槽
【发布时间】:2017-01-19 14:07:13
【问题描述】:

我正在使用 ASP.NET MVC 5 和 Azure Premium 应用服务,并将 AlwaysRunning 选项设置为“开启”。

我为 Web 应用程序创建了一个部署槽,部署了我的新版本,打开了槽 URL,一切都又快又稳定。我切换到生产环境,切换操作完成后,Web 应用程序很慢,就像我手动部署到 PROD 一样。我不得不等待超过一分钟才能让我的应用程序再次运行。根据我读到的内容,我认为应用程序会在交换后预热,但没有成功。

为什么换了这么慢?甚至像身份验证表单一样没有命中数据库的页面。

更新:切换到 V2 计划(SSD 存储)后,应用会在不到 2 分钟的时间内重新启动 :)

【问题讨论】:

  • 几年来,我们一直在使用与您相同的流程。我们以前使用这种方法的成功率接近 100%。我们会部署到一个 pre-prod 插槽,对其进行预热,与生产交换,并且生产是温暖的。自去年年底以来,它很少再起作用了。我们已经尝试了几乎所有事情,并且几个月来一直在与微软撞墙,但他们向我们保证,他们最终没有改变。不用说它非常令人沮丧。我们也试过swap with preview,但结果不一致。有时有效,有时无效。
  • 它对我们来说工作正常,在我们交换后它运行良好。由于 SSD 存储,当我们切换到 V2 计划时,一切都变得更好了。我们不再使用 applicationInitialization 标签,因为我们的缓存在应用程序启动时被加载,即使没有人使用它。这是我们的部署过程:我们首先部署到 pre-prod 环境(部署槽),我们重新启动部署槽,一分钟后我们将其交换到 prod。一切都很好。
  • 非常感谢弗朗西斯科提供的信息。我们会试一试。

标签: asp.net-mvc azure warm-up azure-deployment-slots


【解决方案1】:

要在交换期间预热站点,您必须配置要命中的路由。你会在 web.config (link) 中需要这样的东西:

<system.webServer>
  <applicationInitialization >
    <add initializationPage="/warmup-cache" hostName="appinit-warmup.azurewebsites.net"/>
  </applicationInitialization>
</system.webServer>

该应用很可能会重新编译 Razor 视图,这就是它需要一段时间的原因。您可以预编译 Razor 视图,这将有很大帮助 (link)。还有一个像上面注册的预热路线,预先填充缓存会有所帮助。

【讨论】:

  • 感谢您的信息。我阅读了有关该配置的信息,但它说它是在交换完成后执行的。我需要立即在 PROD 中运行该应用程序。我还有一件事要尝试,那就是“与预览交换”。我认为该选项与initializationPage 相结合可以解决问题。关于编译视图,我不太喜欢这种方法,因为这样您就无法在 PROD 中更新一个视图,您需要替换 DLL。
  • 你最终有没有成功@FranciscoGoldenstein?请参阅我对您原帖的回复。
  • 我在上面回复了你的评论。
猜你喜欢
  • 2019-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多