DNS負載均衡與CDN原理結(jié)合

1. 背景

負載均衡(又稱為負載分擔),英文名稱為Load Balance,其意思就是將負載(工作任務(wù))進行平衡、分攤到多個操作單元上進行執(zhí)行,例如Web服務(wù)器、FTP服務(wù)器、企業(yè)關(guān)鍵應(yīng)用服務(wù)器和其它關(guān)鍵任務(wù)服務(wù)器等,從而共同完成工作任務(wù)。

通常負載均衡可以分為兩個層次:全局負載均衡(Global Server Load Balance, GSLB)和服務(wù)器負載均衡(Server Load Balance, SLB)。全局負載均衡是指對分別放置在不同的地理位置的服務(wù)器群間作負載均衡。服務(wù)器負載均衡是指對本地的服務(wù)器群做負載均衡。

2. 全局負載均衡

全局負載均衡主要用于在多個區(qū)域擁有自己服務(wù)器的站點,為了使全球用戶只以一個IP地址或域名就能訪問到離自己最近的服務(wù)器,從而獲得最快的訪問速度。

2.1. 服務(wù)器群選擇

對于全局負載均衡而言,其核心就是服務(wù)器群的選擇。對于某個特定的客戶,應(yīng)該將其定向到哪一個服務(wù)群?應(yīng)該使用什么標準來進行這種選擇?一般情況下,主要考慮兩個因素:臨近程度和負載大小。

臨近機制主要考察服務(wù)器群與用戶之間的物理距離。選擇地理位置最接近用戶的服務(wù)器集群,可以減少服務(wù)響應(yīng)到達用戶所經(jīng)過的中轉(zhuǎn)次數(shù),從而降低中轉(zhuǎn)節(jié)點對服務(wù)質(zhì)量的影響。常見的有兩種方式,一種是靜態(tài)配置,例如根據(jù)靜態(tài)的IP地址配置表進行IP地址到服務(wù)器群的映射。另一種方式是動態(tài)的檢測,例如實時地探測到目標IP的距離(可以采用到達目標IP經(jīng)過的跳數(shù)作為度量單位),然后比較探測結(jié)果進行選擇。

負載機制比較各個服務(wù)器群的負載,確定由哪一個服務(wù)器群來響應(yīng)請求。在全局負載均衡中,考察的是服務(wù)器群的負載,而不是單個服務(wù)器的負載,因此,需要更多地考慮普遍的問題,比如,需要考慮站點的最大連接數(shù)、站點的平均響應(yīng)時間、服務(wù)質(zhì)量等。

2.2. 常見實現(xiàn)方式

常見的GSLB實現(xiàn)方式有三種: DNS輪詢、HTTP重定向、IP欺騙(又稱三角傳輸)。這三種實現(xiàn)方式都是在用戶通過域名來訪問目標服務(wù)器時,由GSLB設(shè)備進行智能決策,將用戶引導到一個最佳的服務(wù)IP。

2.2.1. 基于DNS的GSLB

用戶訪問某個網(wǎng)站時,需要首先通過域名解析服務(wù)(DNS)獲得網(wǎng)站的IP。域名解析通常不是一次性完成的,常常需要查詢?nèi)舾刹煌挠蛎?wù)器才能找到對應(yīng)的IP。如下圖所示,用戶首先在本地配置一個本地DNS服務(wù)器地址,本地DNS服務(wù)器收到DNS請求后若不能解析,會將請求轉(zhuǎn)發(fā)給更高一級的DNS服務(wù)器直到找到域名對應(yīng)的IP或確定域名不存在。

(訪問網(wǎng)站時需要根據(jù)DNS獲取網(wǎng)站的IP, 才能建立用戶IP->服務(wù)器IP的TCP鏈接, 然而在獲取服務(wù)器IP之前,我們根本沒有機會建立這個鏈接, 所以我一開始以為智能DNS是根據(jù)用戶IP來選出最終的目的IP。 這是錯誤的,因為根本都還沒到達建立TCP的步驟。 所以唯一有可能的流程就是用戶查詢DNS時,所在機器發(fā)出請求的IP來做判斷,也就是說,基于DNS的負載均衡,是根據(jù)用戶的本地DNS IP來做判斷的,而不是用戶本地機器的IP。 這個概念必須要理清楚。)

DNS負載均衡

對于加入了GSLB的情況,一個GSLB設(shè)備(可能是一個4層交換機)會最終代替DNS服務(wù)器完成域名解析。下圖展示兩種流程的不同。

2.2.2. 基于HTTP重定向的GSLB

