上一篇文章“一分鐘了解負(fù)載均衡的一切”引起了不少同學(xué)的關(guān)注,評(píng)論中大家爭(zhēng)論的比較多的一個(gè)技術(shù)點(diǎn)是接入層負(fù)載均衡技術(shù),部分同學(xué)持這樣的觀點(diǎn):
1)nginx前端加入lvs和keepalived可以替代“DNS輪詢(xún)”
2)F5能搞定接入層高可用、擴(kuò)展性、負(fù)載均衡,可以替代“DNS輪詢(xún)”
“DNS輪詢(xún)”究竟是不是過(guò)時(shí)的技術(shù),是不是可以被其他方案替代,接入層架構(gòu)技術(shù)演進(jìn),是本文將要細(xì)致討論的內(nèi)容。
一、問(wèn)題域
nginx、lvs、keepalived、f5、DNS輪詢(xún),每每提到這些技術(shù),往往討論的是接入層的這樣幾個(gè)問(wèn)題:
1)可用性:任何一臺(tái)機(jī)器掛了,服務(wù)受不受影響
2)擴(kuò)展性:能否通過(guò)增加機(jī)器,擴(kuò)充系統(tǒng)的性能
3)反向代理+負(fù)載均衡:請(qǐng)求是否均勻分?jǐn)偟胶蠖说牟僮鲉卧獔?zhí)行
二、上面那些名詞都是干嘛的
由于每個(gè)技術(shù)人的背景和知識(shí)域不同,上面那些名詞縮寫(xiě)(運(yùn)維的同學(xué)再熟悉不過(guò)了),還是花1分鐘簡(jiǎn)單說(shuō)明一下(詳細(xì)請(qǐng)自行“百度”):
1)nginx:一個(gè)高性能的web-server和實(shí)施反向代理的軟件
2)lvs:Linux Virtual Server,使用集群技術(shù),實(shí)現(xiàn)在linux操作系統(tǒng)層面的一個(gè)高性能、高可用、負(fù)載均衡服務(wù)器
3)keepalived:一款用來(lái)檢測(cè)服務(wù)狀態(tài)存活性的軟件,常用來(lái)做高可用
4)f5:一個(gè)高性能、高可用、負(fù)載均衡的硬件設(shè)備(聽(tīng)上去和lvs功能差不多?)
5)DNS輪詢(xún):通過(guò)在DNS-server上對(duì)一個(gè)域名設(shè)置多個(gè)ip解析,來(lái)擴(kuò)充web-server性能及實(shí)施負(fù)載均衡的技術(shù)
三、接入層技術(shù)演進(jìn)
【裸奔時(shí)代(0)單機(jī)架構(gòu)】
1)瀏覽器通過(guò)DNS-server,域名解析到ip
2)瀏覽器通過(guò)ip訪(fǎng)問(wèn)web-server
缺點(diǎn):
1)非高可用,web-server掛了整個(gè)系統(tǒng)就掛了
2)擴(kuò)展性差,當(dāng)吞吐量達(dá)到web-server上限時(shí),無(wú)法擴(kuò)容
注:?jiǎn)螜C(jī)不涉及負(fù)載均衡的問(wèn)題
【簡(jiǎn)易擴(kuò)容方案(1)DNS輪詢(xún)】
假設(shè)tomcat的吞吐量是1000次每秒,當(dāng)系統(tǒng)總吞吐量達(dá)到3000時(shí),如何擴(kuò)容是首先要解決的問(wèn)題,DNS輪詢(xún)是一個(gè)很容易想到的方案:
1)多部署幾份web-server,1個(gè)tomcat抗1000,部署3個(gè)tomcat就能抗3000
2)在DNS-server層面,域名每次解析到不同的ip
優(yōu)點(diǎn):
1)零成本:在DNS-server上多配幾個(gè)ip即可,功能也不收費(fèi)
2)部署簡(jiǎn)單:多部署幾個(gè)web-server即可,原系統(tǒng)架構(gòu)不需要做任何改造
3)負(fù)載均衡:變成了多機(jī),但負(fù)載基本是均衡的
缺點(diǎn):
1)非高可用:DNS-server只負(fù)責(zé)域名解析ip,這個(gè)ip對(duì)應(yīng)的服務(wù)是否可用,DNS-server是不保證的,假設(shè)有一個(gè)web-server掛了,部分服務(wù)會(huì)受到影響
2)擴(kuò)容非實(shí)時(shí):DNS解析有一個(gè)生效周期
3)暴露了太多的外網(wǎng)ip
【簡(jiǎn)易擴(kuò)容方案(2)nginx】
tomcat的性能較差,但nginx作為反向代理的性能就強(qiáng)多了,假設(shè)線(xiàn)上跑到1w,就比tomcat高了10倍,可以利用這個(gè)特性來(lái)做擴(kuò)容:
1)站點(diǎn)層與瀏覽器層之間加入了一個(gè)反向代理層,利用高性能的nginx來(lái)做反向代理
2)nginx將http請(qǐng)求分發(fā)給后端多個(gè)web-server
優(yōu)點(diǎn):
1)DNS-server不需要?jiǎng)?/span>
2)負(fù)載均衡:通過(guò)nginx來(lái)保證
3)只暴露一個(gè)外網(wǎng)ip,nginx->tomcat之間使用內(nèi)網(wǎng)訪(fǎng)問(wèn)
4)擴(kuò)容實(shí)時(shí):nginx內(nèi)部可控,隨時(shí)增加web-server隨時(shí)實(shí)時(shí)擴(kuò)容
5)能夠保證站點(diǎn)層的可用性:任何一臺(tái)tomcat掛了,nginx可以將流量遷移到其他tomcat
缺點(diǎn):
1)時(shí)延增加+架構(gòu)更復(fù)雜了:中間多加了一個(gè)反向代理層
2)反向代理層成了單點(diǎn),非高可用:tomcat掛了不影響服務(wù),nginx掛了怎么辦?
【高可用方案(3)keepalived】
為了解決高可用的問(wèn)題,keepalived出場(chǎng)了(之前的文章“使用shadow-master保證系統(tǒng)可用性”詳細(xì)介紹過(guò)):
1)做兩臺(tái)nginx組成一個(gè)集群,分別部署上keepalived,設(shè)置成相同的虛IP,保證nginx的高可用
2)當(dāng)一臺(tái)nginx掛了,keepalived能夠探測(cè)到,并將流量自動(dòng)遷移到另一臺(tái)nginx上,整個(gè)過(guò)程對(duì)調(diào)用方透明
1)解決了高可用的問(wèn)題
缺點(diǎn):
1)資源利用率只有50%
2)nginx仍然是接入單點(diǎn),如果接入吞吐量超過(guò)的nginx的性能上限怎么辦,例如qps達(dá)到了50000咧?
【scale up擴(kuò)容方案(4)lvs/f5】
nginx畢竟是軟件,性能比tomcat好,但總有個(gè)上限,超出了上限,還是扛不住。
lvs就不一樣了,它實(shí)施在操作系統(tǒng)層面;f5的性能又更好了,它實(shí)施在硬件層面;它們性能比nginx好很多,例如每秒可以抗10w,這樣可以利用他們來(lái)擴(kuò)容,常見(jiàn)的架構(gòu)圖如下:
1)如果通過(guò)nginx可以擴(kuò)展多個(gè)tomcat一樣,可以通過(guò)lvs來(lái)擴(kuò)展多個(gè)nginx
2)通過(guò)keepalived+VIP的方案可以保證可用性
99.9999%的公司到這一步基本就能解決接入層高可用、擴(kuò)展性、負(fù)載均衡的問(wèn)題。
這就完美了嘛?還有潛在問(wèn)題么?
好吧,不管是使用lvs還是f5,這些都是scale up的方案,根本上,lvs/f5還是會(huì)有性能上限,假設(shè)每秒能處理10w的請(qǐng)求,一天也只能處理80億的請(qǐng)求(10w秒吞吐量*8w秒),那萬(wàn)一系統(tǒng)的日PV超過(guò)80億怎么辦呢?(好吧,沒(méi)幾個(gè)公司要考慮這個(gè)問(wèn)題)
【scale out擴(kuò)容方案(5)DNS輪詢(xún)】
如之前文章所述,水平擴(kuò)展,才是解決性能問(wèn)題的根本方案,能夠通過(guò)加機(jī)器擴(kuò)充性能的方案才具備最好的擴(kuò)展性。
facebook,google,baidu的PV是不是超過(guò)80億呢,它們的域名只對(duì)應(yīng)一個(gè)ip么,終點(diǎn)又是起點(diǎn),還是得通過(guò)DNS輪詢(xún)來(lái)進(jìn)行擴(kuò)容:
1)通過(guò)DNS輪詢(xún)來(lái)線(xiàn)性擴(kuò)展入口lvs層的性能
2)通過(guò)keepalived來(lái)保證高可用
3)通過(guò)lvs來(lái)擴(kuò)展多個(gè)nginx
4)通過(guò)nginx來(lái)做負(fù)載均衡,業(yè)務(wù)七層路由
四、結(jié)論
聊了這么多,稍微做一個(gè)簡(jiǎn)要的總結(jié):
1)接入層架構(gòu)要考慮的問(wèn)題域?yàn)?/strong>:高可用、擴(kuò)展性、反向代理+擴(kuò)展均衡
2)nginx、keepalived、lvs、f5可以很好的解決高可用、擴(kuò)展性、反向代理+擴(kuò)展均衡的問(wèn)題
3)水平擴(kuò)展scale out是解決擴(kuò)展性問(wèn)題的根本方案,DNS輪詢(xún)是不能完全被nginx/lvs/f5所替代的
末了,上一篇文章有同學(xué)留言問(wèn)58到家采用什么方案,58到家目前部署在阿里云上,前端購(gòu)買(mǎi)了SLB服務(wù)(可以先粗暴的認(rèn)為是一個(gè)lvs+keepalived的高可用負(fù)載均衡服務(wù)),后端是nginx+tomcat。
五、挖坑
接入層講了這么多,下一章,準(zhǔn)備講講服務(wù)層“異構(gòu)服務(wù)的負(fù)載均”(牛逼的機(jī)器應(yīng)該分配更多的流量,如何做到?)。
希望大家有收獲,轉(zhuǎn)發(fā)一篇文章只需要3秒鐘,求3秒。
==【完】==
回【均衡】一分鐘了解負(fù)載均衡的一切
回【容量】互聯(lián)網(wǎng)架構(gòu),如何進(jìn)行容量設(shè)計(jì)?
回【單點(diǎn)】單點(diǎn)系統(tǒng)架構(gòu)的可用性與性能優(yōu)化
回【ID】細(xì)聊分布式ID生成方法
【小游戲:回大于10的整數(shù),隨機(jī)返回好文,猜猜怎么實(shí)現(xiàn)的】
聯(lián)系客服