今天,来聊聊 CDN 原理

最近为了解释一个系统的工作原理给一个大概什么都不懂的人,煞费苦心的解释了一堆,才发现我并不能比较浅显易懂的去解释一些原理,自己对于一些原理掌握的也并不是非常精准,所以决定从 CDN 开始慢慢介绍一些东西的原理练手——向阮老师学习!

CDN 是个啥

先从 Google 出来的介绍说起:

CDN的全称是Content Delivery Network,即内容分发网络。 其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。

看到这里你可能只看懂了「更快更稳」,不过其实讲原理,归根到底也就是把一些不接地气的概念简单化,人类化。从最简单的说起。

CDN 的优缺点

优点:

  1. 访问加速
  2. 减轻源站负载
  3. 扛攻击

缺点:

  1. CDN 基础建设复杂、投资极大

CDN 访问原理

接下来说到重点了,CDN 是如何实现他们这些优点的,我们访问的时候到底经过了哪些步骤。

15224987547274.png

(这是一张网上找来的图)

首先,我们作为终端用户(END USERS)在地址栏中键入 codesky.me,浏览器发现本地没有关于 codesky.me 的 DNS 缓存,于是向网站的 DNS 服务器发起请求。

然后,网站的 DNS 域名服务器设置了 CName,指向了某个 CDN 服务(比如 cdn.codesky.com),去请求 CDN 中的智能 DNS 均衡负载系统。

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

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

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

真实的 CDN

作为 CDN 的使用方,在使用中其实常常会遇到各种坑,正好之前有一阵子也在和 CDN 打交道,顺手介绍一波。

在过去,CDN 还是很贵的东西,比如网宿;但是自从阿里、腾讯纷纷做云计算之后,CDN 就变的便宜了起来。

作为一个符合中国国情的 CDN,不仅考虑到了地理位置导致的访问速度不佳,还得考虑不同网络供应商的问题。

尽管 CDN 本意是可以让服务更加稳定,在某些情况下,甚至源站不可用,缓存的数据也可以让用户访问。

但是实际情况下,某个节点不稳定依旧会导致一些用户访问时出现错误,对于这种问题,尽管「刷新就好」,但依旧会让用户导致不满。

另外,如果不注意缓存时间的设计,可能会让某些节点成为「脏节点」,需要手动清理 CDN 缓存。

参考资料

  1. CDN是什么?
  2. 深度剖析:CDN内容分发网络技术原理

如果您觉得文章不错,可以通过赞助支持我

标签: 知识

添加新评论