CDN,全称为Content DeliveryNetwork,中文意为“内容分发网络“”。通过将网络内容发布到最靠近用户的『边缘节点』,使不同地区的用户在访问相同页面、图片或视频时就可以就近获取。

这样能够减轻服务器的负载,也可以减少整个网络中流量分布不均的问题,既能够降低互联网公司的成本(硬件开销、能耗和管理成本),也能有效改善整个网络的性能。

所谓“边缘节点”指的是CDN服务商经过精心选择的距离用户距离最近的服务器节点,即在各地均有机房集群分布,变得仅是“一跳”距离(traceroute命令后查看经过路由的个数),也就是说用户在访问时不需要经过多个路由器,可以有效提高访问时间。

我们来看如下图示:

从上图我们可以看到,在对某个需要CDN的域名解析时,是由智能CDN负载均衡系统选定的某个边缘节点的IP。用户利用这个IP地址访问边缘节点,然后通过该节点通过其内部DNS解析得到源服务器IP并发出请求来获取用户所需的页面或资源。若请求成功,边缘点会将此资源缓存(cache)下来,下次用户再访问时可以直接读取,而不需要每次都去访问源服务器。

CDN架构

可以使用第三方CDN平台,如果有需要也可以自建平台,平台资源用不了再拿出来卖,阿里云等就是这个样子发展的。

那么我们这次就举例说明淘宝的CDN平台是如何架构的。

淘宝网的CDN主要用户来支持用户购物,比如双11光棍节,有海量的图片请求。

它的图片存储于后端的TFS集群中,CDN系统将这些图片缓存到用户最近的边缘节点。

CDN系统采用2级缓存:L1和L2级缓存。用户在访问淘宝网的图片时,通过全局调度系统调度到某个L1级缓存节点,如果L1缓存命中,那么就直接将图片数据返回给用户;否则,即请求L2级缓存,并将返回的图片数据缓存到L1缓存节点。如果L2缓存节点被命中,直接将图片数据返回给L1级缓存节点。

如果都没有命中,最后请求源图片服务器集群。此集群为一个个的Nginx的Web 服务器,它也会在本地做图片缓存,当本地缓存不命中再去请求后端的TFS集群。图片服务器集群和TFS集群会同时部署在同一个数据中心内。如下图:

淘宝网CDN整体架构

针对于每个CDN节点,其内部通过LVS+HAProxy的方式进行负载均衡。也可以适当使用Keepalived等进行处理。

LVS是四层负载均衡软件,能够支持灵活的负载均衡策略。通过其有机的结合两者,可以将不同的图片请求调度到不同的squid服务器。

LVS通常vip+master+backup三类机器组成,其中vip是控制机器,其接收外界访问。master与backup为工作与热备节点。其可以实现下面Haproxy机器的健康检测与负载均衡,完成IP层的转发后,交给一台健康且相对负载较轻的Haproxy机器。

Haproxy:7层负载均衡技术,将请求转发到真正的Web服务器上。除此之外,还有:

  • Haproxy优化-支持长链接;

  • Haproxy调度算法优化-一致性哈希,根据访问内容(URL)来得出分配的机器

每台图片服务器本质是一个人的Squid服务器,用来缓存图片的二进制数据。用户请求按照一定的策略发送到某台squid服务器,如果命中即返回,否则squid再去源服务器快取一份图片再缓存到本地,接着再把该图片数据返回给用户。

数据通过一致性哈希分布到不同的squid服务器中,使得增加/删除服务器,只需要移动1/n(squid服务器总数)的对象。

小结 

CDN本质是一种分布式缓存系统,无需考虑数据持久化,如果缓存服务器出现问题,在缓存集群中标记为删除即可。

淘宝网CDN采用了分级存储,在Squid服务器上使用了SSD + SAS + SATA混合存储,图片随着热点变化而迁移,最热的图片存储在SSD上,中等热度的存储到SAS,轻热度的存储到SATA。通过此种方式,能够很好的结合几种存储介质的成本与优势。

顺应摩尔定律,硬件技术的不断发展,SSD价格快速下降,大部分CDN缓存节点开始大规模配备SSD设备。

另外,CDN缓存服务属于IO密集型,而非CPU密集型的服务,使用ATOM芯片能够有效整体降低功耗。

需要我们注意的是,缓存系统访问量较大,更新、删除较少,但需要留意缓存与源服务器之间内容的一致性。比如源服务器更换了一张图片,或者删除了一个数据,需要能够相对实时的推送到CDN缓存节点。

本文由21CTO社区原创

