利用dns解析来实现网站的负载均衡
當(dāng)網(wǎng)站的訪問量大了就會(huì)考慮負(fù)載均衡,這也是每一個(gè)架構(gòu)師的基本功了,其基本地位就相當(dāng)于相聲里的說(shuō)學(xué)逗唱,活好不好就看這個(gè)了 :)
傳統(tǒng)的負(fù)載均衡思路是單點(diǎn)的,不管你是硬件的還是軟件的基本都是這樣的原理
對(duì)于一般的需求來(lái)說(shuō),這樣的架構(gòu)基本就可以解決問題了。而且維護(hù)起來(lái)也相對(duì)簡(jiǎn)單。嗯,大多數(shù)公司也都是這么干的。
傳統(tǒng)思路的局限性
就如同上圖所示,傳統(tǒng)思路也存在非常明顯的局限性。也就是網(wǎng)站的響應(yīng)速度很大程度上局限于負(fù)載均衡節(jié)點(diǎn)的能力,而且一旦負(fù)載均衡節(jié)點(diǎn)本身掛掉的話,整個(gè)網(wǎng)站就完全癱瘓了。后端的服務(wù)可以水平擴(kuò)展,但是對(duì)于單個(gè)節(jié)點(diǎn)來(lái)說(shuō)就算你再增大機(jī)器的配置也是有極限的,而且這也不符合互聯(lián)網(wǎng)技術(shù)的發(fā)展規(guī)律。
CDN是怎么做的
作為互聯(lián)網(wǎng)上承載大部分流量的一大基礎(chǔ)設(shè)施,CDN對(duì)負(fù)載分流的解決思路很具有啟發(fā)性
從上圖可以看到,用戶的訪問被分流了,所有的請(qǐng)求不再是聚集到一個(gè)節(jié)點(diǎn)上,而是被分擔(dān)在了各個(gè)合適的節(jié)點(diǎn)上,這樣即使存在單點(diǎn)故障,也僅僅只會(huì)影響到一部分用戶,況且我們還可以使用其他手段做故障轉(zhuǎn)移。
同樣的做法也可以借鑒到傳統(tǒng)的BS架構(gòu)中,我們也可以把用戶的請(qǐng)求直接分流到不同的服務(wù)器上,而不必經(jīng)過一個(gè)統(tǒng)一的節(jié)點(diǎn)中轉(zhuǎn)。這個(gè)分流是通過什么做到的呢?答案就是?DNS!
你知道DNS是怎么工作的嗎?
大部分人可能天天都用著DNS卻不知道它的基本原理,你可能知道我們?cè)L問互聯(lián)網(wǎng)需要查詢dns服務(wù)器,就是下面的這個(gè)玩意
我們只需要問它域名所對(duì)應(yīng)的ip地址就行了。但事情真的這么簡(jiǎn)單嗎?它是怎么知道這個(gè)域名所對(duì)應(yīng)的ip地址呢?
其實(shí)dns系統(tǒng)是一個(gè)典型的樹狀架構(gòu),上圖所示的dns服務(wù)器其實(shí)應(yīng)該叫dns緩存查詢服務(wù)器,它是為了減輕互聯(lián)網(wǎng)上dns查詢的負(fù)載所設(shè)計(jì)的。如果你的請(qǐng)求沒有命中緩存,那么這個(gè)緩存服務(wù)器就會(huì)自己進(jìn)行一次標(biāo)準(zhǔn)查詢,然后再把結(jié)果緩存起來(lái),簡(jiǎn)單來(lái)說(shuō)就是從根服務(wù)器開始一級(jí)一級(jí)的問。我們以前經(jīng)常談到根服務(wù)器的重要性其實(shí)就體現(xiàn)在這里了,它保留了對(duì)所有域名的起始解釋權(quán)
神奇的解釋權(quán)機(jī)制(SOA)
上面講到根服務(wù)器擁有一切域名的起始解釋權(quán),但是如果你去問根服務(wù)器它是不會(huì)直接告訴你最終答案的。因?yàn)槿绻鎯?chǔ)所有的記錄,那它也太累了,這個(gè)負(fù)載和開銷是驚人的。那它會(huì)告訴你什么呢?它會(huì)告訴你應(yīng)該去問誰(shuí),也就是它授權(quán)下一級(jí)服務(wù)器來(lái)解答你的問題。擬人化這個(gè)過程
DNS負(fù)載均衡的基本原理
了解了上述過程,我們得到兩個(gè)基本結(jié)論
有了這兩條結(jié)論,剩下的事情就簡(jiǎn)單了,我們只需要在最終解釋的查詢結(jié)果上做文章就可以了。簡(jiǎn)單來(lái)說(shuō),就是將你的所有服務(wù)器地址,按照自己需求制定的頻次,返回給用戶。
以github.com為例,我們首先獲取它的SOA服務(wù)器(因?yàn)閐ns緩存查詢服務(wù)器會(huì)緩存結(jié)果,如果你直接去查詢域名,會(huì)每次返回一樣的結(jié)果),.com的dns域名服務(wù)器也是13臺(tái),它們是[a-m].gtld-servers.net,我們隨便選一臺(tái)來(lái)找找github.com的SOA
OK,我們獲取了四個(gè)SOA服務(wù)器ns[1-4].p16.dynect.net,再隨便選一個(gè)來(lái)問問github.com對(duì)應(yīng)的記錄吧,順便試幾次看看最終的ip地址會(huì)不會(huì)變化
我們這里查詢了兩次,注意ANSWER SECTION部分返回了兩個(gè)結(jié)果,一次是192.30.252.129,一次是192.30.252.128。
這就是利用dns實(shí)現(xiàn)了負(fù)載均衡,你的最終訪問會(huì)到達(dá)不同的ip地址。
有哪些DNS服務(wù)商支持負(fù)載均衡呢?
這是一種比較高級(jí)的服務(wù),一般域名注冊(cè)商的dns服務(wù)器不會(huì)支持,目前我已知支持它的服務(wù)商有
其中1和4是我們已經(jīng)在使用的,效果比較理想。
總結(jié)
其實(shí)DNS可以玩的花樣遠(yuǎn)不止這些,還可以做故障轉(zhuǎn)移,也可以按地區(qū)解析等等。域名從互聯(lián)網(wǎng)誕生之初就開始存在了,但是對(duì)它的研究以及衍生出來(lái)的使用方法才剛剛開始發(fā)掘,隨著大家對(duì)互聯(lián)網(wǎng)利用的提升,這類技術(shù)肯定會(huì)越來(lái)越多。
總結(jié)
以上是生活随笔為你收集整理的利用dns解析来实现网站的负载均衡的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信扫一扫背后的秘密:基于运动估计的智能
- 下一篇: jQuery实现下拉列表移动 效果