繁体   English   中英

Azure中的Applicatoin_Start,Init和水平缩放

[英]Applicatoin_Start, Init, and horizontal scaling in Azure

关于Azure中的水平扩展,术语尚不清楚。

当它创建一个应用程序的多个实例时,我知道它们在单独的VM中运行,因此,当发生这种水平扩展时,这将导致创建带有自己的静态变量集的全新AppDomain。

如果是这样,那么是否为每个实例调用Application_Start事件是否正确?

我们具有“缓存刷新”功能,该功能涉及设置侦听器以订阅消息队列中的“主题”,以便在接收到消息时刷新静态缓存。 我们曾经认为我们必须在HttpApplication.Init事件中设置侦听器,该事件将为每个实例调用,但在意识到AppDomain中的所有HttpApplication实例共享同一组静态变量后,这不再有意义。

我的新理解是,即使没有水平扩展,Web应用程序中也会出现多个HttpApplication实例(因此会多次调用HttpApplication.Init)。 换句话说,这是asp.net Web应用程序如何即使在单个AppDomain中也处理请求的正常功能。 Azure的水平扩展完全不同,涉及实例化完全独立的AppDomain。 听起来对吗?

根据您的描述,首先,我们需要了解以下两点:

  1. 仅在创建第一个HttpApplication对象并且随后创建的后续HttpApplication实例不会触发此事件之后,才会调用Application_Start

  2. 每个HttpApplication实例将创建一组新的HttpModule并在创建后调用Init方法。

我们可以检查原始代码以了解如何创建HttpApplication

在此处输入图片说明

我们可以在System.Web.HttpApplicationFactory.GetNormalApplicationInstance找到以上代码

因此,在单一的AppDomain中,如果没有足够的实例HttpApplication当并发访问时,新HttpApplication将创建实例和HttpApplication.Init每个实例创建后就会被调用。 但是Application_Start仅在创建第一个HttpApplication实例之后被调用一次。

根据上面的描述,我认为您应该在Application_Start事件中设置侦听器。 当发生水平缩放时,每次创建新的AppDomain后都会调用Application_Start

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM