CDN与智能DNS原理和应用 - 学习/实践

1.应用场景

了解,学习和掌握CDN与智能DNS原理和应用. 如何在日常开发中高效进行troubleshooting.

2.学习/操作

1. 文档

CDN与智能DNS原理和应用-慕课网

网络协议概论 | Laravel 学院 - CDN 缓存概述及实现原理

第20讲 | CDN:你去小卖部取过快递么?-极客时间

《cdn技术详解》

CDN 服务质量监控最佳实践 - 云+社区 - 腾讯云

提高CDN缓存命中率 - CDN - 阿里云

2. 整理输出

2.1 简洁简介

CDN是内容分发网络[英文全称是 Content Delivery Network],利用部署大量网络节点,通过服务器缓存加速,让用户可以就近同运营商网络,更快的访问到我们的互联网产品,可以简单快速的让我们的互联网产品支持海量的并发请求。

前面我们介绍了 HTTP 缓存的原理,以及基于浏览器缓存和网关缓存来实现 HTTP 缓存,浏览器缓存由于其局限性并不是主流的缓存实现方案,而网关缓存虽然解决了浏览器缓存的问题,但是所有请求仍然要发送到服务器部署的数据中心,而我们的用户是分散在天南海北的,距离数据中心越远网络延迟越大,能不能有一种缓存方案可以让用户可以就近获取缓存资源呢,这就引入了我们今天要介绍的主题 —— CDN 缓存。

CDN 的英文全称是 Content Delivery Network,即内容分发网络。CDN 缓存其实是应用服务提供商与网络服务提供商签约,将应用指定的静态资源保存到网络服务提供商的边缘节点,因为用户接入互联网都是通过网络服务商实现的,不同用户使用的网络服务商(如电信、联通、移动)不尽相同,用户通过自己所在网络服务商的边缘节点、区域节点、中心节点最终接入应用所在的数据中心,才能访问到应用服务端资源,其中边缘节点是离用户最近的运营商服务器节点,应用服务商与网络服务商签约后,就可以将静态资源缓存到这些边缘节点,这样,不同区域的用户就可以就近从边缘节点获取缓存资源,从而极大提高访问速度,所以 CDN 主要解决的是下面两个问题:

  • CDN 缓存解决了跨运营商和跨地域访问的问题,访问延时大大降低;
  • 大部分请求在 CDN 边缘节点完成,CDN 起到了分流作用,降低了应用所在服务器的负载。

智能DNS比传统DNS更好的地方就是能够基于IP信息给不同的用户最合适的服务器IP,可以给用户提供更好的网络服务。

这里主要讲解CDN的原理和具体使用,也有详细介绍DNS解析的完整过程,再具体介绍了智能DNS的实现原理和作用,帮助对这些基础服务有更加深入的了解。

2.2 CDN加速原理

cdn

那么 CDN 缓存具体是怎么实现的呢?

在没有 CDN 的情况下,用户向浏览器输入 www.web.com 这个域名,客户端会根据 DNS 服务获取到域名对应的 IP 地址(具体实现原理可参考 DNS 服务这篇分享),并将 IP 地址返回,然后客户端通过这个 IP 地址和默认的 HTTP 应用端口号,就可以访问到服务器端的这个网站应用。

有了 CDN 之后,情况会发生变化。在 web.com 对应的权威 DNS 服务器上,会设置一个 CNAME 别名(这可以通过在域名服务商那里通过设置 CNAME 域名解析实现),指向另外一个域名,假设这个域名是 www.web.cdn.com,并将其返回给本地 DNS 服务器。当本地 DNS 服务器拿到这个新的域名时,需要继续解析这个新的域名。这个时候,再访问的就不是 web.com 的权威 DNS 服务器了,而是 web.cdn.com 的权威 DNS 服务器,这是 CDN 自己的权威 DNS 服务器。在这个服务器上,还是会设置一个 CNAME,指向另外一个域名,也即 CDN 网络的全局负载均衡器。

接下来,本地 DNS 服务器去请求 CDN 的全局负载均衡器解析域名,全局负载均衡器会为用户选择一台合适的缓存服务器提供服务,选择的依据包括:

  • 根据用户 IP 地址,判断哪一台服务器距用户最近;
  • 用户所处的网络运营商;
  • 根据用户所请求的 URL 中携带的内容名称,判断哪一台服务器上有用户所需的内容;
  • 查询各个服务器当前的负载情况,判断哪一台服务器尚有服务能力。

基于以上这些条件,进行综合分析之后,全局负载均衡器会返回一台缓存服务器的 IP 地址。

本地 DNS 服务器缓存这个 IP 地址,然后将其返回给客户端,客户端再根据这个 IP 地址去访问对应的边缘节点,下载资源。如果该边缘节点上并没有用户想要的内容,那么这台服务器就要向它的上一级节点请求内容,直至追溯到网站的源服务器将内容拉取到本地。