CDN技术详解的更多相关文章

  1. 《CDN技术详解》 - CDN知多少?

    开发时间久了,就会接触到性能和并发方面的问题,如果说,在自己还是菜鸟的时候完全不用理会这种问题或者说有其他的高手去处理这类问题,那么,随着经验的丰富起来,自己必须要独立去处理了.或者,知道思路也行,毕 ...

  2. CDN技术详解及实现原理

    CDN技术详解 一本好的入门书是带你进入陌生领域的明灯,<CDN技术详解>绝对是带你进入CDN行业的那盏最亮的明灯.因此,虽然只是纯粹的重点抄录,我也要把<CDN技术详解>的精 ...

  3. CDN技术详解笔记

    1.影响网络传输的四个因素(1)“第一公里”:网站服务器接入互联网的链路所能提供的带宽.(2)“最后一公里”:用户接入带宽.(3)对等互联关口:不同网络之间的互联互通带宽.(4)长途骨干传输:首先是长 ...

  4. CDN技术详解(七)

    动态内容加速服务的实现 随着Web2.0的兴起,产生了动态网页.个性化内容.电子交易数据等内容的加速,这些就涉及了动态内容加速技术. 静态内容的加速,都是对于表现层的加速,对于动态页面等内容的加速,则 ...

  5. CDN 技术详解(DNS,GSLB,Cache)

    CDN 是什么 CDN(Content Delivery Network,内容分发网络),即全网内容加速服务.为了尽可能的避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快.更稳 ...

  6. CDN学习笔记二(技术详解)

    一本好的入门书是带你进入陌生领域的明灯,<CDN技术详解>绝对是带你进入CDN行业的那盏最亮的明灯.因此,虽然只是纯粹的重点抄录,我也要把<CDN技术详解>的精华放上网.公诸同 ...

  7. Zookeeper系列二:分布式架构详解、分布式技术详解、分布式事务

    一.分布式架构详解 1.分布式发展历程 1.1 单点集中式 特点:App.DB.FileServer都部署在一台机器上.并且访问请求量较少 1.2  应用服务和数据服务拆分  特点:App.DB.Fi ...

  8. 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)

    一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...

  9. 「视频直播技术详解」系列之七:直播云 SDK 性能测试模型

    ​关于直播的技术文章不少,成体系的不多.我们将用七篇文章,更系统化地介绍当下大热的视频直播各环节的关键技术,帮助视频直播创业者们更全面.深入地了解视频直播技术,更好地技术选型. 本系列文章大纲如下: ...

随机推荐

  1. eventbus实时更新

    1.发送方 EventBus.getDefault().post(new FriendApprovalEvent()); 2.接收方 /** * 收到好友消息 * * @param event */ ...

  2. POJ 2559 Largest Rectangle in a Histogram ——笛卡尔树

    [题目分析] 本来是单调栈的题目,用笛卡尔树可以快速的水过去. 把每一个矩阵看成一个二元组(出现的顺序,高度). 然后建造笛卡尔树. 神奇的发现,每一个节点的高度*该子树的大小,就是这一块最大的子矩阵 ...

  3. 一步一步打造自己的Android图片浏览器(原创)

    今天我们试着来制作一个自己的Android图片浏览器. 图片浏览器应该具有什么功能呢?鉴于不同的人不同的理解,这里提出一个基本的需求: 搜索手机内的所有图片,展示于一个列表中: 列表中展示的是图片的缩 ...

  4. Django+Tastypie作后端,RequireJS+Backbone作前端的TodoMVC

    一.配置好环境 接着前一篇的例子,顺带测试一下已下载下来example里面的backbone_require的例子 注意:直接本地用backbone.localStorage插件运行TodoMVC会报 ...

  5. Xcode UUID查询

    打开终端,输入: defaults read /Applications/Xcode.app/Contents/Info DVTPlugInCompatibilityUUID

  6. [软件推荐]VMware Workstation 12.1.1多国语言(含简体中文)+激活方法

    虚拟机VMware功能强大,使用方便,可以在同一台电脑上安装多个系统(Windows.Linux.OS).虚拟机上的所有操作都不会影响到“实体机”,因此在虚拟机中可以进行很多测试操作,如果某些软件使用 ...

  7. BZOJ1055: [HAOI2008]玩具取名

    ... #include<bits/stdc++.h> using namespace std; int q[255]; char s[205]; char p[]={'W','I','N ...

  8. 微信 winwre 移动调试

    如果 微信服务号无法连接 网络,关闭window 防火墙

  9. JavaScript必须了解的知识点总结【转】

    整理的知识点不全面但是很实用. 主要分三块: (1)JS代码预解析原理(包括三个段落): (2)函数相关(包括 函数传参,带参数函数的调用方式,闭包): (3)面向对象(包括 对象创建.原型链,数据类 ...

  10. 第一章-第七题( 有人认为,“中文编程”, 是解决中国程序员编程效率一个秘密武器,请问它是一个 “银弹” 么? )--By 侯伟婷

    首先,“银弹”在百度百科中的解释是银色的子弹,我们更熟知的“银弹”一词,应该是在<人月神话>中提到的.银弹原本应该是指某种策略.技术或者技巧可以极大地提高程序员的生产力[1].此题目中关于 ...