苦學
2017-05-17 10:00
一、緣起
乙個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輪詢」。
三、web-server負載均衡
既然「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有它獨特的功能和作用:
高可用架構設計DNS四
dns domain name system 網域名稱ip關係。hosts檔案 儲存了 網域名稱ip的對應關係。伺服器內部把網域名稱指向了內部ip。dns協議 domain name 指出這個條魚適用於那個網域名稱 time to live用來表情記錄的生存週期,也就是最多可以魂村記錄多長時間 ty...
DNS在架構中的運用
乙個http請求從客戶端到服務端,整個執行流程如下 客戶端通過網域名稱test.com請求dns server dns server返回網域名稱對應的外網ip 1.2 3.4 客戶端訪問外網ip 1.2 3.4 向反向 nginx 反向 nginx配置了多個後端web server服務內網ip 19...
VO DTO 模式在架構設計中是否需要
dto vo 也就是一般意義上的vo,封裝後的物件。一般用於web層 service層間的資料傳輸入。po 也就是一般概念上的domain object,如hibernate 中的entity.一般用於service層 dao層間的資料傳輸。大多數web應用是沒有vo的,直接po貫穿 web ser...