完整的实现流程可以通过下面这张图来描述:

DNS解析完整流程

2.3 CDN的具体使用

CDN 常用于缓存变动很小的静态资源,比如静态页面、图片、资源文件等。

如果用一张图来描述不同缓存实现方案的架构关系,可以这样来体现:

不同缓存实现方案架构关系

静态内容中,有一种特殊的内容,也大量使用了 CDN,这个就是流媒体。

CDN 支持流媒体协议,例如 RTMP 协议。在很多情况下,这相当于一个代理,从上一级缓存读取内容,转发给用户。由于流媒体往往是连续的,因而可以进行预先缓存的策略,也可以预先推送到用户的客户端。对于一般静态页面而言,内容的分发往往采取拉取的方式,也即当发现未命中的时候,再去上一级进行拉取。但是,流媒体数据量大,如果出现回源,压力会比较大,所以往往采取主动推送的模式,将热点数据主动推送到边缘节点。关于流媒体的 CDN 缓存实现细节,后面介绍完流媒体协议及其实现后会继续介绍。

备注:

关于cdn缓存的实现, 一般不自己搞, 而是直接使用云服务即可,
阿里云 腾讯云 七牛云都提供了CDN服务

2.4 DNS解析

TBD

2.5 智能DNS

TBD

HTTP-DNS

3. 总结

TBD

后续补充

...

3.问题/补充

1. stark:我有个疑问,CDN是内容分发系统,之前在NGINX的学习中,那个老师说主要是为了静态资源,我有点不理解,超哥能稍微解释一下么

作者回复: nginx是在网站的接入层缓存静态资源,CDN是在数据中心之外,离客户端很近的地方缓存静态资源

2. ZACK:由于多dc,静态资源图片同步是个很大的问题,因为网速,后来我们尝试用cdn去解决,但被公司一自称很牛的哥们否掉,原因是cdn只支持外网的,至今没有完全理解是否正确

作者回复: 理解正确,cdn其他厂商提供的服务,是指在外网工作

网友补充:

theivanxu:

首先说了多数据中心,而数据中心之间资源同步一般是使用内部网络,现有商用CDN大部分是提供面向用户的公网服务,也就是“用户—CDN”这样的关系,所以无法满足内部使用需求。

3. tommyCmd:根据ip地址,怎么判断服务器的远近呢?

Javatar:

ip地址本身并不包含地理位置信息。你知道ip地址有ABCD四类,但其实每个国家、每个城市、每个运营商,都能拿到其中的一小段,所以ip的某一小段,到底分配给了那个国家,那个城市,那个运营商,有专门的机构维护这部分信息。所以拿你的ip,去查这个数据库,看看位于哪一段,就知道你所在的城市及运营商了。

aoe:

百度输入ip,就能看到你在哪个地方,说明IP里面蕴含了位置的秘密

奋斗:

你ping的过程中会走省、市的路由器,这些路由器一般都是知道的

4. 一步:老师,DNS的作用相当于客户端找到最近最合适DNS运营商,而CDN相当于DNS运营商找到最合适的服务器获取内容。可以这样理解吗?

William Ning

个人观点: DNS的作用有两个,一个是域名解析,一个是做负载均衡【内部和全局】,这里明显讨论的是负载均衡的作用,最终的结果还是返回最近最合适的Server IP。 CDN是对上述DNS过程的补充,优化的方案,通过自身的分发网络,主要是针对静态资源,以及一些动态资源进行传输的优化,使之在地理位置上更加接近用户。 简而言之,前者负载均衡是针对机房层面【部署的机房不会有很多,地理上寥寥无几】,后者则是在更小更细的层面,比如边缘节点,【有很多,地理上更加分散,大的cdn厂商几乎分不在全国各个角落】,从而能达到对于所有用户更加低的延时。

William Ning

补充,当然,从上图中,可以看到CDN要访问的节点比直接的DNS更多,如果内容访问的命中率不高,反而得不偿失。CDN本质上就是缓存,节点会配置一定的缓存策略,过期策略,更新策略等,同时会CDN厂商或者云服务器厂商,如阿里,会提供监控数据,包含,访问次数,回源统计,命中率等。

https://help.aliyun.com/document_detail/123330.html

5. 易轻尘:貌似cdn要访问的节点比直接的dns更多啊,要是内容命中率不高的话反而得不偿失。所以cdn的边缘节点是有像cache那样的缓存机制吧,最近最少访问之类的?

作者回复: 是的

4.参考

CDN与智能DNS原理和应用-慕课网  // CDN与智能DNS原理和应用

网络协议概论 | Laravel 学院  // CDN 缓存概述及实现原理

第20讲 | CDN:你去小卖部取过快递么?-极客时间

后续补充

...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值