DNS在架構(gòu)設(shè)計中的巧用

2018-09-09 11:54 更新

一、緣起

一個http請求從客戶端到服務(wù)端,整個執(zhí)行流程是怎么樣的呢?
http請求典型流程
一個典型流程如上:
(1)客戶端通過域名daojia.com請求dns-server
(2)dns-server返回域名對應(yīng)的外網(wǎng)ip(1.2.3.4)
(3)客戶端訪問外網(wǎng)ip(1.2.3.4)向反向代理nginx
(4)反向代理nginx配置了多個后端web-server服務(wù)內(nèi)網(wǎng)ip(192.168.0.1/192.168.0.2)
(5)請求最終落到某一個web-server進行處理

其中,第一個步驟域名daojia.com到外網(wǎng)ip(1.2.3.4)的轉(zhuǎn)換,發(fā)生在整個服務(wù)端外部,服務(wù)端不可控。

架構(gòu)設(shè)計時,能夠巧用dns做一些什么事情呢,是本文要討論的問題。

二、反向代理水平擴展

http請求典型流程
典型的互聯(lián)網(wǎng)架構(gòu)中,可以通過增加web-server來擴充web層的性能,但反向代理nginx仍是整個系統(tǒng)的唯一入口如果系統(tǒng)吞吐超過nginx的性能極限,難以擴容,此時就需要dns-server來配合水平擴展。
反向代理水平擴展
具體做法是:在dns-server對于同一個域名可以配置多個nginx的外網(wǎng)ip,每次dns解析請求,輪詢返回不同的ip,這樣就能實現(xiàn)nginx的水平擴展,這個方法叫“dns輪詢”。

三、web-server負載均衡

web-server負載均衡
既然“dns輪詢”可以將同一個域名的流量均勻分配到不同的nginx,那么也可以利用它來做web-server的負載均衡:
(1)架構(gòu)中去掉nginx層
(2)將多個web-server的內(nèi)網(wǎng)ip直接改為外網(wǎng)ip
(3)在dns-server將域名對應(yīng)的外網(wǎng)ip進行輪詢解析 

和nginx相比,dns來實施負載均衡有什么優(yōu)缺點呢?
優(yōu)點

?利用第三方dns實施,服務(wù)端架構(gòu)不用動
?少了一層網(wǎng)絡(luò)請求

不足
?dns只具備解析功能,不能保證對應(yīng)外網(wǎng)ip的可用性(即使能夠做80口的探測,實時性肯定也是比nginx差很多的),而nginx做反向代理時,與web-server之間有?;钐綔y機制,當web-server掛掉時,能夠自動遷移流量
?當web-server需要擴容時,通過dns擴容生效時間長,而nginx是服務(wù)端完全自己可控的部分,web-server擴容更實時更方便

因為上面兩個原因,架構(gòu)上很少取消反向代理層,而直接使用dns來實施負載均衡。

四、用戶就近訪問

用戶就近訪問
如文章“緣起”中所述,http請求的第一個步驟域名到外網(wǎng)ip的轉(zhuǎn)換,發(fā)生在整個服務(wù)端外部,服務(wù)端不可控,那么如果要實施“根據(jù)客戶端ip來分配最近的服務(wù)器機房訪問”,就只能在dns-server上做了:
(1)電信用戶想要訪問某一個服務(wù)器資源
(2)瀏覽器向dns-server發(fā)起服務(wù)器域名解析請求
(3)dns-server識別出訪問者是電信用戶
(4)dns-server將電信機房的nginx外網(wǎng)ip返回給訪問者
(5)訪問者就近訪問

根據(jù)用戶ip來返回最近的服務(wù)器ip,稱為“智能dns”,cdn以及多機房多活中最常用。

五、總結(jié)

架構(gòu)設(shè)計中,dns有它獨特的功能和作用:
?dns輪詢水平擴展反向代理層
?去掉反向代理層,利用dns實施負載均衡
?智能dns根據(jù)用戶ip來就近訪問服務(wù)器

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號