CDN是如何工作的?

本文涉及的产品
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
简介: CDN是互联网中使用较频繁的一种技术。你也许常听人说:“我们的网站使用了CDN技术”,但可能他们对CDN的了解并不多,也许只局限于--用了以后网站访问速度会变快。其实,CDN的原理非常简单。当浏览器请求一资源时,第一步是做DNS解析,DNS解析就像是从通讯录根据姓名找号码,浏览器发送域名,然后得到DNS服务器返回的IP地址。

CDN是互联网中使用较频繁的一种技术。你也许常听人说:“我们的网站使用了CDN技术”,但可能他们对CDN的了解并不多,也许只局限于--用了以后网站访问速度会变快。

其实,CDN的原理非常简单。当浏览器请求一资源时,第一步是做DNS解析,DNS解析就像是从通讯录根据姓名找号码,浏览器发送域名,然后得到DNS服务器返回的IP地址。浏览器通过IP地址和服务器连接并获取资源(DNS服务器会有很多层的缓存,但超出本文范围)。

对于小站点或个人博客,一个域名对应一个IP地址,而大站点可能含多个IP地址。

当请求一个资源时(如网站),距离会影响连接速度,所以从国内访问国外的网站会比较慢。因此,一些大公司在世界各地配置服务器并同步数据,这就叫CDN,而那些离当地用户最近的服务器叫“边缘服务器(edge servers)”。

DNS解析

当浏览器通过CDN做域名解析请求时,针对单IP的网站会有一些不同。DNS服务器会找出最适合的服务器来处理请求,而且非常简单,DNS会找出离请求地点最近的边缘服务器。如下图所示,如果我从维吉尼亚州发送一个指向美国中部服务器的请求,就会得到位于东海岸的边缘服务器地址,如果我从加利福尼亚州发送请求,就会得到位于西海岸的边缘服务器地址。

image

也就是说处理请求的第一步:找出离请求位置最近的服务器。有些公司可能会用其他的方式优化CDN服务器,例如,如果最近的服务器满负荷运作,那么接下来的请求就会转到其他闲置的服务器。总之,CDN总会找出最适合的服务器来处理请求。

获取内容

边缘服务器是一种代理缓存,类似浏览器缓存。当请求到达边缘服务器,它会首先检查内容是否是最新的。缓存标识(key)就是整个Url地址(跟浏览器一样),如果内容已被缓存且没有过期,就直接返回缓存内容。

如果没有缓存或已过期,边缘服务器会向源服务器发送请求获取内容,并缓存起来。

image

雅虎创建了一个开源项目叫Apache Traffic Server,用来管理CDN直接的交互,如果想了解更多代理缓存的原理,推荐你读一下这个项目的文档。

示例

雅虎的CDN服务中,使用一个工具叫“组合处理器(combo handler)”,它会把多个文件的请求整合到一起,变成一个请求-响应操作。下面是例子:

http://yui.yahooapis.com/combo?3.4.1/build/yui-base/yui-base-min.js&3.4.1/build/array-extras/array-extras-min.js

域名yui.yahooapis.com是雅虎CDN服务的一部分,会把你的请求转给离你最近的边缘服务器,这个请求包含两个文件yui-base-min.js和array-extras-min.js,但只需一次响应便可完成。这些逻辑处理操作不在边缘服务器,只能在源服务器上。

静态指什么?什么情况适合使用CDN?

每当我描述类似上文的“组合处理器”之类的系统时,经常会看到别人困惑的表情。CDN有时候容易跟FTP资源混淆,因为它们都是上传静态资源供其他人获取。我希望我上文的描述能让大家搞清楚两者不一回事。边缘服务器是一个代理,源服务器告诉边缘服务器返回什么内容,源服务器可能是Java,Ruby,Node.js,.Net等,因此可以实现任何逻辑。边缘服务器什么也不做只是发生请求并返回内容。

既然CDN如此高效,为什么不把网站所有东西都用CDN来提高性能?CDN本质是缓存,如果保存的是动态页面,每次页面内容都会有所变化,那么每次请求都要边缘服务器和源服务器交互一次,那么这个缓存也就没有意义。

这也是为什么Javascript,CSS,images,Flash,音频,视频等文件特别适合使用CDN技术,因为这些文件是不变的,所有的用户获取的都一样,一旦通过CDN缓存,所有用户都将受益。

