簡體   English   中英

使用負載均衡器的ASP.NET應用程序生命周期

[英]ASP.NET Application Life Cycle using Load Balancer

當負載均衡器分配另一台計算機來處理請求時,將觸發什么事件。

假設客戶端A首次請求page1,負載均衡器將Server1分配給該請求。 整個應用程序/頁面生命周期將被執行。

現在,如果客戶端A發送另一個請求以獲取page2,但是這次,如果負載平衡器將Server2分配給該請求,則是否將執行整個應用程序/頁面生命周期。 如果不是,那么在這種情況下將觸發哪些事件。

轉到更具體的問題:-它會再次執行session_start嗎?

編輯:很抱歉忘記提及我正在使用Azure,並且沒有控制權來設置/更改平衡器的配置。 此外,我們的管理員不會這樣做。 我們在應用程序開發方面。

另請注意:我們不允許使用了PROC會話。 因此不能使用sql azure來管理會話。

這些話來自微軟自己:

Microsoft不會在Azure上發布負載平衡算法, 也不能保證它將是循環式的 在內部,我們知道這不像循環賽那么簡單。 在制定最合適的資源將您的請求定向到時,需要考慮多個因素。 例如,如果機器具有滿足此請求的能力,則應考慮網絡鄰近性,因此根據服務的位置,您可能會在算法中看到一些偏差。 算法中包含一些內部優化,以利用內部結構,網絡性能和可用容量,負載均衡器(軟件/硬件)的類型等知識。負載均衡算法的目標是將您的請求路由到以下位置的可用資源:最有效的方式。 產品團隊稱其為“大致循環”算法。

唯一記錄的負載平衡算法在Traffic Manager上 ,可用於控制用戶流量分配。

Windows Azure使用Round Robin負載平衡方案,因此進程內會話在Windows Azure(尤其是雲服務)中是“不行的”。 在上面提到的場景中,當客戶端請求從“服務器2”獲得服務的“ page2”時,就會觸發session_start事件。

您可能想研究Windows Azure中的Windows Azure緩存功能,並將其用作進程內會話管理的替代方法。 實際上,有一個使用此緩存的自定義會話狀態提供程序: http : //msdn.microsoft.com/zh-cn/library/windowsazure/gg185668.aspx

如前所述,為了在Webfarms中共享會話,必須在所有服務器之間共享計算機密鑰http://msdn.microsoft.com/zh-cn/library/ff649308.aspx#paght000007_webfarmdeploymentconsiderations默認的Asp.net會話,進入proc不會帶來很大的可擴展性(直到您不轉到sql會話為止),但是可以很容易地將其更改為proc之外,從而導致該會話獨立於您的應用並解決了擁有多個會話的問題服務器http://msdn.microsoft.com/zh-cn/library/ms972429.aspx

如果您需要擴展並花一些錢,請考慮使用StateServer會話(進程外)或類似Memcached的東西。

就是說,無論服務器場中有多少服務器,asp.net生命周期總是始終按請求完全執行。 但是,asp.net會話的工作方式保持不變(session_start將始終在每個會話中觸發一次),其配置(sql,stateserver等)的變化是什么。 看一下這篇文章 ,這里有一些有用的信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM