1. 程式人生 > >基於DNS解析的GSLB《CDN技術詳解》

基於DNS解析的GSLB《CDN技術詳解》

基於DNS解析的GSLB工作方式

基於DNS解析的GSLB方案實際上就是把負載均衡裝置部署在DNS系統中。在使用者發出任何應用連線請求時,首先必須通過DNS系統來請求獲得伺服器的IP地址,基於DNS的GSLB正是在返回DNS解析結果的過程中進行智慧決策,給使用者返回一個最佳的伺服器的IP地址。從使用者的視角看,整個應用流程與沒有GSLB參與時沒有發生任何變化。

DNS系統本身是具備簡單負載分配能力的,這是基於DNS的輪詢機制。如果有多臺Web伺服器同時為站點HTTP://www.CDNbook.com提供服務,CDNbook的權威伺服器可能會解析出一個或多個IP地址。權威域名伺服器還可以調整響應中IP地址的排列方式,即在每次響應中將不同的IP地址置於首位,通過這種方式實現對這些Web伺服器的負載均衡。

基於 DNS 解析方式的 GSLB 的實現關鍵,就在於使 DNS “智慧化”。簡單來說,就是通過建立 IP 地址訪問列表,判斷使用者的訪問來源,以確定其訪問節點的位置。下面淺析如何實現智慧 DNS:

1.通過CNAME方式實現負載均衡

CNAME記錄是描述一個域名或主機名的別名,域名伺服器獲得CNAME記錄後,就會用記錄中的別名來替換查詢的域名或主機名。後面會查詢這個別名的A記錄來獲得相應的IP地址

通過CNAME方式來實現負載均衡,實際上是利用了DNS的兩個機制:一是別名機制,二是輪詢機制。具體操作簡單地說就是:

  1. 先將GSLB的主機名定義為所查詢域名的權威DNS伺服器的別名;
  2. 然後將GSLB主機名新增多條A記錄,分別對應多個伺服器的IP地址;
  3. 本地DNS伺服器會向客戶端返回多個IP地址作為域名的查詢結果,並且這些IP地址的排列順序是輪換的。客戶端一般會選擇首個IP地址進行訪問。

因為實現簡單,並且不需要更改公共DNS系統的配置,所以通過CNAME方式實現負載均衡是目前業界使用最多的方式,在後面我們會用實際的例子來幫助讀者再深人理解這種方式。

2.負載均衡器作為權威DNS伺服器

把負載均衡器作為一個域名空間的權威DNS伺服器,這樣負載均衡器就會接收所有對這個域的DNS請求,從而能夠根據預先設定的一些策略來提供對域名的智慧DNS解析

此時,負載均衡器已經接管了權威DNS伺服器的所有解析工作,無論使用者訪問的網站是否是需要進行解析的域名,其DNS請求都會被髮送到負載均衡器上,所以整個域的DNS解析能力或多或少都會受到影響,影響的程度取決於負載均衡器能實現的DNS功能的程度,這因產品而異。事實上,有些產品,比如F5網路公司的3DNS具有完整的DNS功能以廈增強的GSLB特性,Foundry、Nortel、Cisco和Radware的產品能實現部分DNS功能。如果一個產品不能處理某些特定的DNS請求,它可能會選擇丟棄請求,返回一個錯誤或者將請求轉發到一個真實的DNS伺服器上。

3.負載均衡器作為代理DNS伺服器

在這種方式下,負載均衡器被註冊為一個域名空間的權威DNS伺服器,而真正的權威域名伺服器則部署在負載均衡器後面所有的DNS請求都會先到達負載均衡器,由負載均衡器轉發至真正的權威DNS伺服器,然後修改權威DNS伺服器返回的響應資訊,從而實現負載均衡功能。

為實現這一過程,首先要將對外公佈的權威DNS伺服器的地址註冊成負載均衡器上的VIP地址。真正的權威DNS伺服器正常響應瀏覽器的DNS請求,返回域名解析結果列表,這個響應會先發送到負載均衡器,而負載均衡器會根據自己的策略選擇一個性能最好的伺服器IP並修改DNS伺服器的應答資訊,然後將應答資訊轉發給客戶。負載均衡器只修改需要實現GSLB的域名的DNS查詢響應,對其他請求透明轉發,這樣就不會影響整個域名空間的解析效能。

在代理方式下,如果權威DNS伺服器與負載均衡器相隔很遠,那麼負載均衡器向權威DNS伺服器轉發DNS請求時就會產生額外的延時。解決這個同題的辦法是,在負載均衡器上對DNS響應進行快取,在快取失效時間之前,對於之前已經從權威DNS伺服器上獲得過DNS響應的同一域名,就可以直接進行GSLB計算,響應使用者DNS請求,不用去訪問遠端的權威DNS伺服器了。

需要注意的是,在基於的DNS方式下無論採用何種工作方式,都會有一些請求不會到達GSLB,這是DNS系統本身的快取機制在起作用。當用戶請求的城名在本地DNS或本機就得到了解析結果,這些請求就不會到達GSLB。Cache更新時間越短,使用者請求到達GSLB的機率越大。由於DNS的快取機制遮蔽掉相當一部分使用者請求,從而大大減輕了GSLB處理壓力,使得系統抗流量衝擊能力顯著提升,這也是很多商業CDN選擇DNS機制做全域性負載均衡的原因之一。但弊端在於,如果在DNS快取重新整理間隔之內系統發生影響使用者服務的變化,比如某個節點故障,某個鏈路擁塞等,使用者依然會被排程到故障部位去。

4. 負載均衡的策略判斷條件資訊

