互聯(lián)網(wǎng)架構(gòu)里的負(fù)載均衡器

現(xiàn)實(shí)生活中,我們能經(jīng)常聽到別人說,通過搭建機(jī)器集群來抗住大流量和大用戶量。如何組織機(jī)器集群和服務(wù)集群對(duì)大量流量請(qǐng)求進(jìn)行高效服務(wù)是一個(gè)有挑戰(zhàn)的問題。負(fù)載均衡器就是用來解決針對(duì)流量請(qǐng)求分配機(jī)器集群和服務(wù)集群的利器。

一、什么是負(fù)載均衡?

我們從一個(gè)實(shí)際的工作需求開始講述負(fù)載均衡器吧。有一天,領(lǐng)導(dǎo)給你分配一個(gè)需求,你興高采烈地去寫代碼,當(dāng)寫到一半時(shí)發(fā)現(xiàn)要依賴另一個(gè)模塊,而另一個(gè)模塊是部署在兩臺(tái)機(jī)器上,這時(shí)如何把你的請(qǐng)求合理地分配到這兩臺(tái)機(jī)器上呢?這時(shí)可以引入負(fù)載均衡器技術(shù)來調(diào)度請(qǐng)求流量。

負(fù)載均衡(Load Balance)的意思是將大量作業(yè)合理地分?jǐn)偟蕉鄠€(gè)操作單元上進(jìn)行執(zhí)行。主要用于解決互聯(lián)網(wǎng)架構(gòu)中的高并發(fā)和高可用的問題。

二、有哪些負(fù)載均衡技術(shù)?

負(fù)載均衡器主要分為硬件負(fù)載均衡和軟件負(fù)載均衡兩大類。

2.1 硬件負(fù)載均衡技術(shù)

直接在服務(wù)器和外部網(wǎng)絡(luò)間安裝負(fù)載均衡設(shè)備,這種設(shè)備我們通常稱之為負(fù)載均衡器。由于專門的設(shè)備完成專門的任務(wù),獨(dú)立于操作系統(tǒng),整體性能得到大量提高,加上多樣化的負(fù)載均衡策略,智能化的流量管理,可達(dá)到最佳的負(fù)載均衡需求。 一般而言,硬件負(fù)載均衡在功能、性能上優(yōu)于軟件方式,不過成本昂貴,比如最常見的就是F5負(fù)載均衡器。

優(yōu)點(diǎn): 能夠直接通過智能交換機(jī)實(shí)現(xiàn),處理能力更強(qiáng),而且與系統(tǒng)無關(guān),負(fù)載性能強(qiáng)

缺點(diǎn):成本高,除設(shè)備價(jià)格高昂,而且配置冗余.很難想象后面服務(wù)器做一個(gè)集群,但最關(guān)鍵的負(fù)載均衡設(shè)備卻是單點(diǎn)配置;無法有效掌握服務(wù)器及應(yīng)用狀態(tài)。只是從網(wǎng)絡(luò)層面來判斷負(fù)載情況,有時(shí)網(wǎng)絡(luò)負(fù)載正常的情況下,應(yīng)用層可能已經(jīng)堵塞了。

2.2 軟件負(fù)載均衡技術(shù)

在互聯(lián)網(wǎng)架構(gòu)設(shè)計(jì)中,應(yīng)用率比較高的是軟件負(fù)載均衡技術(shù)。軟件負(fù)載均衡技術(shù)是基于系統(tǒng)與應(yīng)用的負(fù)載均衡技術(shù),能夠更好地根據(jù)系統(tǒng)與應(yīng)用的狀況來分配負(fù)載情況。主流的軟件負(fù)載均衡器有LVS、Nginx和HAproxy。

優(yōu)點(diǎn):復(fù)雜應(yīng)用下,軟件負(fù)載均衡能夠根據(jù)系統(tǒng)與應(yīng)用情況來分配業(yè)務(wù)負(fù)載,效率很高。性價(jià)比很高,對(duì)于一些只需要幾臺(tái)服務(wù)器就能支撐的業(yè)務(wù),使用軟件負(fù)載均衡技術(shù)更加合適。

缺點(diǎn):負(fù)載能力受服務(wù)器本身性能的影響,性能越好,負(fù)載能力越大。

LVS:內(nèi)核態(tài)轉(zhuǎn)發(fā)型的高可用工具,是一種基于傳輸層的負(fù)載均衡器,主要原理就是對(duì)網(wǎng)絡(luò)數(shù)據(jù)報(bào)文做些更改,然后進(jìn)行轉(zhuǎn)發(fā),支持的狀態(tài)檢測(cè)方法也比較完善,有端口檢測(cè),url檢測(cè)和自定義腳本檢測(cè)。 抗負(fù)載能力強(qiáng),性能高,穩(wěn)定性高,可靠性高,自身有完美的熱備方案(Keepalived+lvs)。

Nginx:工作在網(wǎng)絡(luò)層和應(yīng)用層,主流的反向代理軟件,可以通過代理的功能實(shí)現(xiàn)負(fù)載均衡的功能,本身功能比較完善,既可以做靜態(tài)站點(diǎn),緩存又可以做負(fù)載均衡器,配置上可以優(yōu)化的地方很多,有端口檢測(cè)和url的檢測(cè),但是檢測(cè)的方式是被動(dòng)式的,會(huì)對(duì)用戶的訪問造成一定的影響。

HAproxy:工作在TCP層和HTTP層,支持虛擬機(jī),支持Session的保持,Cookie的引導(dǎo),同時(shí)支持通過獲取指定的url來檢測(cè)后端服務(wù)器的狀態(tài)。單純從效率上來看,優(yōu)于Nginx。

