400-638-8808
|
微信公眾號





穩(wěn)定可靠 永不間斷

海外收發(fā) 暢通無阻

協(xié)同辦公 資源管理

超大郵件 超級功能

智能反垃圾郵件技術(shù)
易管理 免維護(hù)

對一次網(wǎng)絡(luò)請求過程的了解程度,一是展現(xiàn)你的專業(yè)知識;二是深刻的理解,讓你在大型網(wǎng)站架構(gòu)中做出更適合、可靠的架構(gòu)。而DNS是這一切的出發(fā)點(diǎn),本文結(jié)合一張常用架構(gòu)圖,來描述一下這個(gè)過程。
部署架構(gòu)
大型的web服務(wù),我們的部署架構(gòu)一般如下圖。先上圖再解釋。

這里來解釋下,為什么要這樣架構(gòu)。 首先客戶端的請求會通過 DNS 獲取到對應(yīng)的服務(wù)器IP(實(shí)際上是LB的IP地址),這一層會有 DNS的負(fù)載均衡,并且如果是靜態(tài)站資源會進(jìn)入到CDN,這里DNS與CDN如何完成接棒的過程,后面會詳細(xì)解釋。 當(dāng)請求到達(dá)LB層的時(shí)候(應(yīng)用層協(xié)議是HTTP協(xié)議),這一層又會做一次負(fù)載均衡(可能用LVS或者Nginx做)。這里我們有兩種不同的處理方式,一條路徑會進(jìn)入到代理集群,一條路徑直接進(jìn)入到應(yīng)用集群。這是為什么?
LB到代理集群
通過最頂層的LB負(fù)責(zé)均衡后到達(dá)代理機(jī)器,這里不直接進(jìn)入到應(yīng)用集群,還要搞一層代理的目的主要是方便我們在代理集群進(jìn)行各種高級(騷)操作。
比如:請求日志收集,自定義緩存,自定義的負(fù)載均衡,自定義的路由規(guī)則制定(跨機(jī)房,路由分組)
LB到應(yīng)用集群
上面到代理層有那么多好處,為什么還有繞過代理層這條路徑存在呢?這主要是針對大流量服務(wù)。因?yàn)榇韺右驗(yàn)橛泻芏囝~外的操作,導(dǎo)致響應(yīng)會變長,路徑增加,到下一個(gè)集群多了一次網(wǎng)絡(luò)傳輸往返。
所以,一般針對大流量服務(wù),為了防止代理被打滿,響應(yīng)更快,會直接在外網(wǎng)LB上進(jìn)行負(fù)載到應(yīng)用集群。
通過上面的分割后,最終都會到達(dá)應(yīng)用集群,每一臺機(jī)器上我們會部署一臺 Nginx 來按照域名轉(zhuǎn)到對應(yīng)服務(wù),當(dāng)然這里完全也可以不是 Nginx,比如微服務(wù),這里可能是一個(gè) SideCard 代理。這里主要是為了便于說明我們后面全部都是當(dāng)成Nginx。服務(wù)調(diào)用 DB Cache 等,都是通過域名,這是為了負(fù)載均衡,請求時(shí),會通過內(nèi)網(wǎng)DNS服務(wù),完成域名解析,然后拿到內(nèi)網(wǎng)的 LB 的IP。然后再這里進(jìn)行內(nèi)網(wǎng)的負(fù)載均衡,會根據(jù)域名的端口來檢查你是寫操作、還是讀操作返回IP。常規(guī)一點(diǎn)會保證是單點(diǎn)寫入,多點(diǎn)讀取。來完成數(shù)據(jù)一致性的保障。
整個(gè)大體過程如此,接下來我們詳細(xì)說一下 DNS與CDN相關(guān)的工作原理。
DNS如何實(shí)現(xiàn)IP查找
為了后面說清楚CDN,這里先介紹DNS的解析過程。當(dāng)然此類文章網(wǎng)絡(luò)上已經(jīng)極多。但是我還是想按照我的理解來說一下DNS是如何工作的。
在整個(gè)DNS過程中有四個(gè)重要概念,下面解釋下。
DNS Resolver - 遞歸解析器,主要是接收客戶端發(fā)出的域名解析請求,并發(fā)送 DNS query 查詢請求。對于客戶端來說它不需要任何操勞,等待 DNS Resolver 告訴自己域名轉(zhuǎn)IP的結(jié)果就好。
Root Server - 這是轉(zhuǎn)換IP執(zhí)行的第一步查詢,根服務(wù)器并不會保存具體的域名IP映射信息。它就像一個(gè)索引服務(wù)器,會告訴你下一步該去那臺 TLD Server 查詢。
TLD Server - 這是頂級域名服務(wù)器,是執(zhí)行IP查詢的第二步,這里會告訴 DNS Resolver 權(quán)威域名服務(wù)器的地址。
Authoriative Server - 權(quán)威域名服務(wù)器就是包含了完整的機(jī)器名的域名,例如:www.example.com ,在這臺機(jī)器上保存了這個(gè)具體域名對應(yīng)的IP地址。