有些DNS伺服器具有智慧DNS功能,它在向本地DNS返回應答之前會先根據一些靜態或動態策略進行智慧計算。比如根據本地DNS伺服器的IP地址進行就近性判斷,進行響應時間或IP地址加權計算等,根據智慧計算的結果選擇一條或幾條A記錄返回給本地DNS伺服器。返回的A記錄可能直接是一臺伺服器的IP地址,或者是下一級均衡裝置的IP地址。

負載均衡計算所需的靜態或動態策略所需要的資訊包括如下幾項: (1)伺服器的“健康狀況” GSLB最重要的特性之一就是持續不斷地監控各伺服器的健康狀況,健康檢查的型別有多種,就像伺服器健康檢查一樣,從二層、三層到四層,甚至是七層。未能通過健康檢查的伺服器不能作為備選的域名解析結果。

(2)地理區域距離 這裡的距離指使用者本地DNS伺服器的IP地址與伺服器IP地址之間的路由距離。由於DNS系統本身的工作原理所限,GSLB只能看到使用者本地DNS伺服器的IP地址,看不到使用者終端的IP地址。

當用戶使用錯誤的本地DNS伺服器地址時,GSLB返回的域名解析結果將不是最佳的答案。但由於絕大部分運營商都會限制其他運營商的使用者使用自己的DNS,所以出現這種錯誤配置的比例比較小,除非使用者在終端上手動設定了錯誤的本地DNS伺服器。

(3)會話保持 會話保持就是指在負載均衡器上設定這麼一種機制,可以識別客戶與伺服器之間互動過程的關聯性,在做負載均衡的時候考慮保證這些相關聯的訪問請求分配到同一臺伺服器上。如果GSLB的返回結果是本地負載均衡器( SLB),那麼同樣需要保證關聯訪同被排程到同一個SLB上,SLB繼續執行會話保持策略,保證使用者訪同被排程到同一臺伺服器上。

(4)響應時間 通過計算一個請求,響應的往返延遲時間,GSLB能夠計算出每個伺服器的響應時間。最簡單的方法就是通過測量伺服器對健康檢查的響應快慢來計算出站點的響應時間。

不過應該指出的是,如果伺服器以叢集或群組方式部署,那麼GSLB測量出的響應時間實際上是這個叢集或群組裡面最好的伺服器的響應時間。因為GSLB的健康性檢查請求首先會發送到叢集或群組的本地負載均衡器上,本地負載均衡器會像對待普通使用者請求一樣將請求轉發給下面壓力最小的伺服器,下一個請求,可能被轉發到另一臺伺服器。由於每次請求的響應時間可能有差異,所以最好的辦法是計算一段時間的平均值。CDN系統可以設定本地負載均衡器負責計算本叢集或本群組之內所有伺服器的平均響應時間,並報告給GSLB。

(5) IP地址權重 這是GSLB預先為每個IP地址分配的權重值,這個權重值取決於一些商業方面的考慮,比如某些地域的IDC頻寬比較貴,CDN系統就會盡量少用這些昂貴的資源。權重值決定了某個IP與其他候選IP相比分配到的流量比例。

(6)會話能力閾值 GSLB控制器可以獲得每個伺服器當前可用的會話數和會話表大小的最大值,當前會話數/最大會話數此值超過定義的閾值時,該伺服器將不再被選擇。

(7)往返時閾(RTT,Round-Trip Time)

往返時間指使用者向網站發出請求到從網站收到響應的時間間隔。這個時間是從使用者的角度出發來衡量CDN加速效果的指標,它基本反映了使用者與CDN POP節點之間的鏈路健康狀況。測量往返時間可以由CDN發起來完成,也可以由使用者發起來完成。如果由使用者來發起測量,最後得到的資料會比較精確,但需要在瀏覽器中內嵌特定的客戶端程式進行通訊和統計,而這種情況往往較少,所以多數情況下還是需要CDN來完成。CDN完成往返時間測量並用於GSLB的排程的方式有被動測量方式和主動測量方式,這兩種方式各有優劣, 可以在不同情況下使用,也可以混合使用。

(8)其他資訊,包括屬務器當前可用會話數、量少選擇次數、輪詢等。

5. 資訊組合起來實現全域性負載均衡

下面我們將看到GSLB是如何把這些資訊組合起來實現全域性負載均衡的。

第一種方式:依照條件重要性逐步去除不符合要求的伺服器。比如,GSLB設定的策略優先順序依次是健康性、響應時間、負載情況。那麼GSLB會首先排除不能提供服務的伺服器,然後基於響應時間排除能力較差的伺服器,最後基於負載情況選出負載較輕的伺服器。如果此時還是有多個選擇的話,GSLB會採用預設的方法來進行選擇,比如輪詢。

第二種方式:採用加權法挑選最優伺服器。通常在進行加權計算前,GSLB會先使用健康檢查和就近性排除大部分不能提供服務或距離過遠的伺服器。然後根據預先配置的加權策略,對其餘每一項指標計算一個加權值,例如,給響應時間分配一個較高的權值,為路由開銷分配一個較低的權值,同時考慮多個指標,從中選出條件最佳的伺服器。

GSLB回覆給本地DNS伺服器的應答資訊有兩種,一種是隻回覆它選出的最佳伺服器的IP地址,另一種是回覆多個伺服器的lP地址列表,但是將它選擇的最佳伺服器IP地址放在第一位。第一種方式的缺點在於,如果GSLB推薦的伺服器突然發生故障,而關於這個域名的DNS應答資訊快取在瀏覽器和本地DNS伺服器中,那就只能等瀏覽器和本地DNS伺服器記錄過期,才能重新發起解析。在這期間的使用者請求都會被導向故障伺服器。第二種方式的缺點在於,很多本地DNS伺服器會以輪詢方式從地址列表裡選擇一個IP地址返回給客戶端,而不一定是GSLB 認為的最佳伺服器。

基於DNS解析的GSLB應用部署方式