DNS 解析域名
什么是 DNS
我們訪問網站的時候會輸入域名,而在真實網絡中主機通信是通過 IP 地址進行通信的,DNS 服務器的作用就是將這域名字符串解析為對應的 IP 地址
有哪些 DNS 服務器
如果說每輸入一個域名都需要去一個 DNS 服務器解析的話,全世界這么高的訪問量,肯定是無法承載的,所以會對 DNS 服務器進行按層分級,不同類型的 DNS 服務器負責解析不同的域名
本地 DNS 緩存:電腦會將解析到的域名和 IP 地址等緩存到本地上,windows 可以通過 ipconfig /displaydns 查看
本地 DNS 服務器
如果電腦是自己設置了 DNS 那么本地 DNS 服務器就是這個地址
如果是根據路由器 DHCP 自動分配,那么本地 DNS 服務器就是路由器的 DNS 地址
路由器會將請求分發給上層的網絡服務提供商的 DNS
根域名服務器:根服務器主要用來管理互聯網的主目錄,它包含了頂級域名服務器的 IP 地址
.com 頂級域名服務器對應的 IP 地址
.cn 頂級域名服務器對應的 IP 地址
.net 頂級域名服務器對應的 IP 地址
其它
頂級域名服務器:在它其中包含了權威域名的服務器的 IP 地址
權威域名服務器:返回域名對應的目標主機 IP
DNS 解析流程
當我們輸入 www.abc.com 域名的時候
首先去本地緩存中查找域名對應的 IP 是否存在,如果存在則直接返回
如果不存在則去本地 DNS 服務器中查找,如果本地 DNS 服務器有則直接返回
如果本地 DNS 服務器中不存在則開始遞歸查找
首先查找根域名服務器發現訪問的是 .com 然后返回給本地 .com DNS 服務器對應的 IP 地址
然后本地繼續去請求 .com 這個頂級域名服務器,頂級域名服務器查找到了 www.abc.com 對應的 DNS 服務器的 IP 地址返回給客戶端
然后本地去請求 www.abc.com 對應的 DNS 服務器解析這個域名,DNS 服務器解析后返回對應的主機 IP 地址
在第 6 步驟,DNS 服務器解析后可以返回多個對應的主機 IP 地址,那么客戶端訪問的時候可以通過隨機或者輪詢等訪問做簡單的負載均衡處理
上述流程就是一個沒有給域名配置 CDN 的流程
CDN 加速靜態資源訪問
什么是 CDN
百度百科:CDN是構建在現有網絡基礎之上的智能虛擬網絡,依靠部署在各地的邊緣服務器,通過中心平臺的負載均衡、內容分發、調度等功能模塊,使用戶就近獲取所需內容,降低網絡擁塞,提高用戶訪問響應速度和命中率。CDN的關鍵技術主要有內容存儲和分發技術
內存存儲
比如說我們有個圖片網站應用部署在成都,一開始應用只在成都當地推廣本地人使用。后面業務發展出去了,全國各地的人都在訪問了,處于新疆烏魯木齊的用戶發現圖片加載的速度變得很慢(因為圖片這些數據需要從成都通過網線傳輸到烏魯木齊太遠了,而且中途可能存在網絡擁擠等等原因)那么想個辦法,我們在烏魯木齊部署一個緩存服務器,后續烏魯木齊的用戶只要訪問過某張圖片就將其緩存到烏魯木齊的服務器上,后續的訪問就可以變得更快
分發技術
比如說訪問烏魯木齊緩存服務器沒有對應的圖片緩存的時候,這個時候可以去訪問西北數據中心獲取數據,西北數據中心沒有再去源數據中心獲取,這樣可以盡可能的減少對源數據中心的訪問減少源數據中心壓力的同時,加速用戶的訪問體驗
邊緣結點:距離用戶最近的數據訪問中心,比如成都
區域結點:如果邊緣結點中沒有查找到到對應的緩存可以去區域結點中,比如西南區域
中心節點:如果區域結點數據還是沒有命中則需要回源(訪問源數據中心節點)
經過一層一層數據中心節點數據訪問過后,數據會依次緩存到對應的數據中心節點中,后續用戶訪問就可以臨近訪問了
CDN 可以緩存什么
網頁、圖片、文件等一些不經常改變的數據,可以緩存到 CDN 中
CDN 如何更新數據
查找的數據有可能不存在,也有可能過期了,如何更新 CDN 緩存呢
拉取模式
推送模式
如果是某份熱點數據,一開始就近 CDN 緩存中沒有就向上拉取,如果出現回源,可能導致源數據中心壓力會過大。
這個時候可以采取主動推送模式,將熱點數據主動推送到邊緣結點。
CDN 帶來的問題
防盜鏈問題
請求附帶 refer 標示來源
時間戳防盜鏈
數據過期問題
當服務器數據更新后,CDN 數據還未更新時靜態資源訪問可能存在不一致的問題
資源都是有設置過期時間的,等到過期時間到了就會回源拉取最新內容
主動刷新 CDN 緩存,強制性的讓緩存失效全部回源拉取最新數據
CDN 解析流程
此時配置了 CDN 后,不會直接返回對應的 IP 地址而是返回 CNAME 對應的 CDN 域名 abc.cdn.com
解析 abc.cdn.com 得到對應的 IP 地址后請求該 CDN DNS 服務器,此時返回全局負載均衡域名地址
解析 abc.cdn.gslb.com 得到對應的 IP 地址后請求該全局負載均衡器,根據用戶的 IP 地址、所處運營商、URL 攜帶內容以及各 CDN 服務器的負載情況選擇最為合適的最近的一臺或者多態服務器的 IP 地址給客戶端
客戶端可以通過簡單的隨機或者輪詢等操作發起調用
建立 HTTP 連接
HTTP 協議通過 TCP 協議進行數據傳輸,在傳輸數據之前需要建立 TCP 連接
在 HTTP 通信的時候,建立連接和斷開連接分別需要 3 次握手和四次揮手,效率還是很低的在 HTTP/1.0 的時候每次發送數據都需要建立連接響應完成后就需要斷開連接。自 HTTP/1.1 開始就是長連接了,除非一端主動斷開連接,這樣極大的提升了通信的效率。
服務端負載均衡處理
服務端一般采用 Nginx 等服務器來做負載均衡處理,客戶端過來的 HTTP 請求會與 Nginx 建立長連接后開始數據傳輸到達 Nginx,Nginx 會維護到達不同服務器的長連接將數據轉發到真實的后端服務器
當然 nginx 也可以以短連接的方式發起請求,只是使用長連接能夠減少 3 次握手和 4 次揮手大大的提升通信效率,減緩網絡擁擠的情況
長連接帶來的問題
我們使用長連接的時候會設置長連接的超時時間,到達時候會釋放連接,那么在連接釋放的時候,首先服務端會發送 FIN 包到達客戶端,客戶端還未收到 FIN 包的時候,發起了一個 HTTP 請求的話,那么這個請求就會響應 NoHttpResponseException
解決方案:
客戶端重試機制(指定最多重試的次數)
定時提前清理閑置的鏈接,客戶端啟用定時任務,在超時之前主動與服務端斷開連接即可
-
HTTP
+關注
關注
0文章
510瀏覽量
31299 -
DNS
+關注
關注
0文章
218瀏覽量
19866
發布評論請先 登錄
相關推薦
評論