負(fù)載主機(jī)可以提供很多種負(fù)載均衡方法沮明,也就是我們常說的調(diào)度方法或算法
輪循
Round Robin: 這種方法會將收到的請求循環(huán)分配到服務(wù)器集群中的每臺機(jī)器带污,即有效服務(wù)器。如果使用這種方式褒翰,所有的標(biāo)記進(jìn)入虛擬服務(wù)的服務(wù)器應(yīng)該有相近的資源容量 以及負(fù)載形同的應(yīng)用程序代乃。如果所有的服務(wù)器有相同或者相近的性能那么選擇這種方式會使服務(wù)器負(fù)載形同〈笾荩基于這個前提续语,輪循調(diào)度是一個簡單而有效的分配請求 的方式球榆。然而對于服務(wù)器不同的情況诀姚,選擇這種方式就意味著能力比較弱的服務(wù)器也會在下一輪循環(huán)中接受輪循,即使這個服務(wù)器已經(jīng)不能再處理當(dāng)前這個請求了员咽。 這可能導(dǎo)致能力較弱的服務(wù)器超載。
加權(quán)輪循
Weighted Round Robin: 這種算法解決了簡單輪循調(diào)度算法的缺點(diǎn):傳入的請求按順序被分配到集群中服務(wù)器力试,但是會考慮提前為每臺服務(wù)器分配的權(quán)重徙邻。管理員只是簡單的通過服務(wù) 器的處理能力來定義各臺服務(wù)器的權(quán)重。例如畸裳,能力最強(qiáng)的服務(wù)器 A 給的權(quán)重是 100缰犁,同時能力最低的服務(wù)器給的權(quán)重是 50。這意味著在服務(wù)器 B 接收到第一個 請求之前前怖糊,服務(wù)器 A 會連續(xù)的接受到 2 個請求帅容,以此類推。
最少連接數(shù)
Least Connection: 以上兩種方法都沒有考慮的是系統(tǒng)不能識別在給定的時間里保持了多少連接伍伤。因此可能發(fā)生并徘,服務(wù)器 B 服務(wù)器收到的連接比服務(wù)器 A 少但是它已經(jīng)超載,因為 服務(wù)器 B 上的用戶打開連接持續(xù)的時間更長扰魂。這就是說連接數(shù)即服務(wù)器的負(fù)載是累加的麦乞。這種潛在的問題可以通過 “最少連接數(shù)” 算法來避免:傳入的請求是根據(jù)每 臺服務(wù)器當(dāng)前所打開的連接數(shù)來分配的。即活躍連接數(shù)最少的服務(wù)器會自動接收下一個傳入的請求劝评。接本上和簡單輪詢的原則相同:所有擁有虛擬服務(wù)的服務(wù)器資源 容量應(yīng)該相近姐直。值得注意的是,在流量率低的配置環(huán)境中蒋畜,各服務(wù)器的流量并不是相同的声畏,會優(yōu)先考慮第一臺服務(wù)器。這是因為百侧,如果所有的服務(wù)器是相同的砰识,那么 第一個服務(wù)器優(yōu)先,直到第一臺服務(wù)器有連續(xù)的活躍流量佣渴,否則總是會優(yōu)先選擇第一臺服務(wù)器。
最少連接數(shù)慢啟動時間
Least Connection Slow Start Time: 對最少連接數(shù)和帶權(quán)重的最小連接數(shù)調(diào)度方法來說初斑,當(dāng)一個服務(wù)器剛加入線上環(huán)境是辛润,可以為其配置一個時間段,在這段時間內(nèi)連接數(shù)是有限制的而且是緩慢 增加的见秤。這為服務(wù)器提供了一個‘過渡時間’以保證這個服務(wù)器不會因為剛啟動后因為分配的連接數(shù)過多而超載砂竖。這個值在 L7 配置界面設(shè)置。
加權(quán)最少連接
Weighted Least Connection: 如果服務(wù)器的資源容量各不相同鹃答,那么 “加權(quán)最少連接” 方法更合適:由管理員根據(jù)服務(wù)器情況定制的權(quán)重所決定的活躍連接數(shù)一般提供了一種對服務(wù)器非常 平衡的利用乎澄,因為他它借鑒了最少連接和權(quán)重兩者的優(yōu)勢。通常测摔,這是一個非常公平的分配方式置济,因為它使用了連接數(shù)和服務(wù)器權(quán)重比例解恰;集群中比例最低的服務(wù)器 自動接收下一個請求。但是請注意浙于,在低流量情況中使用這種方法時护盈,請參考 “最小連接數(shù)” 方法中的注意事項。
基于代理的自適應(yīng)負(fù)載均衡
Agent Based Adaptive Balancing: 除了上述方法之外羞酗,負(fù)載主機(jī)包含一個自適用邏輯用來定時監(jiān)測服務(wù)器狀態(tài)和該服務(wù)器的權(quán)重腐宋。對于非常強(qiáng)大的 “基于代理的自適應(yīng)負(fù)載均衡” 方法來說,負(fù) 載主機(jī)以這種方式來定時檢測所有服務(wù)器負(fù)載情況:每臺服務(wù)器都必須提供一個包含文件檀轨,這個文件包含一個 0~99 的數(shù)字用來標(biāo)明改服務(wù)器的實際負(fù)載情況 (0 = 空前胸竞,99 = 超載,101 = 失敗参萄,102 = 管理員禁用)卫枝,而服務(wù)器同構(gòu) http get 方法來獲取這個文件;同時對集群中服務(wù)器來說拧揽,以二進(jìn)制文件形式提供自身負(fù)載情況也是該服務(wù)器工作之一剃盾,然而,并沒有限制服務(wù)器如何計算自身的負(fù)載 情況淤袜。根據(jù)服務(wù)器整體負(fù)載情況痒谴,有兩種策略可以選擇:在常規(guī)的操作中,調(diào)度算法通過收集的服務(wù)器負(fù)載值和分配給該服務(wù)器的連接數(shù)的比例計算出一個權(quán)重比 例铡羡。因此积蔚,如果一個服務(wù)器負(fù)載過大,權(quán)重會通過系統(tǒng)透明的作重新調(diào)整烦周。和加權(quán)輪循調(diào)度方法一樣尽爆,不正確的分配可以被記錄下來使得可以有效的為不同服務(wù)器分 配不同的權(quán)重。然而读慎,在流量非常低的環(huán)境下漱贱,服務(wù)器報上來的負(fù)載值將不能建立一個有代表性的樣本;那么基于這些值來分配負(fù)載的話將導(dǎo)致失控以及指令震蕩夭委。 因此幅狮,在這種情況下更合理的做法是基于靜態(tài)的權(quán)重比來計算負(fù)載分配。當(dāng)所有服務(wù)器的負(fù)載低于管理員定義的下限時株灸,負(fù)載主機(jī)就會自動切換為加權(quán)輪循方式來分 配請求崇摄;如果負(fù)載大于管理員定義的下限,那么負(fù)載主機(jī)又會切換回自適應(yīng)方式慌烧。
固定權(quán)重
Fixed Weighted: 最高權(quán)重只有在其他服務(wù)器的權(quán)重值都很低時才使用逐抑。然而,如果最高權(quán)重的服務(wù)器下降屹蚊,則下一個最高優(yōu)先級的服務(wù)器將為客戶端服務(wù)厕氨。這種方式中每個真實服務(wù)器的權(quán)重需要基于服務(wù)器優(yōu)先級來配置进每。
加權(quán)響應(yīng)
Weighted Response: 流量的調(diào)度是通過加權(quán)輪循方式。加權(quán)輪循中所使用的權(quán)重是根據(jù)服務(wù)器有效性檢測的響應(yīng)時間來計算腐巢。每個有效性檢測都會被計時品追,用來標(biāo)記它響應(yīng)成功花 了多長時間。但是需要注意的是冯丙,這種方式假定服務(wù)器心跳檢測是基于機(jī)器的快慢肉瓦,但是這種假設(shè)也許不總是能夠成立。所有服務(wù)器在虛擬服務(wù)上的響應(yīng)時間的總和 加在一起胃惜,通過這個值來計算單個服務(wù)物理服務(wù)器的權(quán)重泞莉;這個權(quán)重值大約每 15 秒計算一次。
源 IP 哈希
Source IP Hash: 這種方式通過生成請求源 IP 的哈希值船殉,并通過這個哈希值來找到正確的真實服務(wù)器鲫趁。這意味著對于同一主機(jī)來說他對應(yīng)的服務(wù)器總是相同。使用這種方式利虫,你不需要保存任何源 IP挨厚。但是需要注意,這種方式可能導(dǎo)致服務(wù)器負(fù)載不平衡糠惫。