- 架構基礎:從需求到架構
- 尹洪亮編著
- 737字
- 2023-04-21 18:02:42
2.1.4 DNS輪詢負載設計
DNS(Domain Name System,域名系統)是互聯網的一種服務,它將域名和IP地址進行映射存儲,當用戶訪問某個域名時能夠快速找到對應的IP地址,使用戶更加方便地訪問互聯網。
互聯網應用訪問流程包括以下3個步驟,如圖2-12所示。
(1)客戶端使用域名(yinhongliang.com)請求服務器時,需先請求DNS服務進行域名解析。
(2)DNS服務通過查找域名注冊表,找到域名所對應的IP地址(10.3.1.33),返回給客戶端。
(3)客戶端使用IP地址(10.3.1.33)再去訪問服務器的應用。

圖2-12 DNS解析
然而,單個服務器節點不但存在單節點風險,而且能夠支撐的最大并發連接數十分有限,可以借助DNS進行負載,從而使服務支持水平擴展。
將域名與多個IP地址進行綁定(例如,yinhongliang.com這個域名與10.3.1.33、10.3.1.34、10.3.1.35三個域名綁定),用戶每次發起請求時DNS服務都按照順序依次返回域名所對應的IP地址,從而達到了服務輪詢負載的目的,如圖2-13所示。

圖2-13 DNS輪詢負載
也可以針對不同的地區、運營商綁定不同的IP地址。這樣,全國各地的用戶進行訪問時,可以盡量將用戶的請求解析到距離最近的服務器,從而加快響應速度。
這種架構雖然解決了水平擴展問題,卻將服務器直接暴露在互聯網上,并且吞吐量依然不足,可以采用DNS+多級負載的方式架構。
可以將域名綁定在負載均衡器LVS的IP地址上,這樣通過DNS解析后,用戶的請求就會通過LVS和Nginx的多級負載,無須暴露真正的后端服務,極大地提高了系統的安全性、可用性和并發能力,如圖2-14所示。
DNS解析負載的最大問題是,沒有自動監測能力,無法幫助應用自動完成故障轉移。例如,某個服務節點宕機,由于DNS沒有主動探測機制,不會自動將無法訪問的服務節點IP從DNS列表中移除,所以用戶依然會請求到宕機的服務。
當系統發生故障時,需要手動修改域名解析配置,由于DNS存在緩存,并不能立即生效,所以還會有一段時間服務不可用。

圖2-14 DNS+多級負載架構