《DNS在架構設計中的巧用》要點:
本文介紹了DNS在架構設計中的巧用,希望對您有用。如果有疑問,可以聯系我們。
一個http請求從客戶端到服務端,整個執行流程是怎么樣的呢?
一個典型流程如上:
(1)客戶端通過域名daojia.com請求dns-server
(2)dns-server返回域名對應的外網ip(1.2.3.4)
(3)客戶端訪問外網ip(1.2.3.4)向反向代理nginx
(4)反向代理nginx配置了多個后端web-server服務內網ip(192.168.0.1/192.168.0.2)
(5)請求最終落到某一個web-server進行處理
其中,第一個步驟域名daojia.com到外網ip(1.2.3.4)的轉換,發生在整個服務端外部,服務端不可控.
架構設計時,能夠巧用dns做一些什么事情呢,是本文要討論的問題.
典型的互聯網架構中,可以通過增加web-server來擴充web層的性能,但反向代理nginx仍是整個系統的唯一入口,如果系統吞吐超過nginx的性能極限,難以擴容,此時就需要dns-server來配合水平擴展.
具體做法是:在dns-server對于同一個域名可以配置多個nginx的外網ip,每次dns解析請求,輪詢返回不同的ip,這樣就能實現nginx的水平擴展,這個方法叫“dns輪詢”.
既然“dns輪詢”可以將同一個域名的流量均勻分配到不同的nginx,那么也可以利用它來做web-server的負載均衡:
(1)架構中去掉nginx層
(2)將多個web-server的內網ip直接改為外網ip
(3)在dns-server將域名對應的外網ip進行輪詢解析
和nginx相比,dns來實施負載均衡有什么優缺點呢?
優點:
不足:
因為上面兩個原因,架構上很少取消反向代理層,而直接使用dns來實施負載均衡.
如文章“緣起”中所述,http請求的第一個步驟域名到外網ip的轉換,發生在整個服務端外部,服務端不可控,那么如果要實施“根據客戶端ip來分配最近的服務器機房訪問”,就只能在dns-server上做了:
(1)電信用戶想要訪問某一個服務器資源
(2)瀏覽器向dns-server發起服務器域名解析請求
(3)dns-server識別出訪問者是電信用戶
(4)dns-server將電信機房的nginx外網ip返回給訪問者
(5)訪問者就近訪問
根據用戶ip來返回最近的服務器ip,稱為“智能dns”,cdn以及多機房多活中最常用.
架構設計中,dns有它獨特的功能和作用:
其他相關技術點:
lvs為何不能完全替代DNS輪詢
反向代理層的高可用架構設計
免dns解析,ip直通車技術
文章來自微信公眾號:架構師之路
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/4107.html