我们在使用 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/