三、常用負(fù)載均衡算法?

具體的負(fù)載均衡算法通常有以下幾種:

輪詢(Round Robin,RR)

所有請(qǐng)求被一次分發(fā)到每臺(tái)應(yīng)用服務(wù)器上,即每臺(tái)服務(wù)器需要處理的請(qǐng)求數(shù)目都相同,適合于素有服務(wù)器硬件都相同的場(chǎng)景。

加權(quán)輪詢(Weighted Round Robin,WRR)

根據(jù)應(yīng)用服務(wù)器硬件性能的 情況,在 輪詢的基礎(chǔ)上,按照配置的權(quán)重將請(qǐng)求分發(fā)到每個(gè)服務(wù)器,高性能的服務(wù)器能分配更多請(qǐng)求。

隨機(jī)(Random)

請(qǐng)求被隨機(jī)分配到各個(gè)應(yīng)用服務(wù)器,在 許多場(chǎng)合下,這種方案都很簡(jiǎn)單實(shí)用,因?yàn)楹玫碾S機(jī)數(shù)本身就很均衡。即使應(yīng)用服務(wù)器硬件配置不同,也可以使用加權(quán)隨機(jī)算法。

最少連接(Least Connections)

記錄每個(gè)應(yīng)用服務(wù)器正在處理額連接數(shù)(請(qǐng)求數(shù)),將新到的請(qǐng)求分發(fā)到最少連接的服務(wù)器上,應(yīng)該說,這是最符合負(fù)載均衡定義的算法。同樣,最少連接算法也可以實(shí)現(xiàn)加權(quán)最少連接。

源地址散列(Source hashing)

根據(jù)請(qǐng)求來源的IP地址進(jìn)行Hash計(jì)算,得到應(yīng)用服務(wù)器,這樣來自同一個(gè)IP地址的請(qǐng)求總在同一個(gè)服務(wù)器上處理,該請(qǐng)求的上下文信息可以存儲(chǔ)在這臺(tái)服務(wù)器上,在一個(gè)會(huì)話周期內(nèi)重復(fù)使用,從而實(shí)現(xiàn)會(huì)話黏滯。

四、負(fù)載均衡器在互聯(lián)網(wǎng)架構(gòu)中應(yīng)用

互聯(lián)網(wǎng)架構(gòu)對(duì)負(fù)載均衡器應(yīng)用主要采用的是軟件負(fù)載均衡技術(shù)。下面以經(jīng)典三層架構(gòu)模型來說明負(fù)載均衡技術(shù)的應(yīng)用和選型。

圖片發(fā)自簡(jiǎn)書App

1)用戶請(qǐng)求選擇接入層(Nginx)是通過DNS輪詢來實(shí)現(xiàn)的,DNS會(huì)通過輪詢算法返回一個(gè)Nginx進(jìn)行負(fù)載均衡。

2)用戶請(qǐng)求到達(dá)接入層(Nginx)后,Nginx通過權(quán)重算法或者隨機(jī)算法選擇邏輯層的一個(gè)節(jié)點(diǎn)轉(zhuǎn)發(fā)請(qǐng)求。

3)用戶請(qǐng)求到過邏輯層后,邏輯層通過與存儲(chǔ)層的所有節(jié)點(diǎn)建立連接池,或者保存所有存儲(chǔ)層節(jié)點(diǎn)的地址信息,因?yàn)閿?shù)據(jù)的存儲(chǔ)是固定在一個(gè)節(jié)點(diǎn)上的,所以要求同一個(gè)用戶的請(qǐng)求能夠路由到同一個(gè)存儲(chǔ)節(jié)點(diǎn)上去。最簡(jiǎn)單的負(fù)載均衡實(shí)現(xiàn)可以依據(jù)用戶賬號(hào)進(jìn)行HASH選擇。

當(dāng)然,基于HASH選擇會(huì)給數(shù)據(jù)遷移和擴(kuò)縮容帶來一定的麻煩,這個(gè)問題的解決我們以后再詳細(xì)討論。

轉(zhuǎn)自原文鏈接:
https://zhuanlan.zhihu.com/p/27829584
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 【摘要】 面對(duì)大量用戶訪問、高并發(fā)請(qǐng)求,海量數(shù)據(jù),可以使用高性能的服務(wù)器、大型數(shù)據(jù)庫,存儲(chǔ)設(shè)備,高性能Web服務(wù)器...
    靜修佛緣閱讀 4,839評(píng)論 0 24
  • ** 內(nèi)容安排: ** 簡(jiǎn)介 區(qū)別 Nginx、LVS及HAProxy負(fù)載均衡軟件的優(yōu)缺點(diǎn) 一、簡(jiǎn)介 ** 所謂四...
    薛晨閱讀 67,943評(píng)論 12 159
  • 摘要:面對(duì)大量用戶訪問、高并發(fā)請(qǐng)求,海量數(shù)據(jù),可以使用高性能的服務(wù)器、大型數(shù)據(jù)庫,存儲(chǔ)設(shè)備,高性能Web服務(wù)器,采...
    layjoy閱讀 14,031評(píng)論 3 93
  • 記得有位考古學(xué)家說,金字塔之所以能屹立千年不倒,因?yàn)榻ㄔ旖鹱炙牟皇桥`,而是一群虔誠的人,他們用很虔誠的心在建造...
    eileen_li閱讀 244評(píng)論 0 4
  • 1.更新apt-get包管理工具 apt-get update 2.下載swift環(huán)境需要的編譯器clang 和 ...
    dongshangtong閱讀 546評(píng)論 0 1

友情鏈接更多精彩內(nèi)容