首先,你需要了解三個(gè)基礎(chǔ)網(wǎng)絡(luò)知識(shí)。 1 DNS 1.1 DNS簡(jiǎn)單說就是你給它一個(gè)域名,它解析一個(gè)IP給你。但是實(shí)際上情況不是這么簡(jiǎn)單的。 客戶端發(fā)起一個(gè)DNS查詢請(qǐng)求,提交一個(gè)完整主機(jī)名(例如www.abc.com)到設(shè)置的DNS服務(wù)器上,DNS服務(wù)器如果查詢到相關(guān)記錄,則返回這個(gè)記錄。對(duì)于IPv4,記錄分為A記錄或者CNAME。A記錄表示是一個(gè)IPv4的地址,CNAME表示為另外一個(gè)主機(jī)名(例如server1.realserver.com)。A記錄允許同名存在,多個(gè)不同的IP被對(duì)應(yīng)到同一個(gè)主機(jī)名上,也允許使用根記錄,本例中即為abc.com,不帶任何前綴;CNAME不允許同名存在,不允許根記錄,也不允許與A記錄同名。如果客戶端得到的返回是一個(gè)CNAME,則會(huì)重新再來一次DNS查詢?nèi)ソ馕鲞@個(gè)CNAME的IP。對(duì)于這個(gè)CNAME的查詢,可能返回另外的CNAME,則這個(gè)過程會(huì)很長(zhǎng),直至解析出A記錄。 1.2如果DNS服務(wù)器上沒有查詢到相關(guān)記錄,則會(huì)詢問上一層的DNS服務(wù)器。如果上一層服務(wù)器解析出結(jié)果,則它在返回給用戶結(jié)果時(shí),順便自己緩存一份。緩存的時(shí)間由域名的TTL決定。 1.3每個(gè)域名首先要注冊(cè)在跟DNS上NS服務(wù)器名稱。當(dāng)一個(gè)區(qū)域中最頂層的DNS也沒有用戶查詢的主機(jī)名記錄時(shí),則會(huì)首先向INTERNET跟DNS獲取這個(gè)NS服務(wù)器名稱,并嘗試向這個(gè)NS服務(wù)器發(fā)起查詢請(qǐng)求。NS服務(wù)器必須響應(yīng)并響應(yīng)這個(gè)查詢。如果DNS跟服務(wù)器無法被連接到、NS無法被找到、無法被連接到或者NS服務(wù)器無法解析,則本主機(jī)名最終解析失敗。 1.4 DNS如果返回多條A記錄時(shí),會(huì)生成一個(gè)有序集合。這個(gè)排序根據(jù)歷史查詢散列,并根據(jù)訪問者的IP所在區(qū)域優(yōu)化??蛻舳四玫降募现械牡谝粭lIP通常為一個(gè)優(yōu)化后的地址,但其他地址依舊可作為備選使用。 1.5 DNS服務(wù)器通常不歸主機(jī)管理商所有,并且由于需要快速響應(yīng),在查詢的時(shí)候是無法判斷主機(jī)狀態(tài)和負(fù)載的。但一些較大的機(jī)構(gòu),會(huì)自己擁有一個(gè)重新設(shè)計(jì)的DNS服務(wù)器,考慮到這些信息。而對(duì)于這種情況,外部公網(wǎng)的DNS只能解析出一個(gè)CNAME,并交由這個(gè)DNS來進(jìn)行后續(xù)解析(這個(gè)DNS被注冊(cè)為這個(gè)CNAME對(duì)應(yīng)的NS)。這種設(shè)計(jì)下的DNS通常被認(rèn)為是NLB(網(wǎng)絡(luò)負(fù)載均衡)設(shè)計(jì)的一部份。 1.6由于1.2提及的代理查詢以及TTL的機(jī)制,DNS其實(shí)并不能良好的實(shí)現(xiàn)服務(wù)器的輪詢負(fù)載均衡,但是可以實(shí)現(xiàn)區(qū)域優(yōu)化查詢,即對(duì)某個(gè)特定區(qū)域盡量返回其區(qū)域內(nèi)的IP結(jié)果。 2 HTTP頭 在發(fā)起HTTP請(qǐng)求時(shí),客戶端會(huì)同時(shí)提交要訪問的文件(一般在GET命令后)以及主機(jī)名(HOST字段),對(duì)方服務(wù)器會(huì)根據(jù)這個(gè)HOST來確定它要訪問的域名。所以一個(gè)主機(jī)在一個(gè)IP上并行存在多個(gè)不同的主機(jī)地址。 3 NLB 通常的NLB有三種解決辦法。 3.1本地DNS加速,如1.5所述的方法。 3.2 CDN(內(nèi)容分發(fā)網(wǎng)絡(luò))。CDN可以被看做是一個(gè)獨(dú)立的HTTP代理網(wǎng)絡(luò)。使用CDN的時(shí)候,DNS應(yīng)把域名解析到某個(gè)CDN的全球IP群上。CDN服務(wù)器得到HTTP請(qǐng)求后,會(huì)在轉(zhuǎn)發(fā)原真實(shí)服務(wù)器的數(shù)據(jù)時(shí),本地緩存一份。甚至可以實(shí)現(xiàn)數(shù)據(jù)的預(yù)推送。因此CDN非常適合于靜態(tài)數(shù)據(jù)的全球化緩存。例如微軟發(fā)布補(bǔ)丁、蘋果發(fā)布新產(chǎn)品、Wordpress、Amazon網(wǎng)站的圖片緩存都是使用了CDN技術(shù)。 3.3虛擬IP地址。通常情況下,一個(gè)IP不應(yīng)該被設(shè)置到超過一個(gè)設(shè)備上,因?yàn)槌^這個(gè)設(shè)置后,上層的路由器就不知道如何轉(zhuǎn)發(fā)這個(gè)包了。但是,如果路由器經(jīng)過了設(shè)置(例如BGP協(xié)議或者專門設(shè)計(jì)的路由軟件等),是可以在多個(gè)設(shè)備下共享同一個(gè)IP的。這種共享既可以是物理的(多個(gè)設(shè)備同時(shí)使用一個(gè)IP,由上層路由進(jìn)行分支選擇或者廣播、組播數(shù)據(jù)包),或者是輪詢的(多個(gè)設(shè)備輪流使用一個(gè)IP,同時(shí)只有一個(gè)設(shè)備使用這個(gè)IP,而這個(gè)IP可以在多個(gè)設(shè)備間高速切換)。如果某個(gè)應(yīng)用必須基于IP地址(例如DNS服務(wù)本身),只能使用這種方式來處理。 那么回頭看你三個(gè)問題。 Q1返回多個(gè)A紀(jì)錄后,客戶端會(huì)按照集合的順序依次嘗試訪問。這些數(shù)據(jù)在NS服務(wù)器上是單一存在的,但是會(huì)被多層DNS緩存。 Q2 HTTP頭段已經(jīng)講述。 Q3希望你看過NLB段后能理解。 |
|