报社的故事

本文将通过一个故事带你了解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服务器了。

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