{eval=Array;=+count(Array);}
如果項(xiàng)目的用戶量少、訪問量不大、數(shù)據(jù)量也不多的時(shí)候,一臺(tái)服務(wù)器足以支撐,那么直接項(xiàng)目部署一套,直接訪問使用就可以了,但是當(dāng)用戶和數(shù)據(jù)量不斷增多,訪問量(并發(fā)量)不斷增加,一臺(tái)服務(wù)器不在能夠支撐業(yè)務(wù)的時(shí)候,就需要使用多臺(tái)機(jī)器,設(shè)計(jì)高性能的集群來應(yīng)對(duì)。
那么當(dāng)我部署了多臺(tái)服務(wù)器(這里假如是兩臺(tái)),那么調(diào)用方是如何訪問的呢?服務(wù)方如何均衡訪問的流量呢?這時(shí)候就需要引出負(fù)載均衡了。
負(fù)載均衡就是通過一定的策略,把用戶的訪問量均勻地轉(zhuǎn)發(fā)給后端的服務(wù)器;負(fù)載均衡可以提高系統(tǒng)的服務(wù)能力和高可用性。
常見的負(fù)載均衡技術(shù)有三種:
DNS負(fù)載均衡:大概的原理是,當(dāng)用戶訪問域名的時(shí)候,需要先通過DNS解析域名,找到對(duì)應(yīng)的IP地址,在這個(gè)過程中,可以讓DNS服務(wù)器,根據(jù)用戶的地理位置,返回不同的IP,這樣就可以實(shí)現(xiàn)負(fù)載均衡,同時(shí)也可以提升用戶的訪問速度。
軟件負(fù)載均衡:用軟件來實(shí)現(xiàn)流量的分發(fā),有基于傳輸層實(shí)現(xiàn)的負(fù)載均衡,比如LVS,也有基于應(yīng)用層來實(shí)現(xiàn)的,比如Nginx;軟件負(fù)載均衡實(shí)現(xiàn)起來很簡單,只需要在服務(wù)器上部署并進(jìn)行配置就可以實(shí)現(xiàn);
硬件負(fù)載均衡:用硬件來實(shí)現(xiàn)負(fù)載均衡,比如F5(F5 Network Big-IP),這是一臺(tái)網(wǎng)絡(luò)設(shè)備,性能很高,同時(shí)價(jià)格非常的貴。
從另外一個(gè)角度對(duì)負(fù)載均衡進(jìn)行分類,可以分成兩種:
服務(wù)端負(fù)載均衡:調(diào)用方只訪問負(fù)載均衡的IP,不需要管后面有多少臺(tái)服務(wù)器。
客戶端負(fù)載均衡:服務(wù)端部署多臺(tái)服務(wù)器,客戶端知道每臺(tái)服務(wù)器的地址,并通過一定的路由規(guī)則,均衡地訪問,比如Spring Cloud Ribbon,當(dāng)然客戶端的負(fù)載均衡,通常是需要服務(wù)注冊(cè)發(fā)現(xiàn)的配合。
輪循(Round Robin):將請(qǐng)求循環(huán)分配給有效的服務(wù)器;
加權(quán)輪循(Weighted Round Robin):輪訓(xùn)的升級(jí)版,給后端的服務(wù)器分配不同的權(quán)限,根據(jù)權(quán)重進(jìn)行循環(huán)分配;比如A、B服務(wù)器權(quán)重分別是100和50,那么請(qǐng)求會(huì)保持2:1的比例進(jìn)行分配;
最少連接數(shù)(Least Connection):分配的請(qǐng)求根據(jù)每臺(tái)服務(wù)器當(dāng)前所打開的連接數(shù)來進(jìn)行分配;
源IP哈希(Source IP Hash):對(duì)調(diào)用方的IP進(jìn)行HASH運(yùn)算,并根據(jù)這個(gè)計(jì)算結(jié)果分配服務(wù)器,這樣的好處是同一個(gè)主機(jī)的請(qǐng)求,始終會(huì)被同一個(gè)服務(wù)器響應(yīng)(但是不一定均衡)。
網(wǎng)絡(luò)的負(fù)載均衡是一種動(dòng)態(tài)均衡技術(shù),常見的實(shí)現(xiàn)方式是通過一些工具實(shí)時(shí)地分析數(shù)據(jù)包,掌握網(wǎng)絡(luò)中的數(shù)據(jù)流量狀況,把任務(wù)合理均衡地分配出去。
通俗的講,在網(wǎng)站創(chuàng)立初期,我們一般都使用單臺(tái)機(jī)器對(duì)臺(tái)提供集中式服務(wù),但隨著業(yè)務(wù)量越來越大,無論性能還是穩(wěn)定性上都有了更大的挑戰(zhàn)。
這時(shí)候我們就會(huì)想到通過擴(kuò)容的方式來提供更好的服務(wù)。我們一般會(huì)把多臺(tái)機(jī)器組成一個(gè)集群對(duì)外提供服務(wù)。
然而,我們的網(wǎng)站對(duì)外提供的訪問入口都是一個(gè)的,比如www.taobao.com。
那么當(dāng)用戶在瀏覽器輸入 www.taobao.com 的時(shí)候如何將用戶的請(qǐng)求分發(fā)到集群中不同的機(jī)器上呢,這就是負(fù)載均衡在做的事情。
當(dāng)前大多數(shù)的互聯(lián)網(wǎng)系統(tǒng)都使用了服務(wù)器集群技術(shù),集群即將相同服務(wù)部署在多臺(tái)服務(wù)器上構(gòu)成一個(gè)集群整體對(duì)外提供服務(wù),這些集群可以是 Web 應(yīng)用服務(wù)器集群,也可以是數(shù)據(jù)庫服務(wù)器集群,還可以是分布式緩存服務(wù)器集群等。
在實(shí)際應(yīng)用中,在 Web 服務(wù)器集群之前總會(huì)有一臺(tái)負(fù)載均衡服務(wù)器,負(fù)載均衡設(shè)備的任務(wù)就是作為 Web 服務(wù)器流量的入口,挑選最合適的一臺(tái) Web 服務(wù)器,將客戶端的請(qǐng)求轉(zhuǎn)發(fā)給它處理,實(shí)現(xiàn)客戶端到真實(shí)服務(wù)端的透明轉(zhuǎn)發(fā)。
最近幾年很火的「云計(jì)算」以及分布式架構(gòu),本質(zhì)上也是將后端服務(wù)器作為計(jì)算資源、存儲(chǔ)資源,由某臺(tái)管理服務(wù)器封裝成一個(gè)服務(wù)對(duì)外提供,客戶端不需要關(guān)心真正提供服務(wù)的是哪臺(tái)機(jī)器,在它看來,就好像它面對(duì)的是一臺(tái)擁有近乎無限能力的服務(wù)器,而本質(zhì)上,真正提供服務(wù)的是后端的集群。
圖中電腦請(qǐng)求淘寶網(wǎng)服務(wù)器集群,中間會(huì)經(jīng)過負(fù)載均衡器,將請(qǐng)求落到一個(gè)具體的服務(wù)器上。
1. LVS技術(shù)
LVS(Linux Virtual Server),也就是 Linux 虛擬服務(wù)器。
使用 LVS 技術(shù)要達(dá)到的目標(biāo)是:通過 LVS 提供的負(fù)載均衡技術(shù)和 Linux 操作系統(tǒng)實(shí)現(xiàn)一個(gè)高性能、高可用的服務(wù)器群集,它具有良好可靠性、可擴(kuò)展性和可操作性。從而以低廉的成本實(shí)現(xiàn)最優(yōu)的服務(wù)性能。
LVS 架設(shè)的服務(wù)器集群系統(tǒng)由三個(gè)部分組成:最前端的負(fù)載均衡層(Loader Balancer),中間的服務(wù)器群組層,用 Server Array 表示,最底層的數(shù)據(jù)共享存儲(chǔ)層,用 Shared Storage 表示。
2. Nginx
是一個(gè)網(wǎng)頁服務(wù)器,它能反向代理 HTTP、HTTPS,、SMTP、POP3、IMAP、TCP的協(xié)議鏈接,以及一個(gè)負(fù)載均衡器和一個(gè)HTTP緩存。
Nginx 主要用來做七層負(fù)載均衡,有時(shí)候也能夠負(fù)載TCPIP層。
并發(fā)性能:官方支持每秒 5 萬并發(fā),實(shí)際國內(nèi)一般到每秒 2 萬并發(fā),有優(yōu)化到每秒 10 萬并發(fā)的。具體性能看應(yīng)用場(chǎng)景。
3. HAProxy
HAProxy 也是使用較多的一款負(fù)載均衡軟件。HAProxy 提供高可用性、負(fù)載均衡以及基于 TCP 和 HTTP 應(yīng)用的代理,支持虛擬主機(jī),是免費(fèi)、快速并且可靠的一種解決方案。
特別適用于那些負(fù)載特大的 Web站點(diǎn)。運(yùn)行模式使得它可以很簡單安全的整合到當(dāng)前的架構(gòu)中,同時(shí)可以保護(hù)你的web服務(wù)器不被暴露到網(wǎng)絡(luò)上。
HAProxy 是一個(gè)使用 C 語言編寫的自由及開放源代碼軟件,其提供高可用性、負(fù)載均衡,以及基于 TCP 和 HTTP 的應(yīng)用程序代理。Haproxy 主要用來做七層負(fù)載均衡。
2
回答0
回答10
回答0
回答6
回答8
回答0
回答2
回答0
回答1
回答