當(dāng)一臺(tái)服務(wù)器有大量請(qǐng)求時(shí),服務(wù)器會(huì)資源不足遮精,導(dǎo)致客戶端請(qǐng)求超時(shí)響應(yīng),返回502這樣的錯(cuò)誤败潦。這個(gè)時(shí)候我們會(huì)想法增加服務(wù)器資源本冲。
- 一種方式是使用一臺(tái)電腦變成超級(jí)計(jì)算機(jī)劫扒。優(yōu)點(diǎn)是部署管理方便沟饥。缺點(diǎn)是升級(jí)1倍機(jī)器它的價(jià)格不止一倍,同時(shí)這個(gè)服務(wù)器掛了整個(gè)服務(wù)都不能工作了澎灸。
- 一種方式是用多臺(tái)低性能的服務(wù)器一起處理遮晚,分給每個(gè)服務(wù)器的工作都能支持。優(yōu)點(diǎn)是它的價(jià)格就線性增長(zhǎng)糜颠,一臺(tái)服務(wù)器掛了還有其他的運(yùn)行支持。缺點(diǎn)是部署稍微復(fù)雜一點(diǎn)顶瞒。
對(duì)應(yīng)多臺(tái)服務(wù)器協(xié)同工作的機(jī)制元旬,上層必然有個(gè)請(qǐng)求分發(fā)者匀归,將請(qǐng)求分發(fā)給各個(gè)服務(wù)器,它就是負(fù)載均衡服務(wù)器SLB(Server Load Balancer)袱贮。
它的主要任務(wù)是合理的把請(qǐng)求分發(fā)給相應(yīng)的服務(wù)器体啰,這里合理就是調(diào)度算法。
調(diào)度算法正常會(huì)根據(jù)服務(wù)器的具體情況進(jìn)行調(diào)度荒勇,所以它還有監(jiān)控服務(wù)器健康狀態(tài)的功能。
對(duì)于健康檢查要盡量反應(yīng)服務(wù)器應(yīng)用真實(shí)環(huán)境常柄,比如我是nginx+php搀擂,如果讓SLB讀取服務(wù)器的html文件,那么只能反應(yīng)nginx的狀態(tài)哨颂,無(wú)法反應(yīng)php的狀態(tài)。所以這里要讀取一個(gè)簡(jiǎn)單的php文件來(lái)反應(yīng)服務(wù)器環(huán)境品姓。
負(fù)載均衡器目前主要也有兩種箫措,各大廠商的4層和7層架構(gòu),說(shuō)白了就是SLB支不支持解析請(qǐng)求內(nèi)容植酥。
- 情況一 不支持解析請(qǐng)求內(nèi)容友驮,那么請(qǐng)求來(lái)了SLB就只能簡(jiǎn)單的轉(zhuǎn)發(fā)給正常運(yùn)行的服務(wù)器。
- 情況二 支持解析請(qǐng)求內(nèi)容走越,那么SLB就能做更多的事情耻瑟,SLB能針對(duì)特定內(nèi)容做特定處理匆赃,比如子域名今缚,子路徑轉(zhuǎn)發(fā)到指定服務(wù)器
上面提到的4層就是tcp層姓言,是無(wú)法解析應(yīng)用層內(nèi)容的,就是情況一了何荚,但它的服務(wù)器結(jié)構(gòu)簡(jiǎn)單,性能不錯(cuò)餐塘。
而7層就是應(yīng)用層妥衣,就是情況二了戒傻,但它的服務(wù)器結(jié)構(gòu)復(fù)雜税手,性能趕一就差些。
具體的架構(gòu)可以參考負(fù)載均衡原理與技術(shù)實(shí)現(xiàn)