菜菜哥,上次你給我講的分庫(kù)分表策略對(duì)我?guī)椭艽?br>
有幫助就好,上次請(qǐng)我的咖啡也很好喝~
呵呵,不過(guò)隨著訪問(wèn)量的不斷加大,網(wǎng)站我又加了nginx做負(fù)載均衡
好呀,看來(lái)要進(jìn)階高級(jí)工程師啦~
負(fù)載均衡也很簡(jiǎn)單呀,一個(gè)nginx就搞定了,現(xiàn)在可以說(shuō)我精通負(fù)載均衡了吧
其實(shí)負(fù)載均衡的內(nèi)容還有很多
一個(gè)系統(tǒng)發(fā)展初期,往往都是單機(jī)系統(tǒng)。應(yīng)用和數(shù)據(jù)庫(kù)在一臺(tái)服務(wù)器上,隨著業(yè)務(wù)的發(fā)展,訪問(wèn)量的增大,一臺(tái)服務(wù)器性能就會(huì)出現(xiàn)天花板,往往已經(jīng)難以支撐業(yè)務(wù)量了。這個(gè)時(shí)候就要考慮把數(shù)據(jù)庫(kù)和應(yīng)用服務(wù)器分開(kāi),訪問(wèn)繼續(xù)增加,就會(huì)考慮數(shù)據(jù)庫(kù)分庫(kù)分表,應(yīng)用服務(wù)器做負(fù)載均衡,其實(shí)這也屬于分布式系統(tǒng)的一個(gè)范疇。分布式系統(tǒng)的核心概念就是一個(gè)“分”字,一臺(tái)服務(wù)器支撐不住,那就兩臺(tái),三臺(tái),四臺(tái)....當(dāng)然分之后會(huì)帶來(lái)其他問(wèn)題,比如最常見(jiàn)的數(shù)據(jù)一致性問(wèn)題,調(diào)用鏈監(jiān)控等問(wèn)題,這些不在今日的討論范圍內(nèi),有興趣的同學(xué)請(qǐng)移步百度。
很多項(xiàng)目做“分布式”部署提高系統(tǒng)性能,首期采用的往往是負(fù)載均衡策略。
負(fù)載均衡
負(fù)載均衡,英文名稱為L(zhǎng)oad
Balance,其含義就是指將負(fù)載(工作任務(wù))進(jìn)行平衡、分?jǐn)偟蕉鄠€(gè)操作單元上進(jìn)行運(yùn)行,例如FTP服務(wù)器、Web服務(wù)器、企業(yè)核心應(yīng)用服務(wù)器和其它主要任務(wù)服務(wù)器等,從而協(xié)同完成工作任務(wù)。負(fù)載均衡構(gòu)建在原有網(wǎng)絡(luò)結(jié)構(gòu)之上,它提供了一種透明且廉價(jià)有效的方法擴(kuò)展服務(wù)器和網(wǎng)絡(luò)設(shè)備的帶寬、加強(qiáng)網(wǎng)絡(luò)數(shù)據(jù)處理能力、增加吞吐量、提高網(wǎng)絡(luò)的可用性和靈活性。
負(fù)載均衡既然屬于“分”策略的一種表現(xiàn)形式,就會(huì)涉及到任務(wù)的分配者,任務(wù)執(zhí)行者,分配算法。這里的任務(wù)分配者就是我們常說(shuō)的負(fù)載均衡器,任務(wù)執(zhí)行者就是處理任務(wù)的服務(wù)器,分配算法就是常說(shuō)的輪訓(xùn)等分配策略。這里把任務(wù)的分配者叫做負(fù)載均衡器其實(shí)是不正確的,負(fù)載均衡器這個(gè)概念注重的更多是均勻分配任務(wù),讓每個(gè)任務(wù)的計(jì)算單元的任務(wù)量達(dá)到均衡狀態(tài),而現(xiàn)實(shí)中任務(wù)的分配更多是出于每個(gè)計(jì)算單元的性能或者業(yè)務(wù)來(lái)考慮。讓每個(gè)計(jì)算單元處理幾乎相同數(shù)量的任務(wù)只是分布式均衡器其中的一部分內(nèi)容。
以http請(qǐng)求為例,在一個(gè)http請(qǐng)求的過(guò)程中,其實(shí)會(huì)遇到有很多負(fù)載均衡的過(guò)程,一個(gè)系統(tǒng)在什么階段做負(fù)載均衡取決于它的請(qǐng)求量,這和常說(shuō)的QPS/TPS/DAU等有直接關(guān)系,假設(shè)系統(tǒng)的請(qǐng)求量非常少,其實(shí)完全沒(méi)有必要做負(fù)載均衡,當(dāng)然有時(shí)候?yàn)榱诉_(dá)到高可用的目的也做負(fù)載均衡,這里不在展開(kāi)討論。那一個(gè)http請(qǐng)求到底可以經(jīng)過(guò)哪些負(fù)載均衡器呢?http請(qǐng)求的過(guò)程如下圖所示
?DNS負(fù)載均衡
當(dāng)一個(gè)client向一個(gè)url發(fā)起請(qǐng)求(這里不考慮直接請(qǐng)求IP地址的情況),第一步需要做的就是請(qǐng)求DNS服務(wù)器去做域名解析,把請(qǐng)求的域名轉(zhuǎn)換成IP地址。DNS解析同一個(gè)域名可以根據(jù)來(lái)源返回不同的IP地址,利用這個(gè)特性可以做DNS負(fù)載均衡。client請(qǐng)求離自己最近的資源才是最快的,所以可以把系統(tǒng)部署在不同區(qū)域的機(jī)房,每個(gè)client經(jīng)過(guò)DNS解析只請(qǐng)求離自己最近的機(jī)房資源,比請(qǐng)求異地的機(jī)房資源要快的多。例如:一個(gè)網(wǎng)站可以同時(shí)部署在北京機(jī)房和深圳機(jī)房,河北的用戶請(qǐng)求網(wǎng)站的時(shí)候都會(huì)被導(dǎo)向北京機(jī)房,比訪問(wèn)深圳的速度要快的多。
DNS負(fù)載均衡僅限于解析域名的時(shí)機(jī),所以它的力度是很粗的,相應(yīng)的負(fù)載均衡算法也有限。但是這種方案實(shí)現(xiàn)起來(lái)比較簡(jiǎn)單,成本也很低,而且在一定程度了縮短了用戶的響應(yīng)時(shí)間,加快了訪問(wèn)速度。由于DNS信息都有很長(zhǎng)時(shí)間的緩存,所以更新的時(shí)候會(huì)有一段時(shí)間的信息差異,會(huì)導(dǎo)致部分用戶正常業(yè)務(wù)的訪問(wèn)的錯(cuò)誤。
硬件負(fù)載均衡
當(dāng)一個(gè)請(qǐng)求知道了要訪問(wèn)的目標(biāo)IP,便會(huì)通過(guò)層層的網(wǎng)關(guān)和路由器到達(dá)目標(biāo)IP的機(jī)房,在這之前屬于網(wǎng)絡(luò)傳輸?shù)姆懂牐话愫茈y進(jìn)行干預(yù)。有很多機(jī)房都通過(guò)硬件設(shè)施來(lái)實(shí)現(xiàn)負(fù)載均衡的目的,這和路由器、交換機(jī)類似,也可以理解為底層的設(shè)備。目前最常用的莫過(guò)于F5了,這樣的硬件設(shè)備一般都出產(chǎn)于大公司,性能都經(jīng)過(guò)嚴(yán)格測(cè)試,功能強(qiáng)大,但是很貴,一般的中小公司不會(huì)更沒(méi)有必要使用這種土豪設(shè)備。
硬件負(fù)載均衡性能很強(qiáng)大,支撐的并發(fā)一般都在每秒幾百萬(wàn),而且支持的負(fù)載算法也很多,而且一般都配套的有安全防護(hù)措施,比如防火墻,防攻擊等安全功能。
軟件負(fù)載均衡
相比于硬件負(fù)載均衡,現(xiàn)在每個(gè)公司更常見(jiàn)的是軟件負(fù)載均衡,基本過(guò)程就是獨(dú)立出一個(gè)負(fù)載均衡服務(wù)器或者集群,安裝上有負(fù)載均衡功能的軟件來(lái)進(jìn)行分發(fā)。最常用的4層負(fù)載均衡軟件LVS,幾乎所有應(yīng)用層的負(fù)載均衡都可以做,目前LVS已經(jīng)被集成到Linux內(nèi)核模塊中。該項(xiàng)目在Linux內(nèi)核中實(shí)現(xiàn)了基于IP的數(shù)據(jù)請(qǐng)求負(fù)載均衡調(diào)度方案。還有處于7層的nginx也可以實(shí)現(xiàn)負(fù)載均衡,Nginx
支持 HTTP、E-mail協(xié)議,當(dāng)然現(xiàn)在有相應(yīng)的nginx做4層負(fù)載均衡的模塊。
與硬件想比,軟件負(fù)載均衡的吞吐量要小很多,就算是4層的LVS的性能也只在幾十萬(wàn)而已,nginx在幾萬(wàn),不過(guò)這對(duì)于一般公司的業(yè)務(wù)也足夠了,當(dāng)一個(gè)公司的業(yè)務(wù)量請(qǐng)求量達(dá)到幾百萬(wàn),估計(jì)也有錢買F5硬件了。軟件負(fù)載均衡的最大優(yōu)勢(shì)在于配置靈活,可擴(kuò)展性強(qiáng),可定制性比較強(qiáng),而且成本還很低。這也是中小公司首選的方案。
應(yīng)用
說(shuō)了這么多,其實(shí)以上幾種方案是基于http請(qǐng)求的途經(jīng)來(lái)解決問(wèn)題,每種方案都有它自己的缺點(diǎn)和優(yōu)點(diǎn),設(shè)計(jì)一個(gè)系統(tǒng)的時(shí)候初期就把以上方案全部采用以達(dá)到高性能的要求,也許并不是什么好事,每一個(gè)系統(tǒng)都是隨著業(yè)務(wù)的增長(zhǎng)而逐漸改變架構(gòu)形態(tài),而這個(gè)過(guò)程采用的負(fù)載方案一般過(guò)程都是
軟件負(fù)載->硬件負(fù)載->DNS負(fù)載,當(dāng)然這里的硬件和DNS也許有時(shí)候會(huì)顛倒過(guò)來(lái),但是軟件肯定是首當(dāng)其沖的。隨著業(yè)務(wù)量的增大,以上三種方案更多的是互相配合,互相補(bǔ)充的,就像微信這種業(yè)務(wù),不可能單獨(dú)的使用硬件負(fù)載就能達(dá)到業(yè)務(wù)要求的。
至于什么階段采用什么方案,還是要根據(jù)具體業(yè)務(wù)的請(qǐng)求量來(lái)決定,比如:當(dāng)前我的QPS在
一萬(wàn)左右,完全可以用nginx或者LVS去解決,當(dāng)上升到百萬(wàn)級(jí)別,可以嘗試著用硬件+軟件的方式去解決,當(dāng)?shù)竭_(dá)千萬(wàn)甚至更高,就要考慮多機(jī)房部署DNS負(fù)載均衡了,沒(méi)有一種方案是完美的,但是可以采用多種方案混用的方式來(lái)達(dá)到近乎完美的情況。
熱門工具 換一換

感谢您访问我们的网站,您可能还对以下资源感兴趣:
调教肉文小说-国产成本人片免费av-空姐av种子无码-在线观看免费午夜视频-综合久久精品激情-国产成人丝袜视频在线观看软件-大芭区三区四区无码-啊啊好爽啊啊插啊用力啊啊-wanch视频网-国产精品成人a免费观看