創(chuàng)新互聯(lián)的負(fù)載均衡(Server Load Balancing)是對(duì)多臺(tái)云服務(wù)器(計(jì)算集群)進(jìn)行流量分發(fā)的網(wǎng)絡(luò)服務(wù)設(shè)備。它可以通過流量分發(fā),快速提高應(yīng)用系統(tǒng)對(duì)外的服務(wù)能力;隱藏實(shí)際服務(wù)端口,增強(qiáng)內(nèi)部系統(tǒng)的安全性;通過消除服務(wù)單點(diǎn)故障,提升應(yīng)用系統(tǒng)的可靠性。今天創(chuàng)新互聯(lián)就給大家介紹下讓你徹底了解負(fù)載均衡的一些要點(diǎn)
創(chuàng)新互聯(lián)是一家企業(yè)級(jí)云計(jì)算解決方案提供商,超15年IDC數(shù)據(jù)中心運(yùn)營(yíng)經(jīng)驗(yàn)。主營(yíng)GPU顯卡服務(wù)器,站群服務(wù)器,成都機(jī)柜租用,海外高防服務(wù)器,服務(wù)器機(jī)柜,動(dòng)態(tài)撥號(hào)VPS,海外云手機(jī),海外云服務(wù)器,海外服務(wù)器租用托管等。
負(fù)載均衡
負(fù)載均衡是高可用架構(gòu)的一個(gè)關(guān)鍵組件,主要用來提高性能和可用性,通過負(fù)載均衡將流量分發(fā)到多個(gè)云服務(wù)器,同時(shí)多服務(wù)器能夠消除這部分的單點(diǎn)故障。
當(dāng)然負(fù)載均衡器本身就是一個(gè)單點(diǎn)故障隱患,可以考慮文章后面說的負(fù)載均衡雙機(jī)熱備或其他方案消除單點(diǎn)故障提高可用性。
一個(gè)沒有使用負(fù)載均衡的Web架構(gòu)一般會(huì)長(zhǎng)得像這樣:
沒有負(fù)載均衡的架構(gòu)
在這個(gè)例子里面,用戶直接通過yourdomain.com連接Web Server,如果這一個(gè)Web Server掛了那么整個(gè)系統(tǒng)都無法使用,也就是我們常說的系統(tǒng)中的單點(diǎn)故障,同樣如果大量的用戶同時(shí)訪問這一臺(tái)服務(wù)器,那么這些用戶很可能會(huì)遇到加載時(shí)間緩慢或者根本無法連接的問題。
這部分的單點(diǎn)故障可以通過引入負(fù)載均衡器和至少另一個(gè)Web Server來緩解。一般來說所有后端服務(wù)器會(huì)提供相同的內(nèi)容,以便用戶無論訪問哪個(gè)服務(wù)器都會(huì)收到一致的內(nèi)容。同時(shí)由于有多臺(tái)服務(wù)器同時(shí)提供服務(wù),也加大了系統(tǒng)的負(fù)載能力提高了性能。
負(fù)載均衡可以處理哪些類型的流量
由于一般程序員接觸到的負(fù)載均衡可能大多都是處理HTTP、HTTPS流量的,但實(shí)際上負(fù)載均衡還可以處理TCP和UDP流量(比如對(duì)數(shù)據(jù)庫(kù)集群的訪問、DNS等)。
負(fù)載均衡算法
負(fù)載均衡算法用于確定流量應(yīng)該被分發(fā)到哪一個(gè)健康的服務(wù)器上,常見的幾個(gè)算法如下:
Round Robin — 輪轉(zhuǎn)(Round Robin)意味著服務(wù)器會(huì)被按順序地選擇,比如負(fù)載均衡器會(huì)將第一個(gè)請(qǐng)求分配給第一個(gè)服務(wù)器,然后下一個(gè)請(qǐng)求分配給第二個(gè)服務(wù)器,這樣分配下去分配完一輪之后回到開頭分配給第一個(gè)服務(wù)器(操作系統(tǒng)調(diào)度算法復(fù)習(xí)一下)。這種方式比較適合各服務(wù)器處理能力相同而且每個(gè)業(yè)務(wù)處理量差不多的時(shí)候。
Least Connections — 最少連接(Least Connections)這個(gè)算法意味著負(fù)載均衡器會(huì)選擇當(dāng)前連接最少的服務(wù)器。
IP hash — 在這個(gè)算法下,負(fù)載均衡器根據(jù)請(qǐng)求源的IP來決定分發(fā)給哪個(gè)服務(wù)器。這個(gè)方法保證了一個(gè)特定的用戶會(huì)一直訪問相同的服務(wù)器。
其他還有一些不算太常見的算法,比如Url hash、Random等。
健康檢測(cè)(health checks)
在負(fù)載均衡算法一節(jié)中我們有一個(gè)前提,就是流量只會(huì)被分配到健康的服務(wù)器上,那么負(fù)載均衡器怎么去判斷服務(wù)器現(xiàn)在是否健康呢?
為了監(jiān)控健康的服務(wù)器,健康檢查一般會(huì)通過配置的協(xié)議和端口嘗試去連接服務(wù)器來保證服務(wù)器正在監(jiān)聽。如果一個(gè)服務(wù)器的健康檢查失敗了,也就是說服務(wù)器無法正常響應(yīng)請(qǐng)求,那么就會(huì)被自動(dòng)的移除池子中,流量也不會(huì)被分配到這個(gè)壞掉的服務(wù)器直到它能通過健康檢查。
這塊具體的方式可以參考阿里云關(guān)于負(fù)載均衡的文檔健康檢查原理
負(fù)載均衡如何處理狀態(tài)
我們都知道基于session的用戶認(rèn)證會(huì)在服務(wù)器存有session的一些信息,但當(dāng)系統(tǒng)引入負(fù)載均衡的時(shí)候這樣會(huì)出現(xiàn)一些問題。
舉個(gè)電商網(wǎng)站的例子,當(dāng)用戶U發(fā)送的登錄請(qǐng)求被分發(fā)到了服務(wù)器S1并在服務(wù)器中記錄了session信息,而當(dāng)用戶想要提交購(gòu)物請(qǐng)求的時(shí)候這個(gè)請(qǐng)求被分發(fā)到了服務(wù)器S2,但服務(wù)器S2并沒有保存用戶U的session信息。
為了解決這個(gè)問題一個(gè)是可以使用之前說的IP hash算法,這個(gè)算法根據(jù)IP來分配流量對(duì)應(yīng)的服務(wù)器,所以可以保證同一個(gè)用戶的流量會(huì)訪問到同一個(gè)服務(wù)器。另一個(gè)應(yīng)用層的方法是sticky session,中文應(yīng)該叫粘性會(huì)話,負(fù)載均衡器會(huì)設(shè)置一個(gè)cookie然后帶有這個(gè)cookie的session都會(huì)被分配到同一個(gè)服務(wù)器上。
負(fù)載均衡雙機(jī)熱備(Hot standby)
正如開頭所說,負(fù)載均衡器本身就是一個(gè)單點(diǎn)故障隱患,其中一個(gè)解決方案就是雙機(jī)熱備(提高可用性的一大基本方法就是冗余)。
雙機(jī)熱備方案為了解決負(fù)載均衡器的單點(diǎn)故障問題,引入了第二個(gè)負(fù)載均衡器,當(dāng)主節(jié)點(diǎn)GG了之后切換到備用節(jié)點(diǎn)。在網(wǎng)上找了個(gè)比較形象的gif:
我自己之前畢業(yè)設(shè)計(jì)的架構(gòu)用了雙機(jī)熱備,實(shí)現(xiàn)上主要是通過keepalived實(shí)現(xiàn)nginx的高可用關(guān)于冷備份、熱備份、雙機(jī)熱備、
如果大家還有什么地方需要了解的可以在創(chuàng)新互聯(lián)官網(wǎng)找我們的專業(yè)技術(shù)工程師的,創(chuàng)新互聯(lián)技術(shù)工程師在行業(yè)內(nèi)擁有十幾年的經(jīng)驗(yàn)了,所以會(huì)比小編回答的更加詳細(xì)專業(yè)。創(chuàng)新互聯(lián)官網(wǎng)鏈接www.cdcxhl.com