負(fù)載均衡解決方案有哪幾種?
一、Web負(fù)載均衡
Web負(fù)載均衡(Load Balancing),簡(jiǎn)單地說(shuō)就是給我們的服務(wù)器集群分配“工作任務(wù)”,而采用恰當(dāng)?shù)姆峙浞绞?,?duì)于保護(hù)處于后端的Web服務(wù)器來(lái)說(shuō),非常重要。
二、HTTP重定向
當(dāng)用戶發(fā)來(lái)請(qǐng)求的時(shí)候,Web服務(wù)器通過(guò)修改HTTP響應(yīng)頭中的Location標(biāo)記來(lái)返回一個(gè)新的url,然后瀏覽器再繼續(xù)請(qǐng)求這個(gè)新url,實(shí)際上就是頁(yè)面重定向。通過(guò)重定向,來(lái)達(dá)到“負(fù)載均衡”的目標(biāo)。例如,我們?cè)谙螺dPHP源碼包的時(shí)候,點(diǎn)擊下載鏈接時(shí),為了解決不同國(guó)家和地域下載速度的問(wèn)題,它會(huì)返回一個(gè)離我們近的下載地址。重定向的HTTP返回碼是302。
這個(gè)重定向非常容易實(shí)現(xiàn),并且可以自定義各種策略。但是,它在大規(guī)模訪問(wèn)量下,性能不佳。而且,給用戶的體驗(yàn)也不好,實(shí)際請(qǐng)求發(fā)生重定向,增加了網(wǎng)絡(luò)延時(shí)。
三、反向代理負(fù)載均衡
反向代理服務(wù)的核心工作主要是轉(zhuǎn)發(fā)HTTP請(qǐng)求,扮演了瀏覽器端和后臺(tái)Web服務(wù)器中轉(zhuǎn)的角色。因?yàn)樗ぷ髟贖TTP層(應(yīng)用層),也就是網(wǎng)絡(luò)七層結(jié)構(gòu)中的第七層,因此也被稱為“七層負(fù)載均衡”??梢宰龇聪虼淼能浖芏啵容^常見(jiàn)的一種是Nginx。
Nginx是一種非常靈活的反向代理軟件,可以自由定制化轉(zhuǎn)發(fā)策略,分配服務(wù)器流量的權(quán)重等。反向代理中,常見(jiàn)的一個(gè)問(wèn)題,就是Web服務(wù)器存儲(chǔ)的session數(shù)據(jù),因?yàn)橐话阖?fù)載均衡的策略都是隨機(jī)分配請(qǐng)求的。同一個(gè)登錄用戶的請(qǐng)求,無(wú)法保證一定分配到相同的Web機(jī)器上,會(huì)導(dǎo)致無(wú)法找到session的問(wèn)題。
配置反向代理的轉(zhuǎn)發(fā)規(guī)則,讓同一個(gè)用戶的請(qǐng)求一定落到同一臺(tái)機(jī)器上(通過(guò)分析cookie),復(fù)雜的轉(zhuǎn)發(fā)規(guī)則將會(huì)消耗更多的CPU,也增加了代理服務(wù)器的負(fù)擔(dān)。
將session這類的信息,專門用某個(gè)獨(dú)立服務(wù)來(lái)存儲(chǔ),例如redis/memchache,這個(gè)方案是比較推薦的。
反向代理服務(wù),也是可以開(kāi)啟緩存的,如果開(kāi)啟了,會(huì)增加反向代理的負(fù)擔(dān),需要謹(jǐn)慎使用。這種負(fù)載均衡策略實(shí)現(xiàn)和部署非常簡(jiǎn)單,而且性能表現(xiàn)也比較好。但是,它有“單點(diǎn)故障”的問(wèn)題,如果掛了,會(huì)帶來(lái)很多的麻煩。而且,到了后期Web服務(wù)器繼續(xù)增加,它本身可能成為系統(tǒng)的瓶頸。
四、IP負(fù)載均衡
IP負(fù)載均衡服務(wù)是工作在網(wǎng)絡(luò)層(修改IP)和傳輸層(修改端口,第四層),比起工作在應(yīng)用層(第七層)性能要高出非常多。原理是,他是對(duì)IP層的數(shù)據(jù)包的IP地址和端口信息進(jìn)行修改,達(dá)到負(fù)載均衡的目的。這種方式,也被稱為“四層負(fù)載均衡”。常見(jiàn)的負(fù)載均衡方式,是LVS(Linux Virtual Server,Linux虛擬服務(wù)),通過(guò)IPVS(IP Virtual Server,IP虛擬服務(wù))來(lái)實(shí)現(xiàn)。
在負(fù)載均衡服務(wù)器收到客戶端的IP包的時(shí)候,會(huì)修改IP包的目標(biāo)IP地址或端口,然后原封不動(dòng)地投遞到內(nèi)部網(wǎng)絡(luò)中,數(shù)據(jù)包會(huì)流入到實(shí)際Web服務(wù)器。實(shí)際服務(wù)器處理完成后,又會(huì)將數(shù)據(jù)包投遞回給負(fù)載均衡服務(wù)器,它再修改目標(biāo)IP地址為用戶IP地址,最終回到客戶端。
IP負(fù)載均衡的性能要高出Nginx的反向代理很多,它只處理到傳輸層為止的數(shù)據(jù)包,并不做進(jìn)一步的組包,然后直接轉(zhuǎn)發(fā)給實(shí)際服務(wù)器。不過(guò),它的配置和搭建比較復(fù)雜。
DNS(Domain Name System)負(fù)責(zé)域名解析的服務(wù),域名url實(shí)際上是服務(wù)器的別名,實(shí)際映射是一個(gè)IP地址,解析過(guò)程,就是DNS完成域名到IP的映射。而一個(gè)域名是可以配置成對(duì)應(yīng)多個(gè)IP的。因此,DNS也就可以作為負(fù)載均衡服務(wù)。
這種負(fù)載均衡策略,配置簡(jiǎn)單,性能極佳。但是,不能自由定義規(guī)則,而且,變更被映射的IP或者機(jī)器故障時(shí)很麻煩,還存在DNS生效延遲的問(wèn)題。
六、DNS/GSLB負(fù)載均衡
我們常用的CDN(Content Delivery Network,內(nèi)容分發(fā)網(wǎng)絡(luò))實(shí)現(xiàn)方式,其實(shí)就是在同一個(gè)域名映射為多IP的基礎(chǔ)上更進(jìn)一步,通過(guò)GSLB(Global Server Load Balance,全局負(fù)載均衡)按照指定規(guī)則映射域名的IP。一般情況下都是按照地理位置,將離用戶近的IP返回給用戶,減少網(wǎng)絡(luò)傳輸中的路由節(jié)點(diǎn)之間的跳躍消耗。
圖中的“向上尋找”,實(shí)際過(guò)程是LDNS(Local DNS)先向根域名服務(wù)(Root Name Server)獲取到頂級(jí)根的Name Server(例如.com的),然后得到指定域名的授權(quán)DNS,然后再獲得實(shí)際服務(wù)器IP。
CDN在Web系統(tǒng)中,一般情況下是用來(lái)解決大小較大的靜態(tài)資源(html/Js/Css/圖片等)的加載問(wèn)題,讓這些比較依賴網(wǎng)絡(luò)下載的內(nèi)容,盡可能離用戶更近,提升用戶體驗(yàn)。
例如,我訪問(wèn)了一張imgcache.gtimg.cn上的圖片(騰訊的自建CDN,不使用qq.com域名的原因是防止http請(qǐng)求的時(shí)候,帶上了多余的cookie信息),我獲得的IP是183.60.217.90。
聲明:免責(zé)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),也不承認(rèn)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,請(qǐng)發(fā)
送郵件至:operations@xinnet.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。本站原創(chuàng)內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)
需注明出處:新網(wǎng)idc知識(shí)百科