DNS缓存
什么是DNS
全称是Domain Name System,即域名系统。
万维网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP地址。DNS协议运行在UDP协议之上,使用端口号53。
DNS解析
简而言之,通过域名,最终得到该域名对应的IP地址的过程就称之为域名解析。
www.baidu.com(域名) - DNS解析 -> 192.168.xx.xxx(IP地址)
DNS缓存
有DNS的地方,就有缓存。浏览器、操作系统、Local DNS、根域名服务器,它们都会对DNS结果做一定程度的缓存。 DNS查询过程如下:
- 首先搜索浏览器自身的DNS缓存,如果存在,则域名解析到此结束。
- 如果浏览器自身的缓存中没有找到对应的条目,那么会尝试读取操作系统的
hosts
文件看是否存在对应的映射关系,如果存在,则域名解析到此结束。 - 如果本地hosts文件不存在映射关系,则查找本地DNS服务器(ISP服务器或者自己手动设置的DNS服务器),如果存在,域名解析到此结束。
- 如果本地DNS服务器还没找到的话,就会向根域名服务器发出请求,进行递归查询。
CDN缓存
什么是CDN
全称是Content Delivery Network,即内容分发网络。
举个🌰来解释下CDN是什么:
10年前,还没有火车票代售点一说,12306.cn更是无从说起。那时候火车票还只能在火车站的售票大厅购买,而我所在的小县城并不通火车,火车票都要去市里的火车站购买,而从我家到县城再到市里,来回就是4个小时车程,简直就是浪费生命。后来就好了,小县城里出现了火车票代售点,甚至乡镇上也有了代售点,可以直接在代售点购买火车票,方便了不少,全市人民再也不用在一个点苦逼的排队买票了。
简单的理解CDN就是这些火车票代售点(缓存服务器)的承包商,他为买票者提供了便利,帮助他们在最近的地方(最近的CDN节点)用最短的时间(最短的请求时间)买到票(拿到资源),这样去火车站售票大厅排队的人也就少了。也就减轻了售票大厅的压力(起到分流作用,减轻服务器负载压力)。 用户在浏览网站的时候,CDN会选择一个离用户最近的CDN边缘节点来响应用户的请求,这样海南移动用户的请求就不会千里迢迢跑到北京电信机房的服务器(假设源站部署在北京电信机房)上了。
CDN缓存
关于CDN缓存,在浏览器本地缓存失效后,浏览器会向CDN边缘节点发起请求。类似浏览器缓存,CDN边缘节点也存在着一套缓存机制。CDN边缘节点缓存策略因服务商不同而不同,但一般都会遵循http标准协议,通过http响应头中的的字段来设置CDN边缘节点数据缓存时间。
Cache-control: max-age // 后面会提到
当浏览器向CDN节点请求数据时,CDN节点会判断缓存数据是否过期,若缓存数据并没有过期,则直接将缓存数据返回给客户端;否则,CDN节点就会向服务器发出回源请求,从服务器拉取最新数据,更新本地缓存,并将最新数据返回给客户端。 CDN服务商一般会提供基于文件后缀、目录多个维度来指定CDN缓存时间,为用户提供更精细化的缓存管理。
CDN优势
- CDN节点解决了跨运营商和跨地域访问的问题,访问延时大大降低。
- 大部分请求在CDN边缘节点完成,CDN起到了分流作用,减轻了源服务器的负载。