一、緣起
一個(gè)http請(qǐng)求從客戶端到服務(wù)端,整個(gè)執(zhí)行流程是怎么樣的呢?
一個(gè)典型流程如上:
(1)客戶端通過(guò)域名daojia.com請(qǐng)求dns-server
(2)dns-server返回域名對(duì)應(yīng)的外網(wǎng)ip(1.2.3.4)
(3)客戶端訪問(wèn)外網(wǎng)ip(1.2.3.4)向反向代理nginx
(4)反向代理nginx配置了多個(gè)后端web-server服務(wù)內(nèi)網(wǎng)ip(192.168.0.1/192.168.0.2)
(5)請(qǐng)求最終落到某一個(gè)web-server進(jìn)行處理
其中,第一個(gè)步驟域名daojia.com到外網(wǎng)ip(1.2.3.4)的轉(zhuǎn)換,發(fā)生在整個(gè)服務(wù)端外部,服務(wù)端不可控。
架構(gòu)設(shè)計(jì)時(shí),能夠巧用dns做一些什么事情呢,是本文要討論的問(wèn)題。
二、反向代理水平擴(kuò)展

典型的互聯(lián)網(wǎng)架構(gòu)中,可以通過(guò)增加web-server來(lái)擴(kuò)充web層的性能,但
反向代理nginx仍是整個(gè)系統(tǒng)的唯一入口,
如果系統(tǒng)吞吐超過(guò)nginx的性能極限,難以擴(kuò)容,此時(shí)就需要dns-server來(lái)配合水平擴(kuò)展。

具體做法是:在dns-server對(duì)于同一個(gè)域名可以配置多個(gè)nginx的外網(wǎng)ip,
每次dns解析請(qǐng)求,輪詢返回不同的ip,這樣就能實(shí)現(xiàn)nginx的水平擴(kuò)展,這個(gè)方法叫“
dns輪詢”。
三、web-server負(fù)載均衡

既然“dns輪詢”可以將同一個(gè)域名的流量均勻分配到不同的nginx,那么也可以利用它來(lái)做web-server的負(fù)載均衡:
(1)架構(gòu)中
去掉nginx層(2)將多個(gè)web-server的
內(nèi)網(wǎng)ip直接改為外網(wǎng)ip(3)在dns-server將域名對(duì)應(yīng)的外網(wǎng)ip進(jìn)行
輪詢解析 和nginx相比,dns來(lái)實(shí)施負(fù)載均衡有什么優(yōu)缺點(diǎn)呢?
優(yōu)點(diǎn):
?利用第三方dns實(shí)施,服務(wù)端架構(gòu)不用動(dòng)
?少了一層網(wǎng)絡(luò)請(qǐng)求
不足:
?
dns只具備解析功能,不能保證對(duì)應(yīng)外網(wǎng)ip的可用性(即使能夠做80口的探測(cè),實(shí)時(shí)性肯定也是比nginx差很多的),而nginx做反向代理時(shí),與web-server之間有?;钐綔y(cè)機(jī)制,當(dāng)web-server掛掉時(shí),能夠自動(dòng)遷移流量
?
當(dāng)web-server需要擴(kuò)容時(shí),通過(guò)dns擴(kuò)容生效時(shí)間長(zhǎng),而nginx是服務(wù)端完全自己可控的部分,web-server擴(kuò)容更實(shí)時(shí)更方便
因?yàn)樯厦鎯蓚€(gè)原因,
架構(gòu)上很少取消反向代理層,而直接使用dns來(lái)實(shí)施負(fù)載均衡。
四、用戶就近訪問(wèn)

如文章“緣起”中所述,http請(qǐng)求的第一個(gè)步驟域名到外網(wǎng)ip的轉(zhuǎn)換,發(fā)生在整個(gè)服務(wù)端外部,服務(wù)端不可控,那么如果要實(shí)施“
根據(jù)客戶端ip來(lái)分配最近的服務(wù)器機(jī)房訪問(wèn)”,就只能在dns-server上做了:
(1)電信用戶想要訪問(wèn)某一個(gè)服務(wù)器資源
(2)瀏覽器向dns-server發(fā)起服務(wù)器域名解析請(qǐng)求
(3)dns-server識(shí)別出訪問(wèn)者是電信用戶
(4)dns-server將電信機(jī)房的nginx外網(wǎng)ip返回給訪問(wèn)者
(5)訪問(wèn)者就近訪問(wèn)
根據(jù)用戶ip來(lái)返回最近的服務(wù)器ip,稱為“
智能dns”,
cdn以及
多機(jī)房多活中最常用。
五、總結(jié)
架構(gòu)設(shè)計(jì)中,dns有它獨(dú)特的功能和作用:
?
dns輪詢,
水平擴(kuò)展反向代理層?去掉反向代理層,
利用dns實(shí)施負(fù)載均衡?
智能dns,
根據(jù)用戶ip來(lái)就近訪問(wèn)服務(wù)器
更多建議: