快來(lái)瞅瞅負(fù)載均衡調(diào)度算法
負(fù)載主機(jī)可以提供很多種負(fù)載均衡方法,也就是我們常說(shuō)的調(diào)度方法或算法:
輪循(Round Robin)
這種方法會(huì)將收到的請(qǐng)求循環(huán)分配到服務(wù)器集群中的每臺(tái)機(jī)器,即有效服務(wù)器。如果使用這種方式,所有的標(biāo)記進(jìn)入虛擬服務(wù)的服務(wù)器應(yīng)該有相近的資源容量以及負(fù)載形同的應(yīng)用程序。如果所有的服務(wù)器有相同或者相近的性能那么選擇這種方式會(huì)使服務(wù)器負(fù)載形同?;谶@個(gè)前提,輪循調(diào)度是一個(gè)簡(jiǎn)單而有效的分配請(qǐng)求的方式。然而對(duì)于服務(wù)器不同的情況,選擇這種方式就意味著能力比較弱的服務(wù)器也會(huì)在下一輪循環(huán)中接受輪循,即使這個(gè)服務(wù)器已經(jīng)不能再處理當(dāng)前這個(gè)請(qǐng)求了。這可能導(dǎo)致能力較弱的服務(wù)器超載。
加權(quán)輪循(Weighted Round Robin)
這種算法解決了簡(jiǎn)單輪循調(diào)度算法的缺點(diǎn):傳入的請(qǐng)求按順序被分配到集群中服務(wù)器,但是會(huì)考慮提前為每臺(tái)服務(wù)器分配的權(quán)重。管理員只是簡(jiǎn)單的通過(guò)服務(wù)器的處理能力來(lái)定義各臺(tái)服務(wù)器的權(quán)重。例如,能力***的服務(wù)器A給的權(quán)重是100,同時(shí)能力***的服務(wù)器給的權(quán)重是50。這意味著在服務(wù)器B接收到***個(gè)請(qǐng)求之前前,服務(wù)器A會(huì)連續(xù)的接受到2個(gè)請(qǐng)求,以此類(lèi)推。
最少連接數(shù)(Least Connection)
以上兩種方法都沒(méi)有考慮的是系統(tǒng)不能識(shí)別在給定的時(shí)間里保持了多少連接。因此可能發(fā)生,服務(wù)器B服務(wù)器收到的連接比服務(wù)器A少但是它已經(jīng)超載,因?yàn)榉?wù)器B上的用戶打開(kāi)連接持續(xù)的時(shí)間更長(zhǎng)。這就是說(shuō)連接數(shù)即服務(wù)器的負(fù)載是累加的。這種潛在的問(wèn)題可以通過(guò)“最少連接數(shù)”算法來(lái)避免:傳入的請(qǐng)求是根據(jù)每臺(tái)服務(wù)器當(dāng)前所打開(kāi)的連接數(shù)來(lái)分配的。即活躍連接數(shù)最少的服務(wù)器會(huì)自動(dòng)接收下一個(gè)傳入的請(qǐng)求。接本上和簡(jiǎn)單輪詢的原則相同:所有擁有虛擬服務(wù)的服務(wù)器資源容量應(yīng)該相近。值得注意的是,在流量率低的配置環(huán)境中,各服務(wù)器的流量并不是相同的,會(huì)優(yōu)先考慮***臺(tái)服務(wù)器。這是因?yàn)?,如果所有的服?wù)器是相同的,那么***個(gè)服務(wù)器優(yōu)先,直到***臺(tái)服務(wù)器有連續(xù)的活躍流量,否則總是會(huì)優(yōu)先選擇***臺(tái)服務(wù)器。
最少連接數(shù)慢啟動(dòng)時(shí)間(Least Connection Slow Start Time)
對(duì)最少連接數(shù)和帶權(quán)重的最小連接數(shù)調(diào)度方法來(lái)說(shuō),當(dāng)一個(gè)服務(wù)器剛加入線上環(huán)境是,可以為其配置一個(gè)時(shí)間段,在這段時(shí)間內(nèi)連接數(shù)是有限制的而且是緩慢增加的。這為服務(wù)器提供了一個(gè)‘過(guò)渡時(shí)間’以保證這個(gè)服務(wù)器不會(huì)因?yàn)閯倖?dòng)后因?yàn)榉峙涞倪B接數(shù)過(guò)多而超載。這個(gè)值在L7配置界面設(shè)置。
加權(quán)最少連接(Weighted Least Connection)
如果服務(wù)器的資源容量各不相同,那么“加權(quán)最少連接”方法更合適:由管理員根據(jù)服務(wù)器情況定制的權(quán)重所決定的活躍連接數(shù)一般提供了一種對(duì)服務(wù)器非常平衡的利用,因?yàn)樗梃b了最少連接和權(quán)重兩者的優(yōu)勢(shì)。通常,這是一個(gè)非常公平的分配方式,因?yàn)樗褂昧诉B接數(shù)和服務(wù)器權(quán)重比例;集群中比例***的服務(wù)器自動(dòng)接收下一個(gè)請(qǐng)求。但是請(qǐng)注意,在低流量情況中使用這種方法時(shí),請(qǐng)參考“最小連接數(shù)”方法中的注意事項(xiàng)。
基于代理的自適應(yīng)負(fù)載均衡(Agent Based Adaptive Balancing)
除了上述方法之外,負(fù)載主機(jī)包含一個(gè)自適用邏輯用來(lái)定時(shí)監(jiān)測(cè)服務(wù)器狀態(tài)和該服務(wù)器的權(quán)重。對(duì)于非常強(qiáng)大的“基于代理的自適應(yīng)負(fù)載均衡”方法來(lái)說(shuō),負(fù)載主機(jī)以這種方式來(lái)定時(shí)檢測(cè)所有服務(wù)器負(fù)載情況:每臺(tái)服務(wù)器都必須提供一個(gè)包含文件,這個(gè)文件包含一個(gè)0~99的數(shù)字用來(lái)標(biāo)明改服務(wù)器的實(shí)際負(fù)載情況(0=***,99=超載,101=失敗,102=管理員禁用),而服務(wù)器同構(gòu)http get方法來(lái)獲取這個(gè)文件;同時(shí)對(duì)集群中服務(wù)器來(lái)說(shuō),以二進(jìn)制文件形式提供自身負(fù)載情況也是該服務(wù)器工作之一,然而,并沒(méi)有限制服務(wù)器如何計(jì)算自身的負(fù)載情況。根據(jù)服務(wù)器整體負(fù)載情況,有兩種策略可以選擇:在常規(guī)的操作中,調(diào)度算法通過(guò)收集的服務(wù)器負(fù)載值和分配給該服務(wù)器的連接數(shù)的比例計(jì)算出一個(gè)權(quán)重比例。因此,如果一個(gè)服務(wù)器負(fù)載過(guò)大,權(quán)重會(huì)通過(guò)系統(tǒng)透明的作重新調(diào)整。和加權(quán)輪循調(diào)度方法一樣,不正確的分配可以被記錄下來(lái)使得可以有效的為不同服務(wù)器分配不同的權(quán)重。然而,在流量非常低的環(huán)境下,服務(wù)器報(bào)上來(lái)的負(fù)載值將不能建立一個(gè)有代表性的樣本;那么基于這些值來(lái)分配負(fù)載的話將導(dǎo)致失控以及指令震蕩。因此,在這種情況下更合理的做法是基于靜態(tài)的權(quán)重比來(lái)計(jì)算負(fù)載分配。當(dāng)所有服務(wù)器的負(fù)載低于管理員定義的下限時(shí),負(fù)載主機(jī)就會(huì)自動(dòng)切換為加權(quán)輪循方式來(lái)分配請(qǐng)求;如果負(fù)載大于管理員定義的下限,那么負(fù)載主機(jī)又會(huì)切換回自適應(yīng)方式。
固定權(quán)重(Fixed Weighted)
***權(quán)重只有在其他服務(wù)器的權(quán)重值都很低時(shí)才使用。然而,如果***權(quán)重的服務(wù)器下降,則下一個(gè)***優(yōu)先級(jí)的服務(wù)器將為客戶端服務(wù)。這種方式中每個(gè)真實(shí)服務(wù)器的權(quán)重需要基于服務(wù)器優(yōu)先級(jí)來(lái)配置。
加權(quán)響應(yīng)(Weighted Response)
流量的調(diào)度是通過(guò)加權(quán)輪循方式。加權(quán)輪循中所使用的權(quán)重是根據(jù)服務(wù)器有效性檢測(cè)的響應(yīng)時(shí)間來(lái)計(jì)算。每個(gè)有效性檢測(cè)都會(huì)被計(jì)時(shí),用來(lái)標(biāo)記它響應(yīng)成功花了多長(zhǎng)時(shí)間。但是需要注意的是,這種方式假定服務(wù)器心跳檢測(cè)是基于機(jī)器的快慢,但是這種假設(shè)也許不總是能夠成立。所有服務(wù)器在虛擬服務(wù)上的響應(yīng)時(shí)間的總和加在一起,通過(guò)這個(gè)值來(lái)計(jì)算單個(gè)服務(wù)物理服務(wù)器的權(quán)重;這個(gè)權(quán)重值大約每15秒計(jì)算一次。
源IP哈希(Source IP Hash)
這種方式通過(guò)生成請(qǐng)求源IP的哈希值,并通過(guò)這個(gè)哈希值來(lái)找到正確的真實(shí)服務(wù)器。這意味著對(duì)于同一主機(jī)來(lái)說(shuō)他對(duì)應(yīng)的服務(wù)器總是相同。使用這種方式,你不需要保存任何源IP。但是需要注意,這種方式可能導(dǎo)致服務(wù)器負(fù)載不平衡。