簡體   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