前面我們講了平時(shí)常見(jiàn)的看新聞败徊、支付、直播掏缎、下載等場(chǎng)景皱蹦,現(xiàn)在網(wǎng)站的數(shù)目非常多,常用的網(wǎng)站就有二三十個(gè)眷蜈,如果全部用 IP 地址進(jìn)行訪(fǎng)問(wèn)沪哺,恐怕很難記住。于是酌儒,就需要一個(gè)地址簿辜妓,根據(jù)名稱(chēng),就可以查看具體的地址忌怎。
例如籍滴,我要去西湖邊的“外婆家”,這就是名稱(chēng)榴啸,然后通過(guò)地址簿孽惰,查看到底是哪條路多少號(hào)。
DNS 服務(wù)器
在網(wǎng)絡(luò)世界鸥印,也是這樣的勋功。你肯定記得住網(wǎng)站的名稱(chēng),但是很難記住網(wǎng)站的 IP 地址库说,因而也需要一個(gè)地址簿狂鞋,就是 DNS 服務(wù)器。
由此可見(jiàn)潜的,DNS 在日常生活中多么重要骚揍。每個(gè)人上網(wǎng),都需要訪(fǎng)問(wèn)它夏块,但是同時(shí)疏咐,這對(duì)它來(lái)講也是非常大的挑戰(zhàn)。一旦它出了故障脐供,整個(gè)互聯(lián)網(wǎng)都將癱瘓。另外借跪,上網(wǎng)的人分布在全世界各地政己,如果大家都去同一個(gè)地方訪(fǎng)問(wèn)某一臺(tái)服務(wù)器,時(shí)延將會(huì)非常大。因而歇由,DNS 服務(wù)器卵牍,一定要設(shè)置成高可用、高并發(fā)和分布式的沦泌。
于是糊昙,就有了這樣樹(shù)狀的層次結(jié)構(gòu)。
-? 根 DNS 服務(wù)器 :返回頂級(jí)域 DNS 服務(wù)器的 IP 地址
頂級(jí)域 DNS 服務(wù)器:返回權(quán)威 DNS 服務(wù)器的 IP 地址
權(quán)威 DNS 服務(wù)器 :返回相應(yīng)主機(jī)的 IP 地址
DNS 解析流程
為了提高 DNS 的解析性能谢谦,很多網(wǎng)絡(luò)都會(huì)就近部署 DNS 緩存服務(wù)器释牺。于是,就有了以下的 DNS 解析流程回挽。
電腦客戶(hù)端會(huì)發(fā)出一個(gè) DNS 請(qǐng)求没咙,問(wèn) www.163.com 的 IP 是啥啊,并發(fā)給本地域名服務(wù)器 (本地 DNS)千劈。那本地域名服務(wù)器 (本地 DNS) 是什么呢祭刚?如果是通過(guò) DHCP 配置,本地 DNS 由你的網(wǎng)絡(luò)服務(wù)商(ISP)墙牌,如電信涡驮、移動(dòng)等自動(dòng)分配,它通常就在你網(wǎng)絡(luò)服務(wù)商的某個(gè)機(jī)房喜滨。
本地 DNS 收到來(lái)自客戶(hù)端的請(qǐng)求遮怜。你可以想象這臺(tái)服務(wù)器上緩存了一張域名與之對(duì)應(yīng) IP 地址的大表格。如果能找到 www.163.com鸿市,它就直接返回 IP 地址锯梁。如果沒(méi)有,本地 DNS 會(huì)去問(wèn)它的根域名服務(wù)器:“老大焰情,能告訴我 www.163.com 的 IP 地址嗎陌凳?”根域名服務(wù)器是最高層次的,全球共有 13 套内舟。它不直接用于域名解析合敦,但能指明一條道路。
根 DNS 收到來(lái)自本地 DNS 的請(qǐng)求验游,發(fā)現(xiàn)后綴是 .com充岛,說(shuō):“哦,www.163.com 啊耕蝉,這個(gè)域名是由.com 區(qū)域管理崔梗,我給你它的頂級(jí)域名服務(wù)器的地址,你去問(wèn)問(wèn)它吧垒在∷馄牵”
本地 DNS 轉(zhuǎn)向問(wèn)頂級(jí)域名服務(wù)器:“老二,你能告訴我 www.163.com 的 IP 地址嗎?”頂級(jí)域名服務(wù)器就是大名鼎鼎的比如 .com谈为、.net旅挤、 .org 這些一級(jí)域名,它負(fù)責(zé)管理二級(jí)域名伞鲫,比如 163.com粘茄,所以它能提供一條更清晰的方向。
頂級(jí)域名服務(wù)器說(shuō):“我給你負(fù)責(zé) www.163.com 區(qū)域的權(quán)威 DNS 服務(wù)器的地址秕脓,你去問(wèn)它應(yīng)該能問(wèn)到柒瓣。”
本地 DNS 轉(zhuǎn)向問(wèn)權(quán)威 DNS 服務(wù)器:“您好撒会,www.163.com 對(duì)應(yīng)的 IP 是啥呀嘹朗?”163.com 的權(quán)威 DNS 服務(wù)器,它是域名解析結(jié)果的原出處诵肛。為啥叫權(quán)威呢屹培?就是我的域名我做主。
權(quán)威 DNS 服務(wù)器查詢(xún)后將對(duì)應(yīng)的 IP 地址 X.X.X.X 告訴本地 DNS怔檩。
本地 DNS 再將 IP 地址返回客戶(hù)端褪秀,客戶(hù)端和目標(biāo)建立連接。
至此薛训,我們完成了 DNS 的解析過(guò)程∶铰穑現(xiàn)在總結(jié)一下,整個(gè)過(guò)程我畫(huà)成了一個(gè)圖乙埃。
負(fù)載均衡
站在客戶(hù)端角度闸英,這是一次 DNS 遞歸查詢(xún)過(guò)程。因?yàn)楸镜?DNS 全權(quán)為它效勞介袜,它只要坐等結(jié)果即可甫何。在這個(gè)過(guò)程中,DNS 除了可以通過(guò)名稱(chēng)映射為 IP 地址遇伞,它還可以做另外一件事辙喂,就是負(fù)載均衡。
還是以訪(fǎng)問(wèn)“外婆家”為例鸠珠,還是我們開(kāi)頭的“外婆家”巍耗,但是,它可能有很多地址渐排,因?yàn)樗诤贾菘梢杂泻芏嗉揖嫣K裕绻粋€(gè)人想去吃“外婆家”飞盆,他可以就近找一家店娄琉,而不用大家都去同一家次乓,這就是負(fù)載均衡吓歇。
DNS 首先可以做內(nèi)部負(fù)載均衡孽水。
例如,一個(gè)應(yīng)用要訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)城看,在這個(gè)應(yīng)用里面應(yīng)該配置這個(gè)數(shù)據(jù)庫(kù)的 IP 地址女气,還是應(yīng)該配置這個(gè)數(shù)據(jù)庫(kù)的域名呢?顯然應(yīng)該配置域名测柠,因?yàn)橐坏┻@個(gè)數(shù)據(jù)庫(kù)炼鞠,因?yàn)槟撤N原因,換到了另外一臺(tái)機(jī)器上轰胁,而如果有多個(gè)應(yīng)用都配置了這臺(tái)數(shù)據(jù)庫(kù)的話(huà)谒主,一換 IP 地址,就需要將這些應(yīng)用全部修改一遍赃阀。但是如果配置了域名霎肯,則只要在 DNS 服務(wù)器里,將域名映射為新的 IP 地址榛斯,這個(gè)工作就完成了观游,大大簡(jiǎn)化了運(yùn)維。
在這個(gè)基礎(chǔ)上驮俗,我們可以再進(jìn)一步懂缕。例如,某個(gè)應(yīng)用要訪(fǎng)問(wèn)另外一個(gè)應(yīng)用王凑,如果配置另外一個(gè)應(yīng)用的 IP 地址搪柑,那么這個(gè)訪(fǎng)問(wèn)就是一對(duì)一的。但是當(dāng)被訪(fǎng)問(wèn)的應(yīng)用撐不住的時(shí)候索烹,我們其實(shí)可以部署多個(gè)工碾。但是,訪(fǎng)問(wèn)它的應(yīng)用术荤,如何在多個(gè)之間進(jìn)行負(fù)載均衡倚喂?只要配置成為域名就可以了。在域名解析的時(shí)候瓣戚,我們只要配置策略端圈,這次返回第一個(gè) IP,下次返回第二個(gè) IP子库,就可以實(shí)現(xiàn)負(fù)載均衡了舱权。
另外一個(gè)更加重要的是,DNS 還可以做全局負(fù)載均衡仑嗅。
為了保證我們的應(yīng)用高可用宴倍,往往會(huì)部署在多個(gè)機(jī)房张症,每個(gè)地方都會(huì)有自己的 IP 地址。當(dāng)用戶(hù)訪(fǎng)問(wèn)某個(gè)域名的時(shí)候鸵贬,這個(gè) IP 地址可以輪詢(xún)?cè)L問(wèn)多個(gè)數(shù)據(jù)中心俗他。如果一個(gè)數(shù)據(jù)中心因?yàn)槟撤N原因掛了,只要在 DNS 服務(wù)器里面阔逼,將這個(gè)數(shù)據(jù)中心對(duì)應(yīng)的 IP 地址刪除兆衅,就可以實(shí)現(xiàn)一定的高可用。
另外嗜浮,我們肯定希望北京的用戶(hù)訪(fǎng)問(wèn)北京的數(shù)據(jù)中心羡亩,上海的用戶(hù)訪(fǎng)問(wèn)上海的數(shù)據(jù)中心,這樣危融,客戶(hù)體驗(yàn)就會(huì)非常好畏铆,訪(fǎng)問(wèn)速度就會(huì)超快。這就是全局負(fù)載均衡的概念吉殃。
示例:DNS 訪(fǎng)問(wèn)數(shù)據(jù)中心中對(duì)象存儲(chǔ)上的靜態(tài)資源
我們通過(guò) DNS 訪(fǎng)問(wèn)數(shù)據(jù)中心中對(duì)象存儲(chǔ)上的靜態(tài)資源為例辞居,看一看整個(gè)過(guò)程。
假設(shè)全國(guó)有多個(gè)數(shù)據(jù)中心寨腔,托管在多個(gè)運(yùn)營(yíng)商速侈,每個(gè)數(shù)據(jù)中心三個(gè)可用區(qū)(Available Zone)。對(duì)象存儲(chǔ)通過(guò)跨可用區(qū)部署迫卢,實(shí)現(xiàn)高可用性倚搬。在每個(gè)數(shù)據(jù)中心中,都至少部署兩個(gè)內(nèi)部負(fù)載均衡器乾蛤,內(nèi)部負(fù)載均衡器后面對(duì)接多個(gè)對(duì)象存儲(chǔ)的前置服務(wù)器(Proxy-server)每界。
當(dāng)一個(gè)客戶(hù)端要訪(fǎng)問(wèn) object.yourcompany.com 的時(shí)候,需要將域名轉(zhuǎn)換為 IP 地址進(jìn)行訪(fǎng)問(wèn)家卖,所以它要請(qǐng)求本地 DNS 解析器眨层。
本地 DNS 解析器先查看看本地的緩存是否有這個(gè)記錄。如果有則直接使用上荡,因?yàn)樯厦娴倪^(guò)程太復(fù)雜了趴樱,如果每次都要遞歸解析,就太麻煩了酪捡。
如果本地?zé)o緩存叁征,則需要請(qǐng)求本地的 DNS 服務(wù)器。
本地的 DNS 服務(wù)器一般部署在你的數(shù)據(jù)中心或者你所在的運(yùn)營(yíng)商的網(wǎng)絡(luò)中逛薇,本地 DNS 服務(wù)器也需要看本地是否有緩存捺疼,如果有則返回,因?yàn)樗膊幌氚焉厦娴倪f歸過(guò)程再走一遍永罚。
至 7. 如果本地沒(méi)有啤呼,本地 DNS 才需要遞歸地從根 DNS 服務(wù)器卧秘,查到.com 的頂級(jí)域名服務(wù)器,最終查到 yourcompany.com 的權(quán)威 DNS 服務(wù)器官扣,給本地 DNS 服務(wù)器翅敌,權(quán)威 DNS 服務(wù)器按說(shuō)會(huì)返回真實(shí)要訪(fǎng)問(wèn)的 IP 地址。
對(duì)于不需要做全局負(fù)載均衡的簡(jiǎn)單應(yīng)用來(lái)講醇锚,yourcompany.com 的權(quán)威 DNS 服務(wù)器可以直接將 object.yourcompany.com 這個(gè)域名解析為一個(gè)或者多個(gè) IP 地址哼御,然后客戶(hù)端可以通過(guò)多個(gè) IP 地址坯临,進(jìn)行簡(jiǎn)單的輪詢(xún)焊唬,實(shí)現(xiàn)簡(jiǎn)單的負(fù)載均衡。
但是對(duì)于復(fù)雜的應(yīng)用看靠,尤其是跨地域跨運(yùn)營(yíng)商的大型應(yīng)用赶促,則需要更加復(fù)雜的全局負(fù)載均衡機(jī)制,因而需要專(zhuān)門(mén)的設(shè)備或者服務(wù)器來(lái)做這件事情挟炬,這就是全局負(fù)載均衡器(GSLB鸥滨,Global Server Load Balance)。
在 yourcompany.com 的 DNS 服務(wù)器中谤祖,一般是通過(guò)配置 CNAME 的方式婿滓,給 object.yourcompany.com 起一個(gè)別名,例如 object.vip.yourcomany.com粥喜,然后告訴本地 DNS 服務(wù)器凸主,讓它請(qǐng)求 GSLB 解析這個(gè)域名,GSLB 就可以在解析這個(gè)域名的過(guò)程中额湘,通過(guò)自己的策略實(shí)現(xiàn)負(fù)載均衡卿吐。
圖中畫(huà)了兩層的 GSLB,是因?yàn)榉诌\(yùn)營(yíng)商和地域锋华。我們希望不同運(yùn)營(yíng)商的客戶(hù)嗡官,可以訪(fǎng)問(wèn)相同運(yùn)營(yíng)商機(jī)房中的資源,這樣不跨運(yùn)營(yíng)商訪(fǎng)問(wèn)毯焕,有利于提高吞吐量衍腥,減少時(shí)延。
第一層 GSLB纳猫,通過(guò)查看請(qǐng)求它的本地 DNS 服務(wù)器所在的運(yùn)營(yíng)商婆咸,就知道用戶(hù)所在的運(yùn)營(yíng)商。假設(shè)是移動(dòng)续担,通過(guò) CNAME 的方式擅耽,通過(guò)另一個(gè)別名 object.yd.yourcompany.com,告訴本地 DNS 服務(wù)器去請(qǐng)求第二層的 GSLB物遇。
第二層 GSLB乖仇,通過(guò)查看請(qǐng)求它的本地 DNS 服務(wù)器所在的地址憾儒,就知道用戶(hù)所在的地理位置,然后將距離用戶(hù)位置比較近的 Region 里面乃沙,六個(gè)內(nèi)部負(fù)載均衡(SLB起趾,Server Load Balancer)的地址,返回給本地 DNS 服務(wù)器警儒。
本地 DNS 服務(wù)器將結(jié)果返回給本地 DNS 解析器训裆。
本地 DNS 解析器將結(jié)果緩存后,返回給客戶(hù)端蜀铲。
客戶(hù)端開(kāi)始訪(fǎng)問(wèn)屬于相同運(yùn)營(yíng)商的距離較近的 Region 1 中的對(duì)象存儲(chǔ)边琉,當(dāng)然客戶(hù)端得到了六個(gè) IP 地址,它可以通過(guò)負(fù)載均衡的方式记劝,隨機(jī)或者輪詢(xún)選擇一個(gè)可用區(qū)進(jìn)行訪(fǎng)問(wèn)变姨。對(duì)象存儲(chǔ)一般會(huì)有三個(gè)備份,從而可以實(shí)現(xiàn)對(duì)存儲(chǔ)讀寫(xiě)的負(fù)載均衡厌丑。
小結(jié)
好了定欧,這節(jié)內(nèi)容就到這里了,我們來(lái)總結(jié)一下:
DNS 是網(wǎng)絡(luò)世界的地址簿怒竿,可以通過(guò)域名查地址砍鸠,因?yàn)橛蛎?wù)器是按照樹(shù)狀結(jié)構(gòu)組織的,因而域名查找是使用遞歸的方法耕驰,并通過(guò)緩存的方式增強(qiáng)性能爷辱;
在域名和 IP 的映射過(guò)程中,給了應(yīng)用基于域名做負(fù)載均衡的機(jī)會(huì)耍属,可以是簡(jiǎn)單的負(fù)載均衡托嚣,也可以根據(jù)地址和運(yùn)營(yíng)商做全局的負(fù)載均衡。
最后厚骗,給你留兩個(gè)思考題:
全局負(fù)載均衡為什么要分地址和運(yùn)營(yíng)商呢示启?
全局負(fù)載均衡使用過(guò)程中,常常遇到失靈的情況领舰,你知道具體有哪些情況嗎夫嗓?對(duì)應(yīng)應(yīng)該怎么來(lái)解決呢?
歡迎給我留言3寤唷舍咖!