2010-08-02 51 views
2

3臺服務器從單一服務器轉換到負載均衡環境的任何建議?負載均衡環境中的Asp.net會話管理

我考慮過使用Sql Server會話管理,但我在存在序列化問題的會話中存儲linq2sql對象。通過快速搜索,我發現了一個workaround。但我懷疑使用這種方法考慮了代碼更改/可讀性/性能問題。歡迎任何建議。

+0

你爲什麼要在'session'中存儲linq2sql對象?首先,通常這應該保存在緩存中,其次,理想情況下,您不應該緩存linq2sql對象 - 要麼將它們投影到POCO中,要麼投影到通用集合中(例如List )。如果您擔心序列化,那麼在中間框上使用ASP.NET狀態服務 - 將所有其他服務器指向該服務器(以便共享會話)。但當然如果這個盒子出現故障,請告訴任何當前會話。 – RPM1984 2010-08-02 23:32:50

+0

- 這些是用戶將其提交到數據庫之前的用戶/表單特定數據。- 所有對象的類型爲集合。這些對象之間的關係在層之間傳遞時仍然存在(序列化問題的原因) - 我認爲狀態服務也會進行序列化。可能是我錯了 – Syam 2010-08-02 23:43:39

+0

你是對的,它確實做了序列化,只是從經驗來看,我曾經在sql狀態中遇到過麻煩(會話過期無故)。 – RPM1984 2010-08-03 00:23:14

回答

3

只是一個建議:你不能在你的負載均衡器中使用粘性會話嗎?

+0

我使用inproc到現在。我不知道如何在asp.net中使用粘性會話。有沒有辦法訪問和修改負載均衡器中的會話? – Syam 2010-08-02 23:32:04

+0

@Syam,這必須在負載均衡器上進行配置。我們在三臺服務器的生產中使用它。大多數硬件和軟/硬件負載平衡器都可以做到這一點。請參閱http://en.wikipedia.org/wiki/Load_balancing_(computing)#Persistence – madaboutcode 2010-08-03 00:17:38

+0

我剛剛與網絡團隊確認了粘性會話。這解決了我的問題。非常感謝 – Syam 2010-08-03 18:36:55

2

我們使用memcached,但它聽起來像是你希望某些東西成爲你的應用程序的一個更關鍵的部分,而不僅僅是緩存,如果你將LINQ to SQL對象放在那裏(並且我btw同意你應該考慮退出RPM的業務...)

無論如何,this is a nice blog post,給你幾個選擇。因爲它是微軟提供的(這是一個asp.net應用程序),Velocity絕對是一個值得關注的東西,而且這些日子似乎正在變得越來越流行。

+0

我喜歡這個解決方案,但是我的問題似乎比這更簡單。 @LightX建議我爲這個問題使用粘性會話。非常感謝。正如我所提到的,我正在使用收集對象來存儲會話。這些表之間的關係是曾經造成序列化的痛苦 – Syam 2010-08-03 18:42:58