( 1 )解决因分布、带宽、服务器性能带来的访问延迟问题,适用于站点加速、点播、直播等场景。使用户可就近取得所需内容,解决 Internet 网络拥挤的状况,提高用户访问网站的响应速度和成功率。
( 2 )控制时延无疑是现代信息科技的重要指标, CDN 的意图就是尽可能的减少资源在转发、传输、链路抖动等情况下顺利保障信息的连贯性。
( 3 ) CDN 就是扮演者护航者和加速者的角色,更快准狠的触发信息和触达每一个用户,带来更为极致的使用体验。
如下图所示 DNS 在对域名解析时不再向用户返回源服务器的 IP ,而是返回了由智 CDN 负载均衡系统选定的某个边缘节点的 IP 。用户利用这个 IP 访问边缘节点,然后该节点通过其内部 DNS 解析得到源服务器 IP 并发出请求来获取用户所需的页面,如果请求成功,边缘节点会将页面缓存下来,下次用户访问时可以直接读取,而不需要每次都访问源服务器。

Taobao 的 CDN 架构是自研的,用于支持用户购物,尤其是“双 11” 光棍节时的海量图片请求,图片存储在后台的 TFS 集群中, CDN 系统将这些图片缓存到离用户最近的边缘节点。CDN 采用两级 Cache :L1-Cache 以及 L2-Cache 。用户访问淘宝网的图片时,通过全局调度系统( Global Load Balancing )调度到某个 L1-Cache 节点。如果 L1-Cache 命中,那么直接将图片数据返回用户;否则,请求 L2-Cache 节点,并将返回的图片数据缓存到 L1-Cache 节点。如果 L2-Cache 命中,直接将图片数据返回给 L1-Cache 节点;否则,请求源服务器的图片服务器集群。每台图片服务器是一个运行着 Nginx 的 Web 服务器,它还会在本地缓存图片,只有当本地缓存也不命中时才会请求后端的 TFS 集群,图片服务器集群和 TFS 集群部署在同一个数据中心内。

对于每个 CDN 节点,其架构如图 4-11 所示。从图中可以看出,每个 CDN 节点内部通过 LVS+Haproxy 的方式进行负载均衡。其中, LVS 是四层负载均衡软件,性能好;Haproxy 是七层负载均衡软件,能够支持更加灵活的负载均衡策略。通过有机结合两者,可以将不同的图片请求调度到不同的 Squid 服务器。

上图是 CDN 的单节点架构,它有以下三个特点
(1) Squid 服务器构成淘宝单节点中的 CDN 中的分布式缓存,这个实现比分布式缓存简单很多,因为不需要考虑数据持久化。
(2) 分级缓存,由于缓存数据有较高的局部性,在 Squid 服务器上使用 SSD+SAS+SATA 混合存储,图片随着热点变化而迁移,最热门的存储到 SSD ,中等热度的存储到 SAS ,轻热度的存储到 SATA 。通过这样的方式,能够很好地结合 SSD 的性能和 SAS 、 SATA 磁盘的成本优势;
(3) 低功耗服务器定制, CDN 缓存服务是 IO 密集型而不是 CPU 密集型的服务,因此,选用 Intel Atom CPU 定制低功耗服务器,在保证服务性能的前提下大大降低了整体功耗。
五、分布式键值系统
分布式键值系统是用于存储关系简单的半结构化数据,半结构化数据均封装成由 键值对组成的对象,其中 key 为唯一标示符;value 为属性值,可以为任何类型,如文字、图片,也可以为空;timestamp 为时间戳,提供对象的多版本支持。分布式键值系统以键值对存储,它的结构不固定,每一元组可以有不一样的字段,可根据需要增加键值对,从而不局限于固定的结构,适用面更大,可扩展性更好。
分布式键值系统支持针对单个 键值对的增、删、查、改操作,可以运行在 PC 服务器集群上,并实现集群按需扩展,从而处理大规模数据,并通过数据备份保障容错性,避免了分割数据带来的复杂性和成本。
总体来说,分布式键值系统从存储数据结构的角度看,分布式键值系统与传统的哈希表比较类似,不同的是,分布式键值系统支持将数据分布到集群中的多个存储节点。分布式键值系统可以配置数据的备份数目,可以将一份数据的所有副本存储到不同的节点上,当有节点发生异常无法正常提供服务时,其余的节点会继续提供服务。