CDN 的簡述

之前,公司內部知識分享,講了些關於 CDN 方面的知識,但是那兩天都加班到很晚,精神有點不好,沒有整理。今天梳理一下,做一點輸出, 是個簡單的內容。

CDN 能夠加速請求,是因爲能夠將數據或是靜態文件緩存起來,當請求到達並命中緩存時, 就能直接返回請求結果了。並且,CDN 服務商的節點通常是比較多的, 一般都會根據你的實際 IP 所在的位置來分配最近的節點,減少傳輸的節點,加速傳輸速度。

CDN 的原理:

  1. 用戶請求指定域名。
  2. 通過 DNS 獲取 CNAME 記錄。這個 CNAME 記錄指向的是 CDN 服務商的 DNS 服務器地址, 因此爲了獲取實際的 IP 地址, 還要對 CNAME 的域名再次解析,請求到達CDN 服務商的 DNS 服務器時,CDN 服務商 會根據全局的負載均衡來返回 實際的 IP, 如根據地理位置,分配所在地最近的節點 IP
  3. 用戶根據返回的實際 IP 繼續自己的請求。

CNAME: 可以理解爲域名的別名,一個域名,可以指定多個 CNAME。例如在七牛,使用它的資源存儲服務,是需要我們設置自己的域名的,我們的域名指向他的域名, 在域名解析中設置一個 CNAME 記錄。例如,我們的域名爲 mydomain.com, 那麼設置的CNAME 記錄: 主機記錄 images.mydomain.com, 記錄值 images.mydomain.com.qiniudns.comDNS 解析記錄如下:

$ dig images.mydomain.com

; <<>> DiG 9.10.6 <<>> images.mydomain.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64585
;; flags: qr rd ra; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;images.mydomain.com.		IN	A

;; ANSWER SECTION:
images.mydomain.com.	599	IN	CNAME	images.mydomain.com.qiniudns.com.
images.mydomain.com.qiniudns.com. 599 IN CNAME	dt009.china.line.qiniudns.com.
dt009.china.line.qiniudns.com. 599 IN	CNAME	global.w.kunlunar.qiniudns.com.
global.w.kunlunar.qiniudns.com.	3599 IN	CNAME	globalcdnweb.qiniu.com.w.kunlunar.com.
globalcdnweb.qiniu.com.w.kunlunar.com. 179 IN A	59.63.233.232
globalcdnweb.qiniu.com.w.kunlunar.com. 179 IN A	218.77.65.132
globalcdnweb.qiniu.com.w.kunlunar.com. 179 IN A	59.63.233.228
globalcdnweb.qiniu.com.w.kunlunar.com. 179 IN A	59.63.233.231
globalcdnweb.qiniu.com.w.kunlunar.com. 179 IN A	59.63.233.226
globalcdnweb.qiniu.com.w.kunlunar.com. 179 IN A	59.63.233.227
globalcdnweb.qiniu.com.w.kunlunar.com. 179 IN A	59.63.233.229
globalcdnweb.qiniu.com.w.kunlunar.com. 179 IN A	59.63.233.230
globalcdnweb.qiniu.com.w.kunlunar.com. 179 IN A	59.63.233.233

;; Query time: 223 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sun Jan 13 21:37:02 CST 2019
;; MSG SIZE  rcvd: 351

動態資源

我們的資源,可能不是一般意義上的一個文件,可能是一個某一種特定格式的數據,如 json 數據。那麼,我們就需要動態去設置 CDN 緩存了。如何命中,有多個維度:

  • scheme:http、 https
  • host
  • url
  • query params
  • HEADER參數。 剛開是我以爲就是以上這些,其實現在的服務商還會提供能夠自定義的 HEADER參數.

以上,就能夠覆蓋我們很多的使用場景了。

更新 CDN 緩存資源

CDN 有多個節點,所以,想同時更新所有節點上的資源是很困難的,一般都有一定的時間間隔,因此,最好的方式,是加入版本的概念,如 v=xxxxx, 這樣, 在響應時,就會響應最新的數據了。

有錯誤請幫忙指正,謝謝。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章