下面根據(jù)圖中的十個(gè)步驟說一下每一步都在干嘛。
1.一個(gè)用戶在瀏覽器輸入了:example.com,這時(shí)會產(chǎn)生一個(gè) DNS 查詢,從而進(jìn)入到 DNS Resolver中;
2.Resolver 會進(jìn)入到 root server 進(jìn)行查詢;
3.root server 返回了 TLD server 的地址,查詢請求轉(zhuǎn)向頂級域名服務(wù),這里是 .com 服務(wù)器。
4.遞歸解析器向 .com 服務(wù)器發(fā)送一個(gè)請求;
5.TLD server 收到請求后會返回 example.com 權(quán)威服務(wù)器的地址;
6.遞歸解析器又發(fā)了一個(gè)向權(quán)威服務(wù)器查詢的請求,至此權(quán)威服務(wù)器查詢自己的映射表拿到IP;
7.返回查詢到的IP給了 DNS Resolver;
8.DNS Resolver返回IP給瀏覽器,瀏覽器將會用這個(gè)IP來建立連接,發(fā)起請求;
9.客戶端通過這個(gè)IP地址,發(fā)起一個(gè) HTTP 請求;
10.服務(wù)器解析請求,并返回?cái)?shù)據(jù)到瀏覽器。
這里需要補(bǔ)充一點(diǎn)是,上面每一步其實(shí)都有DNS緩存的設(shè)計(jì)。比如:
.瀏覽器會緩存DNS的結(jié)果,(chrome://net-internals/#dns)
.操作系統(tǒng)的DNS模塊會緩存
.后面的每一層級也都有緩存
所以很多時(shí)候,我們的解析過程并不是要順序執(zhí)行完這8個(gè)步驟。這就跟我們自己開發(fā)的應(yīng)用服務(wù)一樣,層層緩存,有緩存就讀取緩存結(jié)果,緩存實(shí)現(xiàn)就執(zhí)行完整流程。
DNS的解析分類
DNS有多種解析記錄可以設(shè)置,我這里介紹三個(gè)很常用的記錄。
A記錄 - 被稱為IP指向,用戶設(shè)置自己域名指到對應(yīng)的IP主機(jī)上。如果想要利用A記錄實(shí)現(xiàn)負(fù)載均衡需要主機(jī)商的支持。
CNAME記錄 - 它相當(dāng)于為一個(gè)主機(jī)名設(shè)置一個(gè)別名,而且該記錄不能直接使用IP,只能是另一個(gè)主機(jī)的別名。CDN主要就是利用該記錄來完成的。如果有A記錄與CNAME記錄同時(shí)存在,A記錄會被優(yōu)先使用,換句話說CNAME記錄不會生效。
NS記錄 - 用來設(shè)置一個(gè)域名的權(quán)威服務(wù)器路徑,該記錄只會對子域名生效。這個(gè)地方可以設(shè)置IP也可以設(shè)置另外一個(gè)權(quán)威服務(wù)器的域名。需要重點(diǎn)指出的是它的優(yōu)先級高于A記錄,并且它在DNS解析過程中,會跳過2,3,4,5步。
了解完了DNS的步驟,接下來就進(jìn)入到CDN部分的分析。
CDN訪問加速度

什么是CDN呢?中文翻譯過來就是內(nèi)容分發(fā)網(wǎng)絡(luò)?磸垐D。
沒有CDN的時(shí)候,不管哪里的用戶訪問我們的站點(diǎn),都需要到我們數(shù)據(jù)中心來獲取數(shù)據(jù)(單純的DNS過程)。而有了CDN之后,用戶根據(jù)自己的地理位置會選擇距離自己最近的緩存數(shù)據(jù)中心來獲取數(shù)據(jù)。不會每次都到源站(應(yīng)用服務(wù)器)來獲取數(shù)據(jù)。為了理解這個(gè)過程,我們是如果在完整的DNS過程中,實(shí)現(xiàn)CDN的呢?
接下來我們需要回答兩個(gè)問題。
1.CDN帶來了什么好處。
2.如何解析到CDN。
CDN帶來的好處
了解一個(gè)東西之前最好知道它能干什么,帶來的好處是什么。然后我們再去看它的運(yùn)行原理。對于CDN有以下幾個(gè)方面的好處。
提高頁面加載速度
這是最顯而易見的一個(gè)優(yōu)勢,通過上面的圖,大家也可以直觀感受下,用戶訪問距離自己最近的機(jī)器,速度肯定是最快的。并且網(wǎng)站的加載速度越快那么用戶體驗(yàn)越優(yōu)秀,你的網(wǎng)站更會受到對應(yīng)用戶的喜愛。至于如何實(shí)現(xiàn)就近訪問的,后面原理部分介紹。
增加內(nèi)容的冗余
CDN是一個(gè)典型的分布式架構(gòu),它通過增加數(shù)據(jù)的冗余,一方面保障在大流量面前有多臺服務(wù)器能夠提供相同的數(shù)據(jù);另一方面當(dāng)部分機(jī)器出現(xiàn)故障時(shí),可以進(jìn)行故障轉(zhuǎn)移。
節(jié)省帶寬
如果大家自己買過云服務(wù)就知道,帶寬每增加一點(diǎn)價(jià)格就飆升。使用CDN后,由于流量被分流了,那么原機(jī)器帶寬要求自然就降低了。當(dāng)然帶寬費(fèi)用降低了,你還需要為CDN付費(fèi)。
保障服務(wù)安全
CDN可防止的攻擊:DDOS攻擊,該攻擊就是通過巨大流量打滿你的帶寬,讓你喪失服務(wù)能力。那么由于CDN的存在,它將巨大的流量進(jìn)行了分流。那么源站壓力自然小了。這其實(shí)也是高并發(fā)需要考慮的。
CDN目前不僅僅是只能緩存靜態(tài)的HTML、CSS、JS、VIDEO,現(xiàn)在還有能夠緩存動態(tài)接口內(nèi)容的CDN,這為我們在架構(gòu)高并發(fā)的服務(wù)時(shí),提供了更多的手段進(jìn)行選擇。
CDN工作原理
在介紹DNS的時(shí)候,介紹了客戶端是如何獲取到IP地址的。那么有了CDN之后,這個(gè)過程該怎么處理呢?
CDN其實(shí)就是放在應(yīng)用服務(wù)器與用戶之間的一層緩存。所以如果使用DNS的時(shí)候,返回給客戶端的是CDN機(jī)器的IP而不是應(yīng)用的IP,那么自然就走到了CDN機(jī)器上。
為了實(shí)現(xiàn)上述目的,我們會為該域名配置一個(gè) CNAME(大家注意上面提到的CNAME與A記錄的優(yōu)先級),那么這個(gè)CNAME是最終如何解析到對應(yīng)的CDN機(jī)器呢?其實(shí)流程與DNS解析是一樣的。當(dāng)發(fā)現(xiàn)一個(gè)域名設(shè)置了CNAME時(shí),DNS解析器會繼續(xù)解析這個(gè)CNAME別名(其實(shí)就是另一個(gè)域名)。對這個(gè)CNAME解析的時(shí)候會用到全局負(fù)載DNS解析,它會根據(jù)訪問者的地理位置信息返回對應(yīng)的IP(CDN機(jī)器的IP)。因此客戶端實(shí)際上得到的是距離它最近的CDN機(jī)器的IP地址。
如果說用戶訪問CDN,但是CDN上沒有對應(yīng)內(nèi)容會怎么辦?此時(shí)CDN機(jī)器其實(shí)會根據(jù)自身專用的DNS解析服務(wù),根據(jù)域名得到源站的IP,然后向源站發(fā)送請求獲取數(shù)據(jù),并把這些數(shù)據(jù)緩存到本地,方便后續(xù)使用;同時(shí)返回本次結(jié)果,完成本次請求的訪問。
需要說一下的是,CDN其實(shí)也是分層的。距離用戶最近的稱之為邊緣節(jié)點(diǎn)。而CDN的中心服務(wù)器集群被稱為二級緩存。在上面就是應(yīng)用部署的源站。一般邊緣節(jié)點(diǎn)沒數(shù)據(jù)就去找二級緩存,二級緩存沒數(shù)據(jù)就去找源站(被稱為回源)。
小結(jié)
關(guān)于 DNS 的過程,文中是以流程介紹為主,至于更細(xì)節(jié)的依賴協(xié)議、傳輸過程都忽略了。 關(guān)于CDN也是我們經(jīng)常用到的性能提升手段,后續(xù)要寫的秒殺相關(guān)文章,就會用到它來提升性能。特別是CDN的分布式設(shè)計(jì)、解析過程在我們平常設(shè)計(jì)應(yīng)用架構(gòu)時(shí)非常有參考意義。(來源微信公眾號:大愚Talk)
產(chǎn)品與服務(wù)
香港服務(wù)器 香港高防服務(wù)器 美國服務(wù)器 韓國服務(wù)器 新加坡服務(wù)器 日本服務(wù)器 臺灣服務(wù)器云服務(wù)器
香港云主機(jī) 美國云主機(jī) 韓國云主機(jī) 新加坡云主機(jī) 臺灣云主機(jī) 日本云主機(jī) 德國云主機(jī) 全球云主機(jī)高防專線
海外高防IP 海外無限防御 SSL證書 高防CDN套餐 全球節(jié)點(diǎn)定制 全球?qū)>GPLC關(guān)于我們
關(guān)于天下數(shù)據(jù) 數(shù)據(jù)招商加盟 天下數(shù)據(jù)合作伙伴 天下數(shù)據(jù)團(tuán)隊(duì)建設(shè) 加入天下數(shù)據(jù) 媒體報(bào)道 榮譽(yù)資質(zhì) 付款方式關(guān)注我們
微信公眾賬號
新浪微博
天下數(shù)據(jù)手機(jī)站 關(guān)于天下數(shù)據(jù) 聯(lián)系我們 誠聘英才 付款方式 幫助中心 網(wǎng)站備案 解決方案 域名注冊 網(wǎng)站地圖
天下數(shù)據(jù)18年專注海外香港服務(wù)器、美國服務(wù)器、海外云主機(jī)、海外vps主機(jī)租用托管以及服務(wù)器解決方案-做天下最好的IDC服務(wù)商
《中華人民共和國增值電信業(yè)務(wù)經(jīng)營許可證》 ISP證:粵ICP備07026347號
朗信天下發(fā)展有限公司(控股)深圳市朗玥科技有限公司(運(yùn)營)聯(lián)合版權(quán)
深圳總部:中國.深圳市南山區(qū)深圳國際創(chuàng)新谷6棟B座10層 香港總部:香港上環(huán)蘇杭街49-51號建安商業(yè)大廈7樓
7×24小時(shí)服務(wù)熱線:4006388808香港服務(wù)電話:+852 67031102
本網(wǎng)站的域名注冊業(yè)務(wù)代理北京新網(wǎng)數(shù)碼信息技術(shù)有限公司的產(chǎn)品