2017-09-01 69 views
0

我有一些非常重的報告。當一個給定的實例開始處理它時,它將很容易消耗兩個核心中的一個的100%,我的實例有...如果該實例得到其中的2個,肯定會導致實例無法處理任何其他請求爲aprox 1分鐘...Azure負載平衡是否知道服務器http隊列

我確實有其他實例運行(通常爲4-6)。負載平衡器會選擇實例A是否堵塞的事實,並且在負載下它不應該向它發送請求?否,負載均衡器均勻分配請求?

回答

1

Azure負載均衡器是一個TCP基於UDP流的負載均衡器,不會處理應用層流量的TCP &。負載平衡決策是根據新的流程做出的。 Load Balancer使用散列函數來確定新流量的分佈。分佈模式管理計算散列時所考慮的內容。

應用程序客戶端的握手直接與虛擬機相關。 Load Balancer不知道您的HTTP請求,並且不會對它們排隊。您需要查看應用程序層Load Balancer以進行此類處理,例如Azure Application Gateway。這是否能解決你的情況對我而言並不明確;根本問題似乎是,當實例繁忙時,您不希望有流量到達。

也就是說,您可以使用探測狀態作爲向Load Balancer發送信號的方式,表示您不希望收到更多流量。您可以使用HTTP探測配置,並通過響應HTTP 200以外的其他信息來讓應用程序發出探測失敗,並且Load Balancer將停止向其發送新流。現有流量負載平衡的實例沒有終止,並將繼續。您無法使用探針來發現虛擬機的負載; Load Balancer無法看到虛擬機的負載。

1

您可以在負載平衡器上設置幾種分配模式,請參閱Configure the distribution mode for load balancer

從該鏈接可以看出系統具有一定程度的粘性,稱爲5元組算法,因爲它使用5個屬性:源IP,源端口,目標IP,目標端口,協議類型。

可以手動切換到使用Powershell命令Set-AzureLoadBalancedEndpoint ... -LoadBalancerDistribution [opt]

在門戶相信這設置由「會話持久性」屬性的「負載平衡規則」一節中受控2-或3-元組模式,但是這些選項並不像在PowerShell中可以實現的那樣精細。

這不是一個真正的循環模型,正如你所看到的。

您可以通過原始TCP(可連接端口)或HTTP(可以從Web服務器獲得響應)來設置探測以檢查活動端點,因此在您的情況下,最好的辦法是依靠HTTP探測器可以檢測到您的端點沒有足夠快地響應,並相應地路由流量。

它絕對不「知道」服務器上的任何HTTP隊列 - 不要忘記負載平衡器不一定會路由HTTP通信,並且您可能會使用各種各樣的Web服務器。在所有可能的情況下,NLB提供的可見性水平將非常困難。

+0

是否適用於Web應用程序或僅顯式創建負載平衡器? – Leonardo

+0

我在這裏談論的是獨立的Azure NLB;而不是Azure內部用於在App Services實例之間路由流量的NLB。有關App Service實例之間的負載分佈的文檔很少,但期望它使用相同的基本原則是合理的。 –

+0

FWIW @chkuhtz_msft在他的回答中是正確的,我提到的屬性實際上最終是一個散列,允許NLB確定'合適'的端點。 Azure應用程序網關看起來基於IIS ARR(應用程序請求路由)模塊鬆散。 ARR只能在「計算哈希」或「加權循環」基礎上路由。它不會根據節點性能監視來源和路由的滯後。 –