- 鳳凰架構:構建可靠的大型分布式系統
- 周志明
- 1107字
- 2021-06-24 11:30:59
4.4.1 路由解析
在介紹DNS域名解析時,筆者曾提到翻譯域名無須像查電話本一樣刻板地一對一翻譯,根據來訪機器、網絡鏈路、服務內容等各種信息,可以玩出很多“花樣”,內容分發網絡將用戶請求路由到它的資源服務器上就是依靠DNS服務器來實現的。根據我們對DNS域名解析的了解,一次沒有內容分發網絡參與的用戶訪問,其解析過程如圖4-5所示。

圖4-5 沒有內容分發網絡參與的用戶訪問的解析過程
那么,有內容分發網絡介入會發生什么變化呢?我們不妨先來看一段對網站“icyfenix.cn.”進行DNS查詢的真實應答記錄,這個網站就是通過國內的內容分發網絡對位于GitHub Pages上的靜態頁面進行加速的。通過dig或者host命令,能夠很方便地得到DNS服務器的返回結果(結果中頭4個IP的城市地址是筆者手工加入的,后面的其他記錄就不一個一個查了),如下所示:
$ dig icyfenix.cn ; <<>> DiG 9.11.3-1ubuntu1.8-Ubuntu <<>> icyfenix.cn ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60630 ;; flags: qr rd ra; QUERY: 1, ANSWER: 17, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 65494 ;; QUESTION SECTION: ;icyfenix.cn. IN A ;; ANSWER SECTION: icyfenix.cn. 600 IN CNAME icyfenix.cn.cdn.dnsv1.com. icyfenix.cn.cdn.dnsv1.com. 599 IN CNAME 4yi4q4z6.dispatch.spcdntip.com. 4yi4q4z6.dispatch.spcdntip.com. 60 IN A 101.71.72.192 #浙江寧波市 4yi4q4z6.dispatch.spcdntip.com. 60 IN A 113.200.16.234 #陜西省榆林市 4yi4q4z6.dispatch.spcdntip.com. 60 IN A 116.95.25.196 #內蒙古自治區呼和浩特市 4yi4q4z6.dispatch.spcdntip.com. 60 IN A 116.178.66.65 #新疆維吾爾自治區烏魯木齊市 4yi4q4z6.dispatch.spcdntip.com. 60 IN A 118.212.234.144 4yi4q4z6.dispatch.spcdntip.com. 60 IN A 211.91.160.228 4yi4q4z6.dispatch.spcdntip.com. 60 IN A 211.97.73.224 4yi4q4z6.dispatch.spcdntip.com. 60 IN A 218.11.8.232 4yi4q4z6.dispatch.spcdntip.com. 60 IN A 221.204.166.70 4yi4q4z6.dispatch.spcdntip.com. 60 IN A 14.204.74.140 4yi4q4z6.dispatch.spcdntip.com. 60 IN A 43.242.166.88 4yi4q4z6.dispatch.spcdntip.com. 60 IN A 59.80.39.110 4yi4q4z6.dispatch.spcdntip.com. 60 IN A 59.83.204.12 4yi4q4z6.dispatch.spcdntip.com. 60 IN A 59.83.204.14 4yi4q4z6.dispatch.spcdntip.com. 60 IN A 59.83.218.235 ;; Query time: 74 msec ;; SERVER: 127.0.0.53#53(127.0.0.53) ;; WHEN: Sat Apr 11 22:33:56 CST 2020 ;; MSG SIZE rcvd: 152
根據以上解析信息,DNS服務為“icyfenix.cn.”的查詢結果先返回了一個CNAME記錄(icyfenix.cn.cdn.dnsv1.com.),遞歸查詢該CNAME時,返回了另一個看起來更奇怪的CNAME(4yi4q4z6.dispatch.spcdntip.com.)。繼續查詢后,這個CNAME返回了十幾個位于全國不同地區的A記錄,很明顯,這些A記錄就是分布在全國各地、存有本站緩存的CDN節點。CDN路由解析的具體工作流程如下。
·架設好“icyfenix.cn.”的服務器后,在你的CDN服務商上將服務器的IP地址注冊為“源站”,注冊后你會得到一個CNAME,即本例中的“icyfenix.cn.cdn.dnsv1.com.”。
·在你購買域名的DNS服務商上將得到的CNAME注冊為一條CNAME記錄。
·當第一位用戶來訪時,將首先發生一次未命中緩存的DNS查詢,域名服務商解析出CNAME后,返回給本地DNS,之后鏈路解析的主導權就開始由內容分發網絡的調度服務接管了。
·本地DNS查詢CNAME時,由于能解析該CNAME的權威服務器只有CDN服務商所架設的權威DNS,這個DNS服務將根據一定的均衡策略和參數,如拓撲結構、容量、時延等,在全國各地能提供服務的CDN緩存節點中挑選一個最適合的,并將它的IP代替源站的IP地址,返回給本地DNS。
·瀏覽器從本地DNS拿到IP地址后,將該IP當作源站服務器來進行訪問,此時該IP的CDN節點上可能有,也可能沒有緩存過源站的資源,這點將在稍后的4.4.2節討論。
·經過內容分發后的CDN節點,就有能力代替源站向用戶提供所請求的資源了。
以上步驟反映在時序圖上,如圖4-6所示,讀者可自行與本節開頭給出的沒有內容分發網絡參與的圖4-5進行對比。

圖4-6 有內容分發網絡參與的路由解析過程
- Containerization with LXC
- Red Hat Enterprise Linux 8系統管理實戰
- Hands-On DevOps with Vagrant
- 操作系統基礎與實踐:基于openEuler平臺
- Linux網絡內核分析與開發
- 嵌入式Linux應用開發菜鳥進階
- 數據中心系統工程及應用
- Fedora 12 Linux應用基礎
- Cassandra 3.x High Availability(Second Edition)
- INSTANT Galleria Howto
- Kali Linux高級滲透測試(原書第3版)
- Linux系統最佳實踐工具:命令行技術
- Building Telephony Systems With Asterisk
- μC/OS-III內核實現與應用開發實戰指南:基于STM32
- Linux 從入門到項目實踐(超值版)