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