面试的时候搞混了CDN和DNS(好吧,我是个小菜鸡)。以此篇文章重新构建一下我的知识体系。
CDN原理
CDN是将源站内容分发至全国所有节点,从而缩短用户查看对象的延迟,提高用户访问网站的响应速度与网站的可用性的技术。它可以有效解决网络带宽小,用户访问量大,网点分布不均等问题。
CDN称为“内容分发网络”,源站内容(image、html、js、css等)这个属于内容分发。
为什么有CDN?
互联网应用包含大量的静态内容,这些内容又是最容易耗费带宽的,特别是针对全国甚至全世界的大型站点,如果这些请求都指向主站的服务器的话,不仅是主站服务器受不了,单端口500M左右的带宽也扛不住,所以大多数网站都需要CDN服务。
其实主要原因是:访问速度对互联网应用的用户体验、口碑、甚至说直接的营收都有很大的影响,任何企业都渴望自己的站点有更快的访问速度。而HTTP传输时延对WEB的访问速度的影响很大,这是由于TCP/IP协议的一些特点决定的。物理层面光速有限、信道有限,协议上的原因有丢包、慢启动、拥塞控制等。
其他作用
- 为了实现跨运营商、跨地域的全网覆盖;
- 为了保障你的网站安全:CDN采用负载均衡和分布式存储技术,加强网站的可靠性,相当于无形中给你的网站添加了一把保护伞,可应对绝大部分的互联网攻击事件;
- 为了异地备援:当某个服务器故障时,系统会调用临近的服务器节点进行服务;
原理
通过域名解析IP地址:
- 当用户点击网站页面上的内容URL,经过本地DNS系统解析,DNS 系统会最终将域名的解析权交给 CNAME 指向的 CDN 专用 DNS服务器。
- CDN 的 DNS 服务器将 CDN 的全局负载均衡设备 IP 地址返回用户。
- 用户向 CDN 的全局负载均衡设备发起内容URL 访问请求。
- CDN 全局负载均衡设备根据用户 IP地址,以及用户请求的内容URL,选择一台用户所属区域的区域负载均衡设备,告诉用户向这台设备发起请求。
- 基于以下这些条件的综合分析之后,区域负载均衡设备会向全局负载均衡设备返回一台缓存服务器的IP地址:
- 根据用户 IP地址,判断哪一台服务器距用户最近;
- 根据用户所请求的 URL 中携带的内容名称,判断哪一台服务器上有用户所需内容;
- 查询各个服务器当前的负载情况,判断哪一台服务器尚有服务能力。
- 全局负载均衡设备把服务器的 IP 地址返回给用户。
- 用户向缓存服务器发起请求,缓存服务器响应用户请求,将用户所需内容传送到用户终端。如果这台缓存服务器上并没有用户想要的内容,而区域均衡设备依然将它分配给了用户,那么这台服务器就要向它的上一级缓存服务器请求内容,直至追溯到网站的源服务器将内容拉到本地。
DNS 服务器根据用户 IP 地址,将域名解析成相应节点的缓存服务器IP地址,实现用户就近访问。使用 CDN 服务的网站,只需将其域名解析权交给 CDN 的全局负载均衡(GSLB)设备,将需要分发的内容注入 CDN,就可以实现内容加速了。
适用场景
- 网站站点/应用加速:static内容加速,静态内容加速:html、image、js、css等;
- 视音频点播/大文件下载分发加速:视频点播;
- 视频直播加速;
- 移动应用加速:移动APP更新文件分发,移动APP内图片、页面、短视频等内容的优化加速分发;
流量劫持
其实CDN本身就是一种DNS劫持,只不过是良性的。不同于黑客强制DNS把域名解析到自己的钓鱼IP上,CDN则是让DNS主动配合,把域名解析到临近的服务器上。
写在最后:文章内容来源于奇哥的:《CDN原理简单介绍》一文