除了解析域名,DNS還能干嗎?
一個http請求,典型的執(zhí)行流程是怎么樣的呢?
可以看到,典型流程為:(1)客戶端請求dns-server,發(fā)起域名解析;(2)dns-server返回域名對應(yīng)的外網(wǎng)ip(1.2.3.4);(3)客戶端通過外網(wǎng)ip(1.2.3.4),訪問反向代理;(4)反向代理通過內(nèi)網(wǎng)ip(192.168.x.x),將請求分發(fā)給web-server;(5)web-server對請求進行處理;其中,第一個步驟,將域名轉(zhuǎn)化ip的過程,發(fā)生在應(yīng)用系統(tǒng)的外部,是通過DNS實現(xiàn)的。
除了域名解析,在架構(gòu)設(shè)計時,還能利用DNS做一些什么事情呢?
一、用戶就近訪問
DNS可以實現(xiàn),用戶所需資源的就近訪問:(1)電信用戶想要訪問某一個服務(wù)器資源;(2)瀏覽器向dns-server發(fā)起域名解析請求;(3)dns-server識別出訪問者是電信用戶;(4)dns-server將電信機房的nginx外網(wǎng)ip返回給訪問者;(5)訪問者就近訪問;根據(jù)用戶ip來返回最近的服務(wù)器ip,稱為“智能DNS”,CDN以及多機房多活中最常用。
二、反向代理水平擴展
典型的互聯(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負(fù)載均衡
既然“dns輪詢”可以將同一個域名的流量均勻分配到不同的nginx,那么也可以利用它來做web-server的負(fù)載均衡:(1)架構(gòu)中去掉nginx層;(2)將多個web-server的內(nèi)網(wǎng)ip直接改為外網(wǎng)ip;(3)在dns-server將域名對應(yīng)的外網(wǎng)ip進行輪詢解析;通過DNS來實施負(fù)載均衡有什么優(yōu)缺點呢?
優(yōu)點:(1)利用第三方DNS實施,服務(wù)端架構(gòu)不用動;(2)少了一層網(wǎng)絡(luò)請求;
不足:(1)DNS只具備解析功能,不能保證對應(yīng)外網(wǎng)ip的可用性,而nginx做反向代理時,與web-server之間有?;钐綔y機制,當(dāng)web-server掛掉時,能夠自動遷移流量;(2)當(dāng)web-server需要擴容時,通過DNS擴容生效時間長,而nginx是服務(wù)端完全自己可控的部分,web-server擴容更實時更方便;
因為上面兩個原因,架構(gòu)上一般都使用高可用反向代理。
總結(jié)
架構(gòu)設(shè)計中,除了域名解析,DNS還有其他用武之地:
(1)智能DNS,根據(jù)用戶ip來就近訪問服務(wù)器;
(2)DNS輪詢,水平擴展反向代理層;
(3)利用DNS實施負(fù)載均衡;
掃碼關(guān)注“架構(gòu)師之路”視頻號
視頻號要有100個關(guān)注,才能開通認(rèn)證,希望大家成為前100個朋友。感謝,感恩。
評論
圖片
表情