為了解決基于DNS實現(xiàn)方式判斷不準的問題,又出現(xiàn)了基于HTTP重定向的GSLB。這種方案中GSLB使用HTTP重定向技術(shù),將用戶訪問重定向到最合適的服務(wù)器上。

基于HTTP重定向的GSLB工作流程.jpg

使用基于HTTP重定向方案,首先在DNS中將GSLB設(shè)備的IP地址登記為域名的A記錄(既域名對應(yīng)的IP)。如上圖所示,用戶首先通過DNS得到GSLB設(shè)備的IP地址,此時用戶以為這就是站點服務(wù)器的IP,并向其發(fā)送HTTP請求。GSLB設(shè)備收到HTTP請求后使用一定策略選擇一個最合適的服務(wù)器,然后GSLB設(shè)備向用戶發(fā)送一個HTTP重定向指令(HTTP302),并附上選出的服務(wù)器的IP地址。最后,用戶根據(jù)重定向IP訪問站點的服務(wù)器。
這一方案的優(yōu)點是:由于直接向用戶發(fā)送HTTP重定向指令,可以得到用戶的真實IP,從而解決了判斷不準確的問題。其缺點是只能為HTTP訪問重定向。
(這種方法就是通過是用戶IP 建立與GSLB的IP的HTTP請求鏈接,GSLB獲取到http請求后能讀取到用戶IP, 然后根據(jù)這個用戶IP查詢最適合的目標服務(wù)器IP, 然后返回HTTP 302,包含跳轉(zhuǎn)URL,讓用戶再次請求過去目的服務(wù)器。這種方式就不需要根據(jù)用戶的DNS IP 來判斷,會精準一點, 但是他的轉(zhuǎn)發(fā)是基于HTTP的肯定是沒TCP/IP層的速度來的快,而且這種方式只適用于HTTP協(xié)議。)

2.2.3. 基于IP欺騙的GSLB

HTTP重定向方案解決了判斷不準確的問題,但只能針對HTTP協(xié)議應(yīng)用使用。對于HTTP協(xié)議以外的訪問,就需要使用基于IP欺騙(又稱三角傳輸)的GSLB。


基于IP欺騙(三角傳輸)的GSLB工作流程

基于IP欺騙的方案同樣需要首先將GSLB設(shè)備的IP地址在DNS中登記為域名的A記錄,這樣用戶對該域名的請求包都會先發(fā)送到GSLB設(shè)備。如上圖所示,GSLB設(shè)備首次收到服務(wù)請求包后,會選擇一個最合適的服務(wù)器,并將服務(wù)請求包發(fā)送到該服務(wù)器。服務(wù)器在向用戶發(fā)送響應(yīng)包時,將其源IP地址字段改為GSLB設(shè)備的IP,發(fā)送給用戶。

這樣,整個過程對用戶來說,感覺到的只是GSLB設(shè)備在為其提供服務(wù),并不知道其中經(jīng)歷這樣一個三角傳輸?shù)倪^程。而且這種方案可以對所有類型的訪問如HTTP、FTP等進行重定向,但其速度和效率相對比前兩種方案要差一點,因為用戶所有的訪問請求都通過三個點才能響應(yīng),經(jīng)歷了更多的路徑和處理,所以其主要作為HTTP重定向方案的補充方案在同一GSLB設(shè)備中實現(xiàn)。
(這個IP欺騙的方式其實原理是跟上面的HTTP重定向原理基本相同,只不過這個適用于不能用HTTP協(xié)議的時候,所以他們只能發(fā)送IP包,然后GSLB根據(jù)IP包,也就是客戶IP是可以獲取到的,根據(jù)算法找出目標IP, 并將服務(wù)請求包發(fā)送到該服務(wù)器。服務(wù)器在向用戶發(fā)送響應(yīng)包時,將其源IP地址字段改為GSLB設(shè)備的IP,發(fā)送給用戶)

DNS負載均衡總結(jié)

上面三種方式,DNS輪詢、HTTP重定向、IP欺騙,都是返回一個IP 給客戶端建立連接,只是DNS輪詢是真實返回內(nèi)容服務(wù)器的IP, HTTP重定向返回是GSLB的IP, 讓客戶端先建立GSLB的http連接再302跳轉(zhuǎn)到目標機器。所以他們都是返回一個IP, 讓客戶端連接至于接下來連接會做什么操作,就看不同方法了。

3. 內(nèi)容分發(fā)網(wǎng)絡(luò)

