gpt4 book ai didi

c# - 为什么交换插槽时 Azure 应用服务会重新启动?

转载 作者:太空狗 更新时间:2023-10-30 01:28:56 25 4
gpt4 key购买 nike

在生产中长期遇到此问题并阅读了我能找到的任何内容(例如 thisthisthat )后,我做了一个简单的测试。

  1. 创建一个空的 asp.net 网站
  2. 在 Application_Start 中,向您发送电子邮件或消息(我使用了 PushBullet),以便您知道应用何时启动
  3. 创建新的应用服务计划和资源组
  4. 在 Azure 上创建网站并发布
  5. 创建临时部署槽
  6. 交换舞台/制作
  7. 再次发布网站,以便两个广告位具有相同的网站版本

所以我有一个空网站,没有连接字符串,没有插槽设置: no change in both slots

当我点击交换时,我会收到插槽重新启动的通知(至少每个插槽一次)。

为什么会发生这种情况?

更新:

研究了 Mohit 的回答后,我需要更多说明。

  • 我们在 Application_Start 方法中发送通知,如果我理解正确的话,该方法是由 AppInit 事件触发的。

  • 我不明白你所解释的行为。该顺序对于确保不停机似乎非常重要,但您说不一定按照该顺序。为什么生产槽需要重启应用域?为什么用户会对网站关闭感到恼火(不应该)?

  • 什么是“新交换”功能?与“旧交换”有什么区别?对于我的测试,我只是使用门户进行交换。

  • 您提到“新交换”在交换之前暂停。我想这只是意味着它等待 applicationInitialization 完成(例如/上的 HTTP 200)?

  • 从昨天起我又做了一些测试。在 Application_Start 方法中,我添加了一些 Thread.Sleep 以使应用程序启动时间更长。然而,当我交换时,我发现登台或生产都没有停机。我不应该在登台时经历停机吗,至少在我的应用程序启动期间?这是否意味着预热然后与生产交换的插槽实际上是另一个既不是登台也不是生产的临时插槽?

最佳答案

我有非常类似的问题,应用程序在交换到生产槽后重新启动,这会导致不必要的停机。经过大量搜索,我发现了以下内容:

在某些情况下,交换后,生产槽中的 Web 应用程序可能会稍后重新启动,而应用程序所有者无需采取任何操作。当 Azure 应用服务的底层存储基础结构发生一些更改时,通常会发生这种情况。发生这种情况时,应用程序将同时在所有虚拟机上重新启动,这可能会导致冷启动和 HTTP 请求的高延迟。虽然您无法控制底层存储事件,但您可以最大程度地减少它们对生产槽中的应用程序的影响。在应用程序的每个插槽上设置此应用程序设置:

WEBSITE_ADD_SITENAME_BINDINGS_IN_APPHOST_CONFIG:将此设置为“1”将阻止在应用服务的存储基础架构重新配置时回收 Web 应用的工作进程和应用域。

您可以找到整个 Ruslany 帖子,我发现它非常有帮助 here

关于c# - 为什么交换插槽时 Azure 应用服务会重新启动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55479062/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com