在性能優化的時候,比較常見的一個建議是,把資源部署在CDN上,那麼問題來了,CDN是什麼?這樣作有什麼好處?html
咱們先講一下域名系統DNS(Domain Name System)吧。前端
他是一個分佈式數據庫,功能是聯繫域名和ip地址。域名與ip的對應關係,被稱爲記錄(record),可分爲各類類型linux
DNS由下面三個部分組成git
假如你要訪問baidu.com,須要先經過dns系統查出他的ip地址如220.181.57.216,才能訪問。github
那麼問題來了,dns是怎麼經過域名來查出ip的呢?咱們以瀏覽器輸入www.example.com爲例,數據庫
若是LDNS服務器沒找到,會向跟域名服務器(Root Server)請求解析,分爲如下幾步:api
向大量開放DNS服務器發送大範圍域名查詢的DNS請求,並將該DNS請求的源IP地址僞形成想要攻擊的目標IP地址。因爲請求數據比相應數據小得多,攻擊者能夠利用該技術放大掌握的帶寬資源和攻擊流量。瀏覽器
DNS污染是一種讓通常用戶因爲獲得虛假目標主機IP而不能與其通訊的方法,指的是用戶訪問一個地址,國內的服務器(非DNS)監控到用戶訪問的已經被標記地址時,服務器假裝成DNS服務器向用戶發回錯誤的地址的行爲。
dns污染與dns劫持的區別在於,dns劫持修改了dns的解析結果,dns污染是不通過dns服務器,返回錯誤信息緩存
能夠看出,dns解析是一個漫長的過程,如何優化這一過程呢?安全
用戶在請求某個連接以前,瀏覽器先嚐試解析該連接的域名再將其進行緩存。這樣真正請求的時候就不須要進行DNS解析。
能夠
X-DNS-Prefetch-Control
的值爲on
啓動預解析<meta http-equiv="x-dns-prefetch-control" content="on">
<link rel=」dns-prefetch」 href=」//fonts.googleapis.com」>
域名收斂
建議將靜態資源只放在一個域名下面,能夠有效減小dns的請求
基於Http協議向HTTPDNS服務器發送域名解析請求,替代了基於DNS協議向運營商Local DNS發起解析請求的傳統方式,能夠避免運營商的域名劫持和進行精準調度。
這過程分爲兩步
講完DNS,如今能夠開始講CDN了,CDN的全稱是Content Delivery Network,即內容分發網絡,它可以實時地根據網絡流量和各節點的鏈接、負載情況以及到用戶的距離和響應時間等綜合信息將用戶的請求從新導向離用戶最近的服務節點上。其目的是使用戶可就近取得所需內容,解決 Internet網絡擁擠的情況,提升用戶訪問網站的響應速度。
典型的CDN系統由下面三個部分組成
最基本的工做單元就是Cache設備,cache(邊緣cache)負責直接響應最終用戶的訪問請求,把緩存在本地的內容快速地提供給用 戶。同時cache還負責與源站點進行內容同步,把更新的內容以及本地沒有的內容從源站點獲取並保存在本地。Cache設備的數量、規模、總服務能力是衡 量一個CDN系統服務能力的最基本的指標
主要功能是負責對全部發起服務請求的用戶進行訪問調度,肯定提供給用戶的最終實際訪問地址。兩級調度體系分爲全局負載均衡(GSLB)和本 地負載均衡(SLB)。GSLB主要根據用戶就近性原則,經過對每一個服務節點進行「最優」判斷,肯定向用戶提供服務的cache的物理位置。SLB主要負 責節點內部的設備負載均衡
分爲運營管理和網絡管理子系統,負責處理業務層面的與外界系統交互所必須的收集、整理、交付工做,包含客戶管理、產品管理、計費管理、統計分析等功能。
使用CDN的方法很簡單,只須要修改本身的DNS解析,設置一個CNAME指向CDN服務商便可。
用戶訪問未使用CDN緩存資源的過程爲:
使用CDN後
上面的字太多,有點繞?通俗點就是用戶訪問的資源本來是存放在你本身的服務器,經過修改DNS讓用戶根據IP等狀況來選擇合適的CDN緩存服務器來獲取資源。
這樣作有什麼好處呢?
本文章爲前端進階系列的一部分,
歡迎關注和star本博客或是關注個人github