说说CDN 网络设计
客户端访问某个域名的时候,会先查找本地 hosts 文件,每个城市都有的 DNS 服务器,由它去域名服务器发送解析域名的请求,然后把结果返给客户端。
域名是分层解析的,有域名服务器、域名服务器、域名服务器三层,比如 image.baidu.com 向域名服务器发请求查询 com 的域名服务器的 ip,然后再向 com 域名服务器查询 image.baidu.com 的域名服务器的 ip。查询到域名服务器之后,任意层级的域名都会在这里解析(所以叫域名服务器)。
确实可以这样实现内容的就近分发,这样的负载均衡网络就叫做 CDN (Conent Delivery Network)
用户向本地 DNS 服务器发请求之后,经历根域名、域名的 DNS 解析,终会转给 DNS 服务器。这时候只要 DNS 服务器再转给 baidu 的 DNS 服务器就可以了,这样就能接入 CDN 服务。
当你访问某个域名的时候,解析域名的服务器会返回 CDN 服务的 DNS 服务器的域名,然后再向这台 CDN 的 DNS 服务器发送解析域名的请求,这时候它就可以根据 ip 所在城市返回一个就近城市的服务器给你。
CDN 服务会有一个控制台,可以设置不同资源的缓存时间,当然,请求的 header 里也有 expries 和 Cache-Control 来控制缓存时间,这俩的生的优先级也是可以设置的。
这样的 CDN 服务国内和国外是分开的,如果网站目标用户只是国内的,那只需要买下国内的 CDN 服务,国外用户访问慢点就慢点,如果网站国外用户也很多,那还需要买下国外的 CDN 服务。
为了加快网站的打开速度,我们会使用 CDN 服务器,它并不是一个网络协议,只是基于 DNS 协议实现的加速功能的网络。
它的原理就是域名的 DNS 服务器把请求转给 CND 的负载均衡的 DNS 服务器,然后根据 ip返回不同城市的 DNS 服务器,再根据负载来选择一台就近的服务器 的 ip 返回。
这样客户端就能从近的负载小的服务器拿到资源。
CDN 缓存设置可以根据 header 来,也可以在控制台设置一些规则,这两者生的优先级也可以设置。
CDN 网络的建设成本还是很大的,只有大公司会自建,一般我们都会买三方服务,而且国内和海外的 CDN 都是分开的,如果主要服务国内用户,那只买国内的 CDN 服务即可。