在機能優化的時刻,比較罕見的一個提議是,把資本布置在CDN上,那末題目來了,CDN是什麼?如許做有什麼長處?
DNS
我們先講一下域名系統DNS(Domain Name System)吧。
他是一個分佈式數據庫,功用是聯絡域名和ip地點。域名與ip的對應關聯,被稱為紀錄(record),可分為各種類型
- A: Address,域名指向的IP地點,一個域名可以有多個A紀錄。
- NS:Name Server,保存下一級域名信息的效勞器地點
- MX:Mail eXchange,接收电子郵件的效勞器地點
- CNAME:Canonical Name,返回另一個域名,令當前查詢域名挑去該域名,多個域名->效勞器的映照。
- PTR: Pointer Record,只用於ip地點查詢域名
DNS由下面三個部份構成
- 稱號剖析器(resolver)
- 域名空間(domain name space)
- 稱號效勞器(name server)
假如你要接見baidu.com,須要先經由歷程dns系統查出他的ip地點如220.181.57.216,才接見。
dns查詢的歷程
那末題目來了,dns是怎樣經由歷程域名來查出ip的呢?我們以瀏覽器輸入www.example.com為例,
- 搜檢瀏覽器緩存
- 搜檢操作系統緩存,罕見的如hosts文件
- 搜檢路由器緩存
- 假如前幾步都沒沒找到,會向ISP(網絡效勞供應商)的LDNS效勞器查詢
假如LDNS效勞器沒找到,會向跟域名效勞器(Root Server)要求剖析,分為以下幾步:
- 跟效勞器返回頂級域名(TLD)效勞器如.com,.cn,.org等的地點,環球只要13台,該例子中會返回.com的地點
- 接着向TLD發送要求,然後會返回次級域名(SLD)效勞器的地點,本例子會返回.example的地點
- 接着向SLD域名效勞器經由歷程域名查詢目標IP,本例子會返回www.example.com的地點
- Local DNS Server會緩存效果,並返回給用戶,緩存在系統中。
DNS安全題目
- DNS反射/放大進擊
向大批開放DNS效勞器發送大範圍域名查詢的DNS要求,並將該DNS要求的源IP地點偽形成想要進擊的目標IP地點。因為要求數據比相應數據小得多,進擊者可以應用該手藝放大控制的帶寬資本和進擊流量。
- DDOS進擊可以形成域名剖析癱瘓
- DNS/域名挾制
在挾制的網絡範圍內阻攔域名剖析的要求,剖析要求的域名,返回假的IP地點或許使要求落空相應。DNS挾制經由歷程改動DNS效勞器上的數據返回給用戶一個毛病的查詢效果來完成的。 - DNS污染
DNS污染是一種讓平常用戶因為獲得子虛目標主機IP而不能與其通訊的要領,指的是用戶接見一個地點,國內的效勞器(非DNS)監控到用戶接見的已被標記地點時,效勞器偽裝成DNS效勞器向用戶發還毛病的地點的行動。
dns污染與dns挾制的區分在於,dns挾制修正了dns的剖析效果,dns污染是不經由dns效勞器,返回毛病信息
- DNS信息黑客被修正
DNS優化
可以看出,dns剖析是一個冗長的歷程,怎樣優化這一歷程呢?
- DNS Prefetching
用戶在要求某個鏈接之前,瀏覽器先嘗試剖析該鏈接的域名再將其舉行緩存。如許真正要求的時刻就不須要舉行DNS剖析。
可以
- 在效勞器中相應設置
X-DNS-Prefetch-Control
的值為on
啟動預剖析 - HTML中,
<meta http-equiv="x-dns-prefetch-control" content="on">
- 對特定域名預剖析
<link rel=”dns-prefetch” href=”//fonts.googleapis.com”>
域名收斂
提議將靜態資本只放在一個域名下面,可以有用削減dns的要求
- httpdns
基於Http協定向HTTPDNS效勞器發送域名剖析要求,替換了基於DNS協定向運營商Local DNS提議剖析要求的傳統體式格局,可以防止運營商的域名挾制和舉行精準調理。
這歷程分為兩步
- 客戶端直接接見HttpDNS接口,獵取營業在域名設置治理系統上設置的接見耽誤最優的IP。(基於容災斟酌,照樣保存次選運用運營商LocalDNS剖析域名的體式格局)
- 客戶端向獵取到的IP后就向直接往此IP發送營業協定要求。以Http要求為例,經由歷程在header中指定host字段,向HttpDNS返回的IP發送規範的Http要求即可。
CDN
CDN是什麼
講完DNS,如今可以最先講CDN了,CDN的全稱是Content Delivery Network,即內容分髮網絡,它可以及時地根據網絡流量和各節點的銜接、負載狀態以及到用戶的間隔和相應時候等綜合信息將用戶的要求從新導向離用戶近來的效勞節點上。其目標是運用戶可就近獲得所需內容,處理 Internet網絡擁堵的狀態,進步用戶接見網站的相應速率。
典範的CDN系統由下面三個部份構成
- 分發效勞系統
最基礎的事情單位就是Cache裝備,cache(邊沿cache)擔任直接相應終究用戶的接見要求,把緩存在當地的內容疾速地供應給用 戶。同時cache還擔任與源站點舉行內容同步,把更新的內容以及當地沒有的內容從源站點獵取並保存在當地。Cache裝備的數目、範圍、總效勞才能是衡 量一個CDN系統效勞才能的最基礎的目標
- 負載平衡系統
重要功用是擔任對一切提議效勞要求的用戶舉行接見調理,肯定供應給用戶的終究現實接見地點。兩級調理系統分為全局負載平衡(GSLB)和本 地負載平衡(SLB)。GSLB重要根據用戶就近性準繩,經由歷程對每一個效勞節點舉行“最優”推斷,肯定向用戶供應效勞的cache的物理位置。SLB重要負 責節點內部的裝備負載平衡
- 運營治理系統
分為運營治理和網絡治理子系統,擔任處理營業層面的與外界系統交互所必需的網絡、整頓、託付事情,包含客戶治理、產物治理、計費治理、統計剖析等功用。
CDN的歷程
運用CDN的要領很簡單,只須要修正本身的DNS剖析,設置一個CNAME指向CDN效勞商即可。
用戶接見未運用CDN緩存資本的歷程為:
- 瀏覽器經由歷程前面提到的歷程對域名舉行剖析,以獲得此域名對應的IP地點;
- 瀏覽器運用所獲得的IP地點,向域名的效勞主機發出數據接見要求;
- 效勞器向瀏覽器返回相應數據
運用CDN后
- 當用戶點擊網站頁面上的內容URL,經由當地DNS系統剖析,DNS系統會終究將域名的剖析權交給CNAME指向的CDN專用DNS效勞器。
- CDN的DNS效勞器將CDN的全局負載平衡裝備IP地點返回用戶。
- 用戶向CDN的全局負載平衡裝備提議內容URL接見要求。
- CDN全局負載平衡裝備根據用戶IP地點,以及用戶要求的內容URL,挑選一台用戶所屬地區的地區負載平衡裝備,通知用戶向這台裝備提議要求。
- 地區負載平衡裝備會為用戶挑選一台適宜的緩存效勞器供應效勞,挑選的根據包含:根據用戶IP地點,推斷哪一台效勞器距用戶近來;根據用戶所要求的URL中照顧的內容稱號,推斷哪一台效勞器上有用戶所需內容;查詢各個效勞器當前的負載狀況,推斷哪一台效勞器另有效勞才能。基於以上這些前提的綜合剖析以後,地區負載平衡裝備會向全局負載平衡裝備返回一台緩存效勞器的IP地點。
- 全局負載平衡裝備把效勞器的IP地點返回給用戶
- 用戶向緩存效勞器提議要求,緩存效勞器相應用戶要求,將用戶所需內容傳送到用戶終端。假如這台緩存效勞器上並沒有用戶想要的內容,而地區平衡裝備依舊將它分配給了用戶,那末這台效勞器就要向它的上一級緩存效勞器要求內容,直至追溯到網站的源效勞器將內容拉到當地。
上面的字太多,有點繞?淺顯點就是用戶接見的資本原本是寄存在你本身的效勞器,經由歷程修正DNS讓用戶根據IP等狀況來挑選適宜的CDN緩存效勞器來獵取資本。
CDN的長處
如許做有什麼長處呢?
- 當地Cache加速,加速接見速率
- 鏡像效勞,消弭運營商之間互聯的瓶頸影響,保證差別網絡的用戶都能獲得優越的接見質量
- 長途加速,自動挑選cache效勞器
- 帶寬優化,分管網絡流量,減輕壓力,
- 集群抗進擊
- 勤儉本錢
末了
本文章為前端進階系列的一部份,
迎接關注和star本博客或是關注我的github