缓存过期

雅虎性能指南规定静态资源应该要有缓存过期标识保存在Http协议的header中,这么做有两个原因:其一,浏览器会缓存资源,其二,CDN也会将资源缓存一段时间。这同样意味着你不能使用重复的文件名,因为他们至少会被缓存在两个地方,用户可能会一直获取不到最新版本的文件。

有几种方式解决这个问题,YUI 库用包含不同版本库的目录来区分。通常也可以在文件名末尾加入标识符,如MD5的哈希值或者版本控制软件的修订号。任何一种方式都为了确保当用户的请求包含过期标识的时候,依然能获得最新版本的资源文件。

结语

CDN技术已经是当今互联网重要的一部分,随着时间的推移,它只会变得越来越重要。即便是现在,一些公司仍然努力尝试把更多的功能移到边缘服务器,以便能给用户更快速的体验。这里包含了一种技术叫Edge Side Includes (ESI),用来缓存页面的部分内容。

更好的理解CDN技术及工作原理是提升CDN性能的关键。

 

原文:http://www.nczonline.net/blog/2011/11/29/how-content-delivery-networks-cdns-work/

注:这是我第一次翻译英文文章,花了比想象中要多的时间,如果看完文章对你有帮助是我最大的欣慰,不足的地方欢迎批评指出。

相关实践学习
Serverless极速搭建Hexo博客
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
相关文章
|
边缘计算 缓存 监控
【CDN 排查方案-1】认识 CDN 网络调优
面向不同业务类型的网站,很多人都选择了 CDN 加速来优化自己的网站,目的在于加速网民的体验效果,赢取流量。 在网站调优的过程中,如果正确理解基于 CDN 的网络调优以及正确的配合 CDN 服务方来快速提供调优信息做了详细的讲解, 希望对大家有用,希望对从事 CDN 的人和对网络调优感兴趣的人能有作用。
【CDN 排查方案-1】认识 CDN 网络调优
|
25天前
|
缓存 搜索推荐 调度
什么样的CDN才算是一个好的CDN
CDN,即内容分发网络,通过分布于各地的服务器节点加速静态资源的加载,如图片、视频及网页文件等。好的CDN应具备泛解析、自定义HTTPS、隐藏源IP、缓存加速、SEO优化、Gzip压缩、智能调度、全球加速及防盗链等功能,确保高效、安全、稳定的用户体验。
35 0
|
4月前
|
缓存 边缘计算 网络协议
CDN 分发系统的架构
【8月更文挑战第8天】
|
5月前
|
缓存 监控 前端开发
利用CDN提升网站性能的技术探索
【7月更文挑战第8天】CDN作为提升网站性能的重要工具,已经广泛应用于各类网站中。通过减少延迟、加速静态资源加载、提高网站可用性和优化带宽成本等方面,CDN为网站运营者提供了全面的性能优化方案。然而,要充分利用CDN的优势,还需要合理选择CDN提供商、正确配置CDN服务以及持续优化网站内容。只有这样,才能真正实现网站性能的提升和用户体验的优化。
|
缓存 网络协议 关系型数据库
CDN是什么?用了CDN就一定比不用更快吗?
CDN是什么?用了CDN就一定比不用更快吗?
341 0
|
存储 缓存 负载均衡
CDN - CDN架设、CDN产品介绍、CDN加速原理
CDN - CDN架设、CDN产品介绍、CDN加速原理
444 0
|
SQL 缓存 网络安全
使用CDN有什么好处?
使用CDN有什么好处?
|
CDN
CDN产品介绍——CDN加速服务有哪些功能及限制
CDN产品介绍——CDN加速服务有哪些功能及限制自制脑图
176 0
CDN产品介绍——CDN加速服务有哪些功能及限制
|
CDN
CDN产品介绍——CDN的使用场景
CDN产品介绍——CDN的使用场景自制脑图
143 0
CDN产品介绍——CDN的使用场景
|
存储 缓存 安全
CDN的学习与认识
CDN是内容分发网络的缩写,是一种分布在全球各地的网络服务,旨在通过在网络上分布内容副本,以减少对单个服务器的负载并加速内容的传输。CDN通过在用户与内容服务器之间插入缓存服务器来加速内容传输。