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, 这样, 在响应时,就会响应最新的数据了。

有错误请帮忙指正,谢谢。

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