系列文章主要讲的优化,但是也会提到进行了哪些步骤。
简单理解DNS系统
CNAME
1,A记录
Address记录,可以理解为域名与IP地址的映射,这些映射关系就是A记录。
域名:www.baid.com ----> 111.111.111.111 // 只是假设
2,CNAME
多个CNAME可以对应一个A记录的域名,举个例子:
www.bai1.com ---> www.baidu.com
www.bai2.com ---> www.baidu.com
www.bai3.com ---> www.baidu.com
DNS查找IP过程
域名会去DNS服务器查找IP,然后进行缓存。下次请求就会在缓存中获取了,但是第一次请求还是会消耗很多时间,如何优化呢?
在如何优化之前,我们先搞明白DNS是如何查找的。然后才能明白怎么去优化。
- 首先浏览器会从自身的DNS缓存中查找(chrome://net-internals/#dns)
- 浏览器会从操作系统中的DNS缓存中找(window:运行ipconfig/displaydns 查看)(linux上的NSCD缓存服务)
- 从计算机host文件里找。
- 请求本地域名服务器(如:阿里云服务器),80%到这步就结束了(你申请了一个域名,去阿里云,你肯定会写上域名所指向的IP。)
- 以上顺序的查找都没命中,就需要向根域名服务器迭代请求了。
根域名服务器的迭代请求:
- 我们实际的网址其实是:www.baidu.com. (用百度举例子),你会发现,com后面多了个点(.)
- 怎么解析IP的:顺序是 . ---> .com. ---> baidu.com. ---> www.baidu.com.
- 他们分别代表着:根域名服务器 ---> 顶级域名服务器 ---> 二级域名服务器 ---> 三级域名服务器
- 每次请求都会携带上:www.baidu.com. 然后慢慢查找到IP,进行返回。
前端DNS优化
1,减少DNS查询次数
解决办法:将请求的资源都放在同样一个域(domain)下面,这样访问网站只需要进行一次DNS查找。
但是会出现问题:HTTP/1.1中推荐客户端每个域只有一定数量的并行度(他建议的是2)。那么就会出现下载资源时,排队的现象。
最终做法:在一个网站里面使用最少2个域,但不多于4个域,来提供资源。
2. DNS预解析
原理:当加载一个html时,会自动解析a标签的href链接为IP地址,并缓存。
// index.html
<html>
<a href="test.baidu.com"></a>
</html>
上面这段代码,当加载html文件时,会预先解析a标签href,并将IP缓存。当点击a标签时,就不需要DNS解析了。
问题:HTTPS不会自动进行预解析。
解决:需要手动添加在整个网站的入口页面。
添加单条解析:
<link rel="dns-prefetch" href="//img.alicdn.com"></link>
所有链接进行解析:
<meta http-equiv="x-dns-prefetch-control" content="on">
CDN
上面说的DNS是没有引入CDN时流程。如果使用CDN,流程就会发生改变。
CDN是什么?
CND全称:Content Delivery Network,即:内容分发网络。它能够时时的根据网络流量和各节点的链接、负载情况以及到用户的距离和响应时间等综合信息,将用户的请求重新导向离用户最近的服务节点上。
目的:使用户就近取得所需内容,解决Internet网络拥挤的情况,提高用户访问网站的请求速度。
CDN怎么做到优化的?
典型的CDN系统由下面三部分组成:
- 分发服务系统
最基本的工作单元是Cache设备,Cache负责直接响应最终用户的访问的请求,把缓存在本地的内容快速地提供给用户。cache还负责与源站点进行内容同步,把更新的内容以及本地没有的内容从源站点获取。
- 负载均衡系统
主要负责对所有发起服务请求的用户进行访问调度,确定提供给用户的最终实际访问地 址。两级调度体系分为全局负载均衡(GSLB)和局部负载均衡(SLB),GSLB主要根据用户的就近原则,通过对每个服务的节点进行“最优”判断(如:负载量,是否存在响应数据等),确定向用户提供服务的cache的物理位置。SLB主要负责节点内部的设备负载均衡。
- 运营管系统
分为运营管理和网络管理子系统,负责处理业务层面的与外界系统交互所必需的收集、整理、交付工作。包含客户管理、产品管理、计费管理、统计分析等功能。
CDN使用以及过程
1,CDN的使用
使用其实很简单,只需要修改自己的DNS解析,设置一个CNAME指向CDN服务商即可。
2,DNS和CDN的整体流程
- 首先浏览器会从自身的DNS缓存中查找。
- 浏览器会从操作系统的DNS中查找。
- 从计算机的host文件中查找。
- 请求本地域名服务器(如:阿里云域名供应商的服务器)。
- 发现你有配置CNAME,查找到对应的域名(如:sunkuangdong.com ---> sun.com),通知浏览器请求改为找到的域名(sun.com)。重复上面1~3步骤。
- 又请求本地域名服务器,发现有这个域名的对应配置,(如:sun.com ---> 111.111.111.111),然后将IP返回给浏览器。
- 浏览器得到了IP地址(实际上是CDN区域负载均衡服务器的地址),继续请求,CDN会根据用户的IP地址,以及用户请求的内容URL,选择一台离用户近的负载均衡设备,告诉用户向这台设备发起请求。
- 区域负载均衡设备会向全局负载均衡设备返回一台缓存服务器的IP地址。
- 全局负载均衡设备会把IP地址返回给用户。
- 用户最后向缓存服务器发起请求,缓存服务器有就响应数据,没有向上级缓存服务器要,一直追朔到网站的源服务器将内容拉到本地。
DNS与CDN
如果使用了CDN会导致DNS解析时间增长。
参考文章:
首先抱歉,没提前联系大佬们,因为私信的位置没找到。。。。。
然后对各位大佬表示感谢~~~,各位大佬指正。
晴天663:juejin.cn/post/685457…
hpoenixf:juejin.cn/post/684490…