2011-09-28 44 views
8

ASP.Net如何處理負載平衡環境中的會話數據? 假設用戶在瀏覽幾頁時發出多個請求? 是否所有請求都轉到負載均衡器中的相同服務器?ASP.Net - 在負載平衡環境中處理會話數據?

如果他們不都指向同一臺服務器,我該怎麼辦?我如何處理會話數據?

回答

4

您需要確保您的NLB能夠啓用「粘滯」會話。

如果這不是一個選項,那麼您需要查看使用ASP.Net Session Modes來配置會話服務器或一些後備存儲如SQL Server。

1

一般來說,大多數負載均衡器都試圖建立持久連接,但出於您的目的,您無法保證這一點。您最好使用諸如SQL後端之類的東西來維護狀態或創建一個單獨的類來管理會話數據。無論哪種情況,您都可以重新構建會話數據,如果它恰好爲空,那麼您預期會發生這種情況。我傾向於使用getters來檢查null並在必要時重建。在實踐中,我沒有做任何指標來看看它被重建的頻率,但我猜並不是很頻繁。就像他們所說的那樣,寧可安全也不要抱歉。

1

負載平衡器通常可以配置一些基礎設施的人稱爲sticky sessionsticky bit。在這種類型的環境中,一旦請求被分配給服務器,它在整個會話期間與該服務器保持一致。

當Load Balancers沒有以這種方式配置時,ASP.NET提供了多個會話狀態提供程序。一個非常流行的是SQL Server State Provider,它允許會話信息存儲在數據庫中。爲了使其工作,放置在Session對象中的所有對象都必須是Serializable,以便它們可以存儲在一個表中。

正如我所說,還有更多的選擇;例如,有些人更喜歡使用不同的方法,如memcached或類似的產品。

1

您可以從Windows或其他產品(例如BIG-IP F5,HA代理)使用NLB,這裏有很多選項。

使用Out-of-Proc(狀態服務器)並確保您的機器密鑰設置在所有服務器上都相同。還要確保您在共享磁盤驅動器(如NAS)上執行IO操作。

以下是一些鏈接,提供更多提示: Load Balancing and ASP.NET

相關問題