DNS 服務(wù)器
在網(wǎng)絡(luò)世界盐捷,你肯定記得住網(wǎng)站的名稱(chēng),但是很難記住網(wǎng)站的 IP 地址他去,因而也需要一個(gè)地址簿毙驯,就是DNS 服務(wù)器。每個(gè)人上網(wǎng)灾测,都需要訪問(wèn)它爆价,但是同時(shí),這對(duì)它來(lái)講也是非常大的挑戰(zhàn)媳搪。一旦它出了故障铭段,整個(gè)互聯(lián)網(wǎng)都將癱瘓。另外秦爆,上網(wǎng)的人分布在全世界各地序愚,如果大家都去同一個(gè)地方訪問(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 解析
流程。
- 電腦客戶端會(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)自客戶端的請(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ù)器查詢后將對(duì)應(yīng)的 IP 地址 X.X.X.X 告訴本地 DNS兵多。
-
本地 DNS 再將 IP 地址返回客戶端尖啡,客戶端和目標(biāo)建立連接
整個(gè)流程如下圖所示:
image.png
負(fù)載均衡
內(nèi)部負(fù)載均衡
例如,一個(gè)應(yī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ù)的話奠涌,一換 IP 地址,就需要將這些應(yīng)用全部修改一遍磷杏。但是如果配置
了域名溜畅,則只要在 DNS 服務(wù)器里,將域名映射為新的 IP 地址极祸,這個(gè)工作就完成了慈格,大大簡(jiǎn)化了運(yùn)維。
在這個(gè)基礎(chǔ)上贿肩,我們可以再進(jìn)一步峦椰。例如,某個(gè)應(yīng)用要訪問(wèn)另外一個(gè)應(yīng)用汰规,如果配置另外一個(gè)應(yīng)用的 IP
地址汤功,那么這個(gè)訪問(wèn)就是一對(duì)一的。但是當(dāng)被訪問(wèn)的應(yīng)用撐不住的時(shí)候溜哮,我們其實(shí)可以部署多個(gè)滔金。但
是,訪問(wèn)它的應(yīng)用茂嗓,如何在多個(gè)之間進(jìn)行負(fù)載均衡餐茵?只要配置成為域名就可以了。在域名解析的時(shí)候述吸,
我們只要配置策略忿族,這次返回第一個(gè) IP锣笨,下次返回第二個(gè) IP,就可以實(shí)現(xiàn)負(fù)載均衡了
全局負(fù)載均衡道批。
為了保證我們的應(yīng)用高可用错英,往往會(huì)部署在多個(gè)機(jī)房,每個(gè)地方都會(huì)有自己的 IP 地址隆豹。當(dāng)用戶訪問(wèn)某個(gè)
域名的時(shí)候椭岩,這個(gè) IP 地址可以輪詢?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)一定的高可用碉考。
另外塌计,我們肯定希望北京的用戶訪問(wèn)北京的數(shù)據(jù)中心,上海的用戶訪問(wèn)上海的數(shù)據(jù)中心侯谁,這樣夺荒,客戶體
驗(yàn)就會(huì)非常好,訪問(wèn)速度就會(huì)超快良蒸。這就是全局負(fù)載均衡的概念。
示例:DNS 訪問(wèn)數(shù)據(jù)中心中對(duì)象存儲(chǔ)上的靜態(tài)資源
我們通過(guò) DNS 訪問(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è)客戶端要訪問(wèn) object.yourcompany.com 的時(shí)候邪狞,需要將域名轉(zhuǎn)換為 IP 地址進(jìn)行訪問(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í)要訪問(wèn)的 IP 地址扎狱。
對(duì)于不需要做全局負(fù)載均衡的簡(jiǎn)單應(yīng)用來(lái)講侧到,yourcompany.com 的權(quán)威 DNS 服務(wù)器可以直接將
object.yourcompany.com 這個(gè)域名解析為一個(gè)或者多個(gè) IP 地址,然后客戶端可以通過(guò)多個(gè) IP 地址淤击,
進(jìn)行簡(jiǎ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)商的客戶屯烦,可以訪問(wèn)相同運(yùn)營(yíng)商機(jī)房
中的資源,這樣不跨運(yùn)營(yíng)商訪問(wèn)兔毒,有利于提高吞吐量漫贞,減少時(shí)延。
- 第一層 GSLB育叁,通過(guò)查看請(qǐng)求它的本地 DNS 服務(wù)器所在的運(yùn)營(yíng)商迅脐,就知道用戶所在的運(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ù)器所在的地址窃躲,就知道用戶所在的地理位置,然后
將距離用戶位置比較近的 Region 里面钦睡,六個(gè)內(nèi)部負(fù)載均衡(SLB蒂窒,Server Load Balancer)的地
址,返回給本地 DNS 服務(wù)器荞怒。 - 本地 DNS 服務(wù)器將結(jié)果返回給本地 DNS 解析器洒琢。
- 本地 DNS 解析器將結(jié)果緩存后,返回給客戶端褐桌。
- 客戶端開(kāi)始訪問(wèn)屬于相同運(yùn)營(yíng)商的距離較近的 Region 1 中的對(duì)象存儲(chǔ)衰抑,當(dāng)然客戶端得到了六個(gè) IP
地址,它可以通過(guò)負(fù)載均衡的方式荧嵌,隨機(jī)或者輪詢選擇一個(gè)可用區(qū)進(jìn)行訪問(wèn)呛踊。對(duì)象存儲(chǔ)一般會(huì)有三
個(gè)備份,從而可以實(shí)現(xiàn)對(duì)存儲(chǔ)讀寫(xiě)的負(fù)載均衡啦撮。
——學(xué)自極客時(shí)間