azure - 如何防止 azure 在其他实例准备就绪之前向外扩展?

标签 azure azure-web-app-service azure-app-service-plans

我们在使用 Azure 应用程序服务时遇到问题。我们的 Web 服务 (MVC) 之一会在启动 (Application_Start) 时缓存数据库中的数据 - 这大约需要 3 分钟。在这一切准备就绪之前,我们无法处理请求。

这是已知的,因此我们将其设置为“始终开启”,并且目标是仅在必要时在非高峰时段重新启动它。

但是,我们预计下个月服务器负载会很重,并且在我们的自动扩展测试中,我们发现当它添加额外的实例时,每个实例都会经历相同的启动延迟 - 但流量是当前正在运行的实例和正在预热的新实例之间的划分,例如一半的请求在这 3 分钟内开始失败。

我们如何配置 Azure 延迟使用新实例,直到它准备就绪? (或者我们应该使用 AWS 等代替?)。

一些文档指出使用自定义负载均衡器探针,但它主要讨论虚拟机,而我们使用的是 PAAS。

最佳答案

请尝试减少需要在 app_start 上加载的数据,并尝试在第一次请求时将数据延迟加载到缓存中。有时,即使在完成所有这些之后,我们最终还是会得到启动时所需的大量数据。

我们可以通过两种方法来解决这个问题。

一,假设您正在使用内存缓存,并且应用程序的每个实例都需要在 App_Start 上补充其内存缓存。尝试使用外部缓存提供程序,例如 Azure Cache for Redis ,您的新实例只需指向此外部缓存,而无需重新加载数据。

两个,你可以信赖Application Initialization Module它是在 IIS 7.5 中引入的(安装在 Azure 应用服务的 IIS 上)。要使用此功能,您需要在 web.config 的 web.server 部分下添加 applicationInitialization 部分。这将帮助您在预热过程完成之前不使实例可用。有关如何使用 ApplicationInitialization 的更多信息,请参阅 this blog post

最好的情况是结合使用两者,applicationInitialization将指向应用程序中的一个页面,该页面检查外部缓存是否可用并水合,如果是,则完成,否则水合外部缓存。

关于azure - 如何防止 azure 在其他实例准备就绪之前向外扩展?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47025021/

相关文章:

linux - Azure Linux VM 的 SSH 超时

Azure 自定义域名

Azure网站无法访问Azure DB

azure-web-app-service - 天蓝色 : Cannot Delete Subnet of App Service VNet Integration Preview

api - Azure 应用服务、本地域和 VPN 隧道

.net - Kubernetes .NET 应用程序 SocketExceptionFactory + ExtendedSocketException

azure - 从 azure 调度程序在本地运行 exe 文件?

azure - Azure 通知中心是否可以在一个请求中同时在 SANDBOX 和 Production 中发送推送通知?

azure - 将自定义域添加到 Azure Web 应用程序而不进行验证

azure - 如何在适用于 Linux 的 azure web 应用程序中自定义默认错误页面?