NLB 如何與 IIS-7 Web 服務一起工作?
我們將把 2(兩個)IIS7 Web 伺服器加入 NLB,並發布相同的 Web 服務(每個 Web 伺服器有 2 個相同的 Web 服務實例)。
- 我是否理解正確,NLB 將適用於我的 Web 服務,將 Web 請求委託給一個或另一個實例?
- 如果 Web 服務實例之一變得不可用(即開始拋出 SOAP 異常或 HTTP 錯誤),NLB 將如何工作?
- NLB 是否會考慮平均 Web 服務響應時間來決定委託處理的 Web 服務實例?
先感謝您!
簡而言之: NLB 不在乎。
NLB 依賴於查看所有傳入流量的所有節點,然後每個節點丟棄它不感興趣的任何流量。那是在應用程序甚至可以看到流量之前 - 它不是基於應用程序的執行狀況,不是基於響應時間,不是基於公平或排隊。
NLB 不會對您的應用程序視而不見。使用者模式問題是如此使用者模式!
只要網路堆棧能夠發送和接收 NLB 廣播(或多播!),NLB 就會繼續接受流量。
Longer: NLB真的不在乎。
NLB 作為第 2 層 NDIS 過濾器執行,並在所有傳入流量中簡單地執行其雜湊算法,並接受與其埠規則匹配的位。
每個節點都必須看到所有傳入流量(交換機的多播/廣播),並且每個節點都會丟棄不符合其雜湊標準的數據包。
NLB 是一個統計負載均衡器。不是一個關心的人。
- 您的應用程序拋出 500 次對它來說並不重要。
- 它沒有註意到您的使用者模式偵聽器程序已經崩潰。
- 它不知道您的應用程序執行緩慢。
它只是。沒有。關心。
NLB的最佳失敗情況是(其中之一):
- 盒子因電源故障而完全當機
- 要剪斷或拔出的網線
- (可能通過真空吸塵器)
- (或 NIC 在一陣火花中爆炸)
- (或被路過的小偷偷走)
- (或任何形式的物理網路中斷)
- 盒子藍屏
任何這些都會阻止網路堆棧處理傳入的數據包,並阻止發送*“我還活著!”* 將消息廣播到其他 NLB 節點,這會導致集群在一段時間(幾秒鐘)內進行自省,找出仍然存在的節點,然後重新收斂。
然後,當其餘節點清楚它們有多少時,它們將再次開始雜湊,並丟棄它們不感興趣的任何新數據包。
如果你需要
- 健康監測,
- 小心地將負載應用於未充分利用的伺服器,
- 和基於響應時間的智能決策
NLB 不是您的解決方案。如果您的應用程序對此沒問題,或者對 NLB 有足夠的了解以在應用程序層出現問題時執行 NLB STOP,那麼它可能沒問題。但很少有應用程序能做到這一點(ISA/TMG 浮現在腦海中)。
看起來我不久前在這裡寫過這個。
尋找其他地方 如果您正在尋找一種低成本(閱讀:免費)基於 Windows 的解決方案,請考慮適用於 IIS 7+ 的應用程序請求路由 - 它具有聽起來像您正在尋找的大部分健康監控功能。
通常,您不會在與應用程序相同的機器上執行它,但為了可用性,您通常希望在 ARR 下執行 NLB,以將負載均衡器的網路級可用性與應用程序層智能結合起來等級。