报社的故事

本文将通过一个故事带你了解 CDN

B 报纸是最近新发行的一种特殊的报纸、B 报纸会在每周定期发布,并且不对外出售。在 B 报纸刚刚发行的时候由于读者太少,所以只有在 W 报社才能看到。此外,报社每次只会印刷少量的 B 报纸供阅览。小 U 平时很喜欢看 B 报纸,因此他会经常专门跑去报社看报纸。

在读者比较少的时候,这种办法相对奏效,但是当观看 B 报纸的人越来越多的时候,问题就出现了。第一,小 U 离报社很远,每次要看 B 报纸的时候,小 U 都要花好长时间的路程才能到报社。第二,由于看 B 报纸的人越来越多,有时印刷好的所有 B 报纸都已经被其他的用户拿去看了,小 U 这个时候必须要排队,并且等到有人看完之后才能看 B 报纸。

W 报社也注意到了这个问题,它最开始采取的办法是每次增大印刷量,这样就能同时有更多的人来看 B 报纸了。果然增大印刷量之后排队的人变少了,但是好景不长,随着看 B 报纸的人变得更多,大家又要到报社前排队了。此外,包括小 U 在内的一些人每次还是得在路上花好长的时间到报社。另外一个问题是,每天下班的时间是排队的高峰,大量的读者在报社前排队,而在其他时间看 B 报纸的人就不是很多,这个时候多印刷的 B 报纸又有点浪费了。

那么如何才能解决这个问题呢?W 报社想了一个两全其美的办法。办法很简单,它开始和各地的书报亭展开合作,现在书报亭可以去报社订阅一定量的 B 报纸,并且书报亭也可以直接浏览 B 报纸了。

现在小 U 想要看 B 报纸,他不需要每次都跑到遥远的报社去看了,他可以直接去楼下小区旁的书报亭看,大大节省了时间,同时也提升了他的积极性。

如果有的时候,恰巧大量的读者来到同一家书报亭看 B 报纸,或者有的时候书报亭还没有来得及获得最新一期的 B 报纸怎么办呢?作为书报亭,它也有两种选择,第一,它可以直接去报社拿最新一期的 B 报纸。第二,它也可以看看附近其他的书报亭有没有最新一期的 B 报纸。无论哪种方法,书报亭花费的时间也不会比读者直接去报社看报纸慢,同时,下一次还有读者看 B 报纸的时候也能直接把上一次拿到的最新一期的报纸直接给读者看了。

B 报纸凭借优质的内容和服务,很快受到了广泛的欢迎。

角色

  • 小 U: 用户
  • B 报纸:网站
  • W 报社:服务器
  • 书报亭: CDN 边缘服务器

解释

我把 CDN 和书报亭做了类比,可能不是完全准确,但希望通过上述的故事让大家对 CDN 能有一个直观的认识。

在没有 CDN 的时候,网站是如何响应用户的请求的呢?简单地说,每次用户访问网站时(浏览报纸),都需要连接到网站对应的服务器(W 报社),服务器收到请求后,回复相应的网站内容(当然这其中的步骤没有这么简单,还包括了 DNS 查询、路由、监听等一系列的工作)。你可以发现,每次用户访问网站时,都必须向网站背后对应的服务器请求需要的资源,因此服务器需要直接面对每个用户的请求,在请求量变多的时候就有可能产生性能问题。
CDN 结构示意图

那么如果有了 CDN,情况会如何呢?CDN 的本质,是将用户的请求中转到某一个中间的服务器上(书报亭)。当用户请求网站时,由这些中间服务器代替网站源服务器响应用户请求,如果用户请求的一些资源不包含在中间服务器上,那么此时再由中间服务器向源服务器请求,从而大大减少了源服务器的资源消耗。另外,CDN 的负载均衡还能将用户的请求分发到最佳的中间服务器上,从而大大的加快了用户的访问速度。

总结

希望以上的文字能让你对 CDN 有一个初步的了解。我之前一直很好奇访问域名不变的情况下 CDN 是如何生效的,最近几天恰好看了腾讯云的一些 CDN 文档才大概了解了一些原理,其实是修改你的域名 CNAME 记录为 CDN 提供商的域名,同时在 CDN 的配置页面设定源站的地址,这样当用户访问你的域名地址的时候就能请求 CDN 服务器了。

如果有任何疑问或者建议,欢迎在评论区里留言。

评论