負載均衡的初學(xué)者指南
當個人電腦剛開始發(fā)展的時候,一個家庭可能只有一臺(或更少)的電腦。孩子們白天玩電腦游戲,家長們晚上在業(yè)務(wù)支撐系統(tǒng)上做會計、編程,或者漫游。然而,想象一下今天一個只有一臺電腦的家庭,你可以預(yù)想到這樣會產(chǎn)生什么樣的沖突。每個人都想使用電腦,而只有一副鍵盤和鼠標。
隨著計算機變得越來越普遍,IT 行業(yè)或多或少也出現(xiàn)了同樣的情況。對服務(wù)和服務(wù)器的需求已經(jīng)增長到了會因為用量過大而停機的程度。幸運的是,我們現(xiàn)在有了負載均衡的概念來幫助我們處理需求。
負載均衡是什么?
負載均衡是一個通用術(shù)語,指的是為了確保高效分配所管理的資源而做的事情。對于 Web 服務(wù)器的系統(tǒng)管理員來說,負載均衡通常意味著確保 Web 服務(wù)器軟件(例如 ??Nginx??)配置了足夠的工作節(jié)點來處理激增的訪客。換言之,如果一個網(wǎng)站突然變得非常受歡迎,其訪問者在幾分鐘內(nèi)增加了四倍,那么運行服務(wù)器的軟件必須能夠響應(yīng)每個訪問者,并不能讓任何訪問者發(fā)現(xiàn)服務(wù)質(zhì)量下降。對于簡單的網(wǎng)站,這就像修改一行配置選項一樣簡單,但對于具有動態(tài)內(nèi)容的復(fù)雜站點,每個用戶都有多個數(shù)據(jù)庫查詢,這可能是一個嚴重的問題。
這個問題本應(yīng)隨著云計算的發(fā)展而解決,但當 Web 應(yīng)用程序遇到意外激增時,無法擴展也不是不可能。
在進行負載均衡時,需要記住的重要一點是,高效地分配資源并不一定意味著平均地分配資源。并非所有任務(wù)都在任何時候都需要所有的可用資源。一個智能的負載均衡策略僅在需要資源時才為用戶和任務(wù)提供資源。這通常是應(yīng)用程序開發(fā)人員的領(lǐng)域,而不是 IT 基礎(chǔ)架構(gòu)的責(zé)任。異步應(yīng)用程序?qū)τ诖_保離開計算機休息的用戶不占用服務(wù)器上的寶貴資源至關(guān)重要。
負載均衡是怎么工作的?
負載均衡通過在多個計算節(jié)點上分配工作負載來避免瓶頸。這些節(jié)點可能是數(shù)據(jù)中心中的物理服務(wù)器、云環(huán)境中的容器、用于邊緣計算而戰(zhàn)略性放置的服務(wù)器、復(fù)雜應(yīng)用程序框架中的獨立 Java 虛擬機(JVM),或在單個 Linux 服務(wù)器上運行的守護進程。
這個想法是把一個大問題分成幾個小任務(wù),并把每個任務(wù)分配給一臺專用計算機。例如,對于一個要求用戶登錄的網(wǎng)站,該網(wǎng)站可能托管在服務(wù)器 A 上,而登錄頁面和所有隨附的身份驗證查詢都托管在服務(wù)器 B 上。這樣,新用戶登錄帳戶時就不會占用其它使用該站點的用戶的資源。
云計算負載均衡
云計算使用 ??容器??,因此通常沒有單獨的物理服務(wù)器來處理不同的任務(wù)(實際上,有許多單獨的服務(wù)器,但它們被聚集在一起作為一個計算“大腦”)。相反,“容器莢pod” 是由幾個容器創(chuàng)建的。當一個容器莢由于其用戶或任務(wù)負載而開始耗盡資源時,會生成一個相同的容器莢。容器莢共享存儲和網(wǎng)絡(luò)資源,每個容器莢在創(chuàng)建時被分配給一個計算節(jié)點。可以根據(jù)負載需要創(chuàng)建或銷毀容器莢,這樣無論有多少用戶,用戶都可以體驗到一致的服務(wù)質(zhì)量。
邊緣計算
邊緣計算 在負載均衡時考慮到了現(xiàn)實世界。云計算自然是一個分布式系統(tǒng),但實際上,云計算的節(jié)點通常集中在幾個數(shù)據(jù)中心。用戶離運行云計算的數(shù)據(jù)中心越遠,他們?yōu)楂@得最佳服務(wù)所必須克服的物理障礙就越多。即使有光纖連接和適當?shù)呢撦d均衡,位于 3000 英里外的服務(wù)器的響應(yīng)時間也可能比僅僅 300 英里外的響應(yīng)時間長。
邊緣計算將計算節(jié)點帶到云計算的“邊緣”,試圖彌合地理鴻溝,為云計算形成一種衛(wèi)星網(wǎng)絡(luò),因此它也在良好的負載均衡工作中發(fā)揮了作用。
什么是負載均衡算法?
有許多負載均衡策略,它們的復(fù)雜性取決于所涉及的技術(shù)和需求。負載均衡不必復(fù)雜,而且從一開始就負載均衡很重要,即使在使用 ??Kubernetes??? 和 ??Keepalived?? 這樣的專用軟件時也是如此。
當你可以設(shè)計應(yīng)用程序,自己為它采取簡單的預(yù)防措施時,不要依賴容器來均衡負載。如果你從一開始就將應(yīng)用程序設(shè)計為模塊化和臨時性的,那么你將受益于通過巧妙的網(wǎng)絡(luò)設(shè)計、容器編排和其他未來技術(shù)帶來的負載均衡機會。
可以指導(dǎo)應(yīng)用程序開發(fā)人員或網(wǎng)絡(luò)工程師工作的一些流行算法包括:
- 按順序?qū)⑷蝿?wù)分配給服務(wù)器(這通常被稱為輪詢調(diào)度)。
- 將任務(wù)分配給當前最不繁忙的服務(wù)器。
- 將任務(wù)分配給具有響應(yīng)最快的服務(wù)器。
- 隨機分配任務(wù)。
舉個例子,在分配特別復(fù)雜的任務(wù)時,可以組合或加權(quán)這些原則以分配到組中最強大的服務(wù)器。通常使用 ??編排??,這樣管理員就不必為負載均衡尋找完美的算法或策略,盡管有時需要由管理員選擇使用哪種負載均衡方案組合。
預(yù)料意料之外
負載均衡實際上并不是要確保在整個網(wǎng)絡(luò)中均勻使用所有資源。負載均衡實際上是確保即使發(fā)生意外情況也能提供可靠的用戶體驗。良好的基礎(chǔ)設(shè)施可以承受計算機崩潰、應(yīng)用程序過載、網(wǎng)絡(luò)流量沖擊和用戶錯誤。思考你的服務(wù)如何才能具有彈性,并從頭開始相應(yīng)地設(shè)計負載均衡策略。