2012-10-12 65 views
3

這裏的負載均衡部署網頁時避免無效的視圖狀態方案:無需停機

  1. 我們有3個Web服務器A,B,C
  2. 我們要釋放的應用程序的新版本而不會使應用程序停機
    (例如,不使用「停機維護頁面」)。
  3. 服務器A使用最新的代碼。
  4. 服務器B脫機。服務器B上的用戶會路由到A和C.
  5. Page1.aspx已更新爲新控件。從服務器B到服務器A的任何人,而在此頁面上的
    將在他們在此頁面上執行操作時收到視圖狀態錯誤。這是我們想要防止的。

你們怎麼解決這個問題?

這裏有一些想法,我們有(無論是可能的,或者不使用我們的負載平衡器,我不知道......我不熟悉的負載平衡器配置[這是一個F5]):

的更幼稚的做法:

取下服務器A和B並更新。 C保留舊代碼。所有的流量將被定向到C,這是可以的,因爲它是舊代碼。當A和B接受更新時,如果可能的話,告訴負載均衡器僅讓C上的主動會話的人員保持活動狀態,並且所有新的會話都會在A和B上發起。這種方法的問題在於,理論上會話可以堅持很長一段時間,如果用戶繼續使用該應用程序。

越少幼稚的做法:

類似於幼稚的做法,但(如果可能的話)我們要談的「安全」頁面,這是沒有改變的頁面負載平衡器。當用戶最終進入「安全」頁面時,他或她將被路由到服務器A或B.理論上,用戶可能永遠不會登陸其中一個頁面,但這種方法風險較小(但需要更多工作)。

回答

3

我假設您的負載平衡器正在將各個用戶重定向到正常操作期間Web場中的同一臺服務器,這就是您通常不會遇到此問題的原因,但只有在您開始在服務器之間重定向用戶時纔是如此。

如果這個假設是正確的,那麼很可能是整個服務器場中的機器鍵不一致。

ViewState對服務器的機器密鑰進行散列處理,以防止客戶端用戶篡改。機器密鑰由IIS自動生成,並且每次服務器重新啓動或重置時都會更改,並且每臺服務器都是唯一的。

爲了確保用戶在服務器之間移動時不會遇到視圖狀態驗證問題,有兩種可能的操作方法。

  1. 禁用個人網頁上或在全球範圍內使用enableViewStateMac用假屬性值的web.config文件的頁面元素的防篡改保護。我純粹爲了完整而提到這一點 - 您應該在生產網站上從不這樣做。

  2. 手動生成機器密鑰並在每個應用程序間共享相同的值(對於所有應用程序,您可以使用相同的密鑰,但在每個應用程序中使用一個密鑰以最大限度地提高安全性是明智的) 。要做到這一點,你需要生成密鑰(做而不是使用任何你可能看到在互聯網上的演示,這打破了唯一的機器密鑰的目的),這可以通過編程或在IIS管理器中完成(見http://www.codeproject.com/Articles/221889/How-to-Generate-Machine-Key-in-IIS7)。將網站部署到所有服務器時使用相同的機器密鑰。

我無法回答升級需要100%正常運行時間的應用程序的最佳做法。

相關問題