跳到主要内容

4.3-CDN

Create by fall on 2021-10-24 Recently revised in 2022-03-20

DNS

Domain Name System,域名系统

作为域名和 IP 地址相互映射的一个分布是数据库,能够使用户更方便地访问互联网,用域名代替 IP 字符串。DNS 运行在 UDP 协议上,使用 53 端口。

DNS解析

通过域名,得到该域名对应的IP地址的过程叫做域名解析。

www.test.com -> 128.113.210.23

比如说解析该域名:talb.cloud.tencent.com. 600 IN A 193.122.230.99

  • 访问根域名,获取顶级域名 .comNS(Name server)A(address),NS 为 顶级域名的名字,A 即 NS 对应的 IP 地址
  • 访问顶级域名,获取二级域名 .tencent.com 的 NS 和 A
  • 访问二级域名,获取三级域名 .cloud.tencent.com 的 NS 和 A
  • 访问三级域名,获取四级域名 .tlab.cloud.tencent.com 的 NS 和 A
  • 最后,将 tlab.cloud.tencent.com 的 IP 地址返回给用户,并且缓存
  • 用户获取到真正的 IP 地址,并且缓存。

DNS缓存

有 DNS,就有 DNS 缓存

浏览器缓存,操作系统缓存,路由器缓存,IPS服务器缓存,根域名服务器缓存,顶级域名服务器缓存,主域名服务器缓存、Local DNS、都会对 DNS 结果做一定程度的缓存。

DNS查询过程

  • 搜索浏览器自身的DNS缓存,如果有,这域名解析完成
  • 浏览器自身的缓存没有找到对应的条目,就回去读取 hosts 文件,查看是否存在对应的映射关系,如果存在则解析完成。
  • 本地 host 也不存在映射关系的话,查找本地DNS服务器 ISP服务器,或者自己手动设置的DNS服务器,如果存在,解析完成
  • 如果本地DNS服务器还没找到的话,他就会想跟服务器发出请求,进行地柜查询。

在 chrome浏览器中输入 :chrome://dns/ 可以看到 chrome浏览器的 DNS 缓存

系统缓存主要存在 etc/hosts (linux系统)

DNS 负载均衡

访问一个网址的时候,每次响应的并非是同一个服务器(IP地址的不同)。一般大公司都有成百上千台服务器来支持访问,DNS可以返回一个合适的 IP 给用户,例如可以根据每台机器的负载量,该机器里用户地理位置的距离等等,这种过程就是DNS负载均衡。

DNS 的记录类型

  • A:地址记录(address),返回域名指向的 IP 地址
  • NS:域名服务器记录(Name Server),返回保存下一级域名信息的服务器
  • MX:邮件记录(Mail Exchange),返回接收电子邮件的服务器地址
  • CNAME:规范名称记录(Canonical Name)返回另一个域名,即当前查询的域名是另一个域名的跳转。
  • PTR:你想查询记录(Pointer Record),只用于从 IP 地址查询名称

CDN

Content Delivery Network,内容分发网络

10年前,还没有火车票代售点一说,12306.cn 更是无从说起。那时候火车票还只能在火车站的售票大厅购买,而我所在的小县城并不通火车,火车票都要去市里的火车站购买,而从我家到县城再到市里,来回就是 4 个小时车程,简直就是浪费生命。后来就好了,小县城里出现了火车票代售点,甚至乡镇上也有了代售点,可以直接在代售点购买火车票,方便了不少,全市人民再也不用在一个点苦逼的排队买票了。

简单的理解 CDN 就是这些代售点(缓存服务器)的承包商,他为买票者提供了便利,帮助他们在最近的地方(最近的 CDN 节点)用最短的时间(最短的请求时间)买到票(拿到资源),这样去火车站售票大厅排队的人也就少了。也就减轻了售票大厅的压力(起到分流作用,减轻服务器负载压力)。

即内容分发网络。其目的是通过在现有的 internet 中增加一层新的网络架构,将网站的内容发布到最接近用户的网络边缘,使用户可以就近取得所需的内容,提高用户访问网站的响应速度。CDN有别于镜像,因为它比镜像更智能,或者可以做这样一个比喻:CDN= 更智能的镜像+缓存+流量导流。因而,CDN可以明显提高Internet网络中信息流动的效率。从技术上全面解决由于网络带宽小、用户访问量大、网点分布不均等问题,提高用户访问网站的响应速度。

CDN 会选择一个离用户最近的 CDN 边缘节点来响应用户的请求。

使用 CDN 缓存

在浏览器本地缓存失效后,浏览器会向 CDN 边缘节点发起请求。类似浏览器缓存,CDN 边缘节点也存在着一套缓存机制。CDN边缘节点缓存策略因服务商不同而不同,但一般都会遵循http标准协议,通过 Cache-control:max-age(强制缓存标志) 来设置 CDN 边缘节点数据缓存时间。

当浏览器向 CDN 节点请求数据时,CDN 会判断数据是否过期,没有过期,直接将缓存数据返回给客户端,否则会向服务器发出回源请求,从服务器拉取最新数据,更新本地缓存,并将最新数据返回给客户端。CDN 服务商一般会提供基于文件后缀、目录多维来指定 CDN 缓存时间。

不同网络会有单门的服务器为你服务,不同地区的也是一样。

输入域名,智能DNS服务器会为你分配最优缓存节点,这时候与你交换数据的是离你最近网络最通畅的一个CDN服务器,如果这时候它那里有这个网站的数据文件,它就会直接返回给用户,如果没有的话,他就会向网站主机发出请求拿到数据在返回给用户,这样就会使网站总服务器工作压力大大减轻。而用户这边,进行数据交换的是离你最近的而且网络最优的节点,这样自然会大大提升浏览网页的用户体验。

优势

  • CDN 节点解决了跨运营商和跨地域访问的问题,访问延时大大降低。
  • 大部分请求在CDN边缘节点完成,CDN起到了分流的作用,减轻了源服务器的负载

这些CDN服务器是谁的呢?难道免费?CDN服务商有几种:

  • 腾讯、阿里巴巴、百度等大型且有能力在全国范围提供服务器的大型互联网公司
  • 纯CDN运营商,比较出名的有蓝汛、网宿

内容参考

作者连接
三左https://juejin.cn/post/6855469171703185416