使用GSLB設(shè)備可以為用戶選擇最合適的服務(wù)器群,但受Web服務(wù)器的負荷和傳輸距離等因素的影響,響應(yīng)速度依然經(jīng)常不能滿足用戶的需求。這一問題的解決方案就是在傳輸網(wǎng)絡(luò)上利用緩存技術(shù)使得Web服務(wù)數(shù)據(jù)流能夠就近訪問。內(nèi)容分發(fā)網(wǎng)絡(luò)(CDN)正是這種思想的一個實現(xiàn),CDN使用GSLB設(shè)備將用戶引導到最合適的緩存節(jié)點(距離近,負載低),使得用戶在訪問靜態(tài)內(nèi)容時獲得更好的體驗。
(利用GSLB選擇最優(yōu)的目標的IP,GSLB可以上面的任何一種技術(shù),平常熟知的智能DNS只是其中一種,看完上面的介紹,其實還可以用HTTP重定向或者IP欺騙,這樣就可以利用客戶端IP來選擇服務(wù)器目標。)

但是我們平常用CDN是用哪種GSLB方式的呢? 答:DNS輪詢,因為我們dig我們的目標地址的時候,沒有建立HTTP鏈接他就返回了不同的IP回來。

CDN原理圖.png

3.2. CDN組成

一個CDN網(wǎng)絡(luò)主要由以下幾部分組成:內(nèi)容緩存設(shè)備、內(nèi)容分發(fā)管理設(shè)備、本地負載均衡交換機、GSLB設(shè)備和CDN管理系統(tǒng),其網(wǎng)絡(luò)結(jié)構(gòu)如下圖所示:


CDN網(wǎng)絡(luò)結(jié)構(gòu).png

其中,內(nèi)容緩存設(shè)備Cache用于緩存內(nèi)容實體和對緩存內(nèi)容進行組織和管理。當有用戶訪問該客戶內(nèi)容時,直接由各緩存服務(wù)器響應(yīng)用戶的請求。

內(nèi)容分發(fā)管理設(shè)備主要負責核心Web服務(wù)器內(nèi)容到CDN網(wǎng)絡(luò)內(nèi)緩存設(shè)備的內(nèi)容推送、刪除、校驗以及內(nèi)容的管理、同步。

GSLB設(shè)備則實現(xiàn)CDN全網(wǎng)各緩存節(jié)點之間的資源負載均衡,它與各節(jié)點的SLB設(shè)備保持通信,搜集各節(jié)點緩存設(shè)備的健康狀態(tài)、性能、負載等,自動將用戶指引到位于其地理區(qū)域中的服務(wù)器或者引導用戶離開擁擠的網(wǎng)絡(luò)和服務(wù)器。還可以通過使用多站點的內(nèi)容和服務(wù)來提高容錯性和可用性,防止因本地網(wǎng)或區(qū)域網(wǎng)絡(luò)中斷、斷電或自然災(zāi)害而導致的故障。

CDN管理系統(tǒng)實現(xiàn)對全網(wǎng)設(shè)備的管理,對系統(tǒng)的配置。它不僅能對系統(tǒng)中的各個設(shè)備進行實時監(jiān)控,對各種故障產(chǎn)生相應(yīng)的告警,還能實時觀測到系統(tǒng)中總的流量以及各節(jié)點的流量,并保存在系統(tǒng)的數(shù)據(jù)庫中,作為統(tǒng)計分析的基礎(chǔ)數(shù)據(jù),并對日志文件進行管理、報告,作為計費的基礎(chǔ)數(shù)據(jù)。

3.3. CDN工作流程

CDN網(wǎng)絡(luò)結(jié)合了GSLB與緩存技術(shù),其工作流程如下圖所示:


CDN工作流程.png

用戶訪問某個站點的內(nèi)容時,若該站點使用了CDN網(wǎng)絡(luò),則在用戶會在域名解析時獲得CDN網(wǎng)絡(luò)GSLB設(shè)備的IP地址。GSLB設(shè)備根據(jù)其預設(shè)的選擇策略(如,地理區(qū)域、用戶時間等)為用戶選擇最合適的內(nèi)容緩存節(jié)點,并且使用某種方式(如,基于DNS、基于HTTP重定向、基于IP欺騙的方式等)導引用戶訪問所選的內(nèi)容緩存節(jié)點。

用戶繼續(xù)向緩存節(jié)點發(fā)出請求,若緩存中包含請求的內(nèi)容,則直接返回給用戶,否則從核心Web服務(wù)器中獲取該內(nèi)容,緩存后返回給用戶。這樣當用戶再次訪問相同內(nèi)容或其他用戶訪問相同內(nèi)容時,可以直接從緩存中讀取,提高了效率。

參考文章: https://blog.csdn.net/u010340143/article/details/9062213

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容