CDN的优点与缺点

CDN,中文名叫做「内容分发网络」,它的作用是减少传播时延,找最近的节点,实际上,尽管互联网帮助我们实现了地球村,但是从中国到日本和从中国大陆到中国台湾省的时延仍旧是不一样的,这一点可以从 ping 和 traceroute 中看出。

CDN过程:
首先我们在地址栏键入一个网址,浏览器发现本地没有关于这个网址的 DNS 缓存,所以向网站的 DNS 服务器发起请求。

网站的 DNS 服务器设置了 CNAME,指向了某个 CDN 服务器,也就是我们常见的阿里云、腾讯云、Cloudflare 之类的,去请求 CDN 中的智能 DNS 均衡负载系统。

均衡负载系统解析域名,把对用户响应最快的节点返回给用户,然后用户向该节点发出请求。

如果是第一次访问该内容,CDN 服务器会向源站请求数据并缓存,否则的话,直接在缓存节点中找到该数据,将请求结果发给用户。

对于最简单的 CDN 系统而言,只要一台 DNS 调度服务器和一个节点服务器即可,但在复杂的应用中,会存在多级缓存,多台 Cache 来协同工作。

CDN 的优点:

  • 访问加速

CDN 作为前端性能经典手段,相信大家已经无脑使用了,正如前面所说的,减少了时延,从很大程度上就能作为加速手段了。实际上,真正的 CDN 并不是前面举例的一个国家一个节点,甚至是一个运营商,一个省份乃至地区都会有节点。

  • 减轻源站(服务器)负载

一个非常简单就能想明白的问题,如果 CDN 已经能帮我返回数据了,那么请求就不会到达源站,源站(服务器)的负载就减轻了。

  • 抗住攻击

既然源站的负载被减轻了,那么在受到 DDOS 攻击的时候,也能谈笑风生。

当年阮老师被 DDOS 闹的满城风雨,后来阮老师就把内容开始迁移到 GayHub……

CDN基本用法:

  • 缓存设置

第一,缓存的设置,max-age 我们都用过,在 Cache-Control 中经常用于缓存的控制,可是 max-age 设置的缓存会应用于一个请求经过的每一级,如果我们希望 CDN 不缓存那么久,要怎么办呢?那就是 s-maxage,它用于设置代理服务器的缓存时间,会覆盖 max-age 的设置,这样我们可以把 max-age 用于本地缓存,把 s-maxage 用于 CDN 缓存时间,避免脏数据的产生。

  • 缓存命中率

对于一个缓存而言,还有一点很重要,就是你的缓存到底有没有用,衡量这个东西的就是缓存命中率。如果只是静态资源,在刷新缓存之后,可能会导致命中率下降,因此 CDN 的资源不适合经常刷新,换句话说,如果一个请求结果会经常进行变更,那么 CDN 基本就没什么存在的意义。
判断是否命中缓存

无论是我们自己在开发过程中,还是帮客户 debug 的过程中,我们都会考虑一件事——这个资源是否命中了CDN,是否是因为CDN导致的问题,这个时候就要秀一波操作了。

在各大厂商的 CDN 返回的数据中都会有一个 X-Cache,上面内容是 Hit 或者 Miss,还会加上诸如 Memory 或者 Disk 的缩写表示内存还是磁盘,如果出现 Upstream 或者 Miss 则表示没有命中。

  • 资源预热

缓存设计中,预热是很重要的环节,在最初刚开始启动 CDN 的时候,CDN 上并没有缓存数据,此刻大量的请求全部打向源站,肯定会把源站打挂,预热就是实现缓存好热门数据,这样在业务上线时,CDN 上已经有所需的数据了。

现实世界的 CDN

比如,节点挂了,直接导致的是用户的损失,尤其是体量大的公司依赖 CDN 进行静态资源管理的时候,发生这样的事情后果会非常严重。

其次,便宜没好货:本来在只有网宿而没有阿里云的时代,CDN 是很昂贵的,阿里腾讯在拉低 CDN 价格的同时,也拉低了 CDN 的质量,部分节点的访问质量不太高会导致有些用户访问的网络质量非常差。

然后,一个微小的科普:什么是混合 CDN——混合 CDN 这个名词看着很高端,实际上就是,我们用了多家厂商的 CDN,可能也包括自己建的,然后谁好的选谁,但是有的时候反而会造成服务不可控,进一步劣化 CDN 的质量。
总结

CDN 这个东西本质就是一个缓存,只是这个缓存离你特别特别的近,作为用户还是开发都能从中享受到一点福利,但作为一个服务于企业的开发人员,不仅要考虑 CDN 的优点,也要知道 CDN 给我们带来的坑,这样才能靠谱的作为 CDN 的使用者。

转载于:https://zhuanlan.zhihu.com/p/39028766

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值