什么是負(fù)載平衡?
負(fù)載平衡是在兩臺(tái)或更多的計(jì)算機(jī)之間分配計(jì)算工作負(fù)荷的做法。在互聯(lián)網(wǎng)上,負(fù)載平衡經(jīng)常被用來(lái)在幾個(gè)服務(wù)器之間分配網(wǎng)絡(luò)流量。這能夠減少每臺(tái)服務(wù)器的壓力,使服務(wù)器更有效率,加快性能,減少延遲。負(fù)載平衡對(duì)于大多數(shù)互聯(lián)網(wǎng)應(yīng)用的正常運(yùn)行是必不可少的。
想象一下,一家超市有8個(gè)結(jié)賬收銀通路,但其中只有一條是開放的。所有的顧客都必須排在同一條線上,因此顧客要花很長(zhǎng)時(shí)間才能為他們的物品買單。現(xiàn)在想象一下,超市開放全部8條結(jié)賬通路。在這種情況下,顧客的等待時(shí)間大約縮短了8倍(取決于每個(gè)顧客購(gòu)買多少物品等因素)。
負(fù)載平衡本質(zhì)上是完成了同樣的事情。通過(guò)在多個(gè)服務(wù)器之間分配用戶請(qǐng)求,大大減少了用戶等待時(shí)間。這會(huì)帶來(lái)更好的用戶體驗(yàn)——上述示例中的超市客戶如果總是等待很長(zhǎng)時(shí)間,他們可能會(huì)尋找效率更高的商家。
負(fù)載平衡如何運(yùn)作?
負(fù)載平衡由稱為負(fù)載平衡器的工具或應(yīng)用程序處理。負(fù)載平衡器可以是基于硬件的,也可以是基于軟件的。硬件負(fù)載平衡器需要安裝專用的負(fù)載平衡設(shè)備;基于軟件的負(fù)載平衡器可以在服務(wù)器、虛擬機(jī)或云中運(yùn)行。內(nèi)容交付網(wǎng)絡(luò)(CDN)通常包括負(fù)載平衡功能。
當(dāng)來(lái)自用戶的請(qǐng)求到達(dá)時(shí),負(fù)載平衡器將請(qǐng)求分配到給定的服務(wù)器,并對(duì)于每個(gè)請(qǐng)求重復(fù)此過(guò)程。負(fù)載平衡器根據(jù)多種不同的算法確定應(yīng)由哪個(gè)服務(wù)器處理每個(gè)請(qǐng)求。這些算法分為兩大類:靜態(tài)和動(dòng)態(tài)。
靜態(tài)負(fù)載平衡算法:Static load balancing algorithms
靜態(tài)負(fù)載平衡算法在分配工作負(fù)載時(shí)不考慮系統(tǒng)的當(dāng)前狀態(tài)。靜態(tài)負(fù)載平衡器不會(huì)知道哪些服務(wù)器運(yùn)行緩慢以及哪些服務(wù)器沒有被充分使用。相反,它根據(jù)預(yù)先確定的計(jì)劃分配工作負(fù)載。靜態(tài)負(fù)載平衡可以快速設(shè)置,但會(huì)導(dǎo)致效率低下。
回到上面的類比,想象一下如果超市開放了8條結(jié)賬通路,有一名員工的工作是引導(dǎo)顧客排隊(duì)。想象一下,這個(gè)員工只是按順序指引,將第一個(gè)客戶分配到第1列,將第二個(gè)客戶分配到第2列,依此類推,而沒有回頭查看這些隊(duì)伍的移動(dòng)速度。如果8位收銀員都高效工作,那么這個(gè)系統(tǒng)就可以正常工作——但如果一個(gè)或多個(gè)收銀員落后,一些隊(duì)伍可能會(huì)變得比其他隊(duì)伍長(zhǎng)得多,從而導(dǎo)致糟糕的客戶體驗(yàn)。靜態(tài)負(fù)載平衡也存在同樣的風(fēng)險(xiǎn):有時(shí),個(gè)別服務(wù)器仍會(huì)變得不堪重負(fù)。
循環(huán)DNS和客戶端隨機(jī)負(fù)載平衡是靜態(tài)負(fù)載平衡的兩種常見形式。
動(dòng)態(tài)負(fù)載平衡算法:Dynamic load balancing algorithms
動(dòng)態(tài)負(fù)載平衡算法會(huì)考慮每臺(tái)服務(wù)器的當(dāng)前可用性、工作負(fù)載和運(yùn)行狀況。他們可以將流量從負(fù)擔(dān)過(guò)重或性能不佳的服務(wù)器轉(zhuǎn)移到未被充分利用的服務(wù)器,從而保持分配的均勻和高效。但是,動(dòng)態(tài)負(fù)載平衡更難配置。影響服務(wù)器可用性的因素有很多:每臺(tái)服務(wù)器的運(yùn)行狀況和整體容量、正在分配的任務(wù)的體量等等。
假設(shè)超市員工將顧客指引到收銀臺(tái)時(shí)使用了一種相對(duì)更為動(dòng)態(tài)的方法:?jiǎn)T工仔細(xì)觀察隊(duì)伍,看看哪個(gè)隊(duì)伍走得最快,觀察每個(gè)顧客購(gòu)買了多少物品,并相應(yīng)地分流顧客。這可以確保為所有客戶提供更高效的體驗(yàn),但也會(huì)給指引排隊(duì)的員工帶來(lái)更大的壓力。
有幾種類型的動(dòng)態(tài)負(fù)載平衡算法,包括最少連接、加權(quán)最少連接、基于資源和基于地理位置的負(fù)載平衡。
負(fù)載平衡用于何處?
如上所述,負(fù)載平衡通常用于Web應(yīng)用程序?;谲浖突谠频呢?fù)載平衡器有助于在托管應(yīng)用程序的服務(wù)器之間平均分配互聯(lián)網(wǎng)流量。一些云負(fù)載平衡產(chǎn)品可以在全球分布的服務(wù)器之間平衡互聯(lián)網(wǎng)流量負(fù)載,這一過(guò)程稱為全局服務(wù)器負(fù)載平衡(GSLB)。
負(fù)載平衡也常用于大型本地化網(wǎng)絡(luò),例如數(shù)據(jù)中心或大型辦公大樓內(nèi)的網(wǎng)絡(luò)。傳統(tǒng)上,這需要使用硬件設(shè)備,例如應(yīng)用程序交付控制器(ADC)或?qū)S秘?fù)載平衡設(shè)備。基于軟件的負(fù)載平衡器也用于此目的。
服務(wù)器運(yùn)行狀況監(jiān)控
動(dòng)態(tài)負(fù)載平衡器必須了解服務(wù)器的運(yùn)行狀況:它們的當(dāng)前狀態(tài)、它們的性能等。動(dòng)態(tài)負(fù)載平衡器通過(guò)執(zhí)行定期的服務(wù)器運(yùn)行狀況檢查來(lái)監(jiān)控服務(wù)器。如果一個(gè)服務(wù)器或一組服務(wù)器運(yùn)行緩慢,負(fù)載平衡器分配給它的流量就會(huì)減少。如果一個(gè)服務(wù)器或一組服務(wù)器完全發(fā)生故障,負(fù)載平衡器會(huì)將流量重新路由到另一組服務(wù)器,這一過(guò)程稱為“故障轉(zhuǎn)移”。
服務(wù)器故障轉(zhuǎn)移
當(dāng)給定服務(wù)器無(wú)法運(yùn)行并且負(fù)載平衡器將其正常進(jìn)程分配到輔助服務(wù)器或服務(wù)器組時(shí),就會(huì)發(fā)生故障轉(zhuǎn)移。服務(wù)器故障轉(zhuǎn)移對(duì)于可靠性至關(guān)重要:如果沒有適當(dāng)?shù)膫浞荩?wù)器崩潰可能會(huì)導(dǎo)致網(wǎng)站或應(yīng)用程序癱瘓。快速進(jìn)行故障轉(zhuǎn)移以避免服務(wù)中斷非常重要。