我们访问网站的时候会输入域名,而在真实网络中主机通信是通过 IP 地址进行通信的,DNS 服务器的作用就是将这域名字符串解析为对应的 IP 地址
如果说每输入一个域名都需要去一个 DNS 服务器解析的话,全世界这么高的访问量,肯定是无法承载的,所以会对 DNS 服务器进行按层分级,不同类型的 DNS 服务器负责解析不同的域名
ipconfig /displaydns
查看当我们输入 www.abc.com 域名的时候
在第 6 步骤,DNS 服务器解析后可以返回多个对应的主机 IP 地址,那么客户端访问的时候可以通过随机或者轮询等访问做简单的负载均衡处理
上述流程就是一个没有给域名配置 CDN 的流程
百度百科:CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术
比如说我们有个图片网站应用部署在成都,一开始应用只在成都当地推广本地人使用。后面业务发展出去了,全国各地的人都在访问了,处于新疆乌鲁木齐的用户发现图片加载的速度变得很慢(因为图片这些数据需要从成都通过网线传输到乌鲁木齐太远了,而且中途可能存在网络拥挤等等原因)那么想个办法,我们在乌鲁木齐部署一个缓存服务器,后续乌鲁木齐的用户只要访问过某张图片就将其缓存到乌鲁木齐的服务器上,后续的访问就可以变得更快
比如说访问乌鲁木齐缓存服务器没有对应的图片缓存的时候,这个时候可以去访问西北数据中心获取数据,西北数据中心没有再去源数据中心获取,这样可以尽可能的减少对源数据中心的访问减少源数据中心压力的同时,加速用户的访问体验
经过一层一层数据中心节点数据访问过后,数据会依次缓存到对应的数据中心节点中,后续用户访问就可以临近访问了
网页、图片、文件等一些不经常改变的数据,可以缓存到 CDN 中
查找的数据有可能不存在,也有可能过期了,如何更新 CDN 缓存呢
如果是某份热点数据,一开始就近 CDN 缓存中没有就向上拉取,如果出现回源,可能导致源数据中心压力会过大。
这个时候可以采取主动推送模式,将热点数据主动推送到边缘结点。
HTTP 协议通过 TCP 协议进行数据传输,在传输数据之前需要建立 TCP 连接
在 HTTP 通信的时候,建立连接和断开连接分别需要 3 次握手和四次挥手,效率还是很低的在 HTTP/1.0 的时候每次发送数据都需要建立连接响应完成后就需要断开连接。自 HTTP/1.1 开始就是长连接了,除非一端主动断开连接,这样极大的提升了通信的效率。
服务端一般采用 Nginx 等服务器来做负载均衡处理,客户端过来的 HTTP 请求会与 Nginx 建立长连接后开始数据传输到达 Nginx,Nginx 会维护到达不同服务器的长连接将数据转发到真实的后端服务器
当然 nginx 也可以以短连接的方式发起请求,只是使用长连接能够减少 3 次握手和 4 次挥手大大的提升通信效率,减缓网络拥挤的情况
我们使用长连接的时候会设置长连接的超时时间,到达时候会释放连接,那么在连接释放的时候,首先服务端会发送 FIN 包到达客户端,客户端还未收到 FIN 包的时候,发起了一个 HTTP 请求的话,那么这个请求就会响应 NoHttpResponseException
解决方案:
参考