CDN源于上世纪末,主要目的是解决用户的网络问题,通过把内容分存在全球各地,缩短用户查看对象的延迟,提高用户访问网站的响应速度与网站的可用性。但随着云计算的快速兴起,用户需求越来越多,不仅需要网络分发速度快,还需要计算资源、存储资源、数据分析能力,以及音视频编解码、转码需求、以及图片视频的鉴黄操作等,因此传统模式并不能完全满足现有的需求。当CDN和云结合在一起,就可实现从Content到Cloud的变革,就可以为用户包装出功能更丰富、性能更好,而且成本更低的产品。由此我们相信,云CDN将会占据更多的市场。用户需要CDN,而不止于CDN,本文主要分享阿里云CDN如何做好用户体验。
经过十年技术沉淀、资源积累,阿里云CDN目前服务客户数突破10万之多,国内处于领先地位。在基础设施方面,阿里云CDN拥有超过500个节点数,12Tb的储备量,400Gb大节点,全万兆网卡,骨干网全覆盖,还有BGP网络作为补充,行业内唯一一个使用SSD硬盘的CDN服务商,SSD的上下差距非常大,因此在I/O性能方面会比友商好得多;一周时间即可上线Tb的带宽资源,满足用户的突发带宽需求,全球覆盖6大洲、30多个国家,满足淘宝海外用户的访问需求。
决定用户体验的核心因素为:响应快,下载快,服务稳。下文会从三个维度依次介绍。
系统的整体架构
图一 系统整体架构图
整体框架主要有三个部分:一是调度系统,即自主研发的自动化调度系统;二是节点系统,分成面向用户接入的L1cache和作为二级缓存的L2cache,当内容缓存在L1cache,则L1可以返回,若L1cache没有,则L2cache返回,L2cache没有,则用户数据中心返回,但绝大部分的流量都不会返回到用户数据中心;三是管理中心,包括监控系统,内容管理,配置管理和计费系统。其中,与用户强相关的是节点系统,因为所有的请求都会通过节点系统响应;再一个是监控系统和调度系统,因为需要监控和调度来选择离用户最近的节点,让用户有更好的网络质量,并在系统出现问题时,能够更快的发现、诊断、做出切换及解决问题。
响应时间
首先就是响应时间,响应时间最关键的在于节点系统的响应快不快,整个节点系统的架构图如下:
图二 节点系统架构图
节点系统中,LVS做4层负载均衡,Tengine做7层负载均衡,Swift做缓存服务器。其中,LVS的创始人章文嵩博士就是淘宝CDN的创始人,对其非常了解;Tengine是由阿里云CDN团队维护的nginx开源分支,是中国用的最多的开源软件之一;Swift是由阿里云完全自主研发。所以,节点系统完全自主可控。重点介绍具有核心竞争力的Swift软件架构。
图三 Swift软件架构
Swift的软件架构,即PASS架构,有以下几个特点,并行、异步、可扩展、简单(Parallel, Asynchronous, Scalability, Simple),因为框架好,同时利用了各种高端技术,例如epoll、AIO,以及我们自行设计的三级缓存的替换算法,请求内部的多路复用等。经测试,Swift性能是开源软件的2.5倍。
图四 性能比较
以上是测试数据,针对实际用户访问的线上数据,统计了所有的用户请求,相同一台机器,Swift的QPS比开源软件高,性能比开源软件好,CPU和ioutil利用率比开源软件低,能够均衡使用CPU多核处理能力,高效合理地使用和控制内存,拥有最大化硬盘IOPS和吞吐。其中,用户访问响应时间,一个请求大概在2毫秒左右(包括回源),所以实际不到1毫秒,因此响应时间几乎完全无感知。
图五 Tengine毫秒级的响应时间
下载速度
其实,响应时间在业内区别仅为几毫秒,最大的区别在于下载。一个应用的下载速度由三件事情决定,一是应用特性,例如网页、视频、无线app,是否有多路复用技术,应用并发多少个连接下载等等。二是网络质量,比如内网环境带宽足够大,不丢包,延时小,下载速度一定快。跨运营商的网络,时延大,丢包率高,性能肯定差;三是TCP优化,TCP优化是在相同网络质量下,让用户的下载速度更快;
要提升网络质量,首先要知道当前的网络质量是怎么样的,传统的做法主要有三种,一个是客户端监控,一个是对local dns的主动探测,还有一个是节点间互探;但是这些监控方式普遍存在的问题是监测的覆盖面不够广导致数据的准确性和精度都不够,这直接会影响我们的决策准确性和实时性;阿里云CDN搭建的一套基于业务的实时的网络的质量监控系统,只要用户访问到节点,我们就可以知道每一个用户访问节点的网络质量,包括下载时间、下载速度、建连时间、丢包率和往返时延等等;据说所知,这应该是全球唯一一套能采集全量真实用户访问的网络质量的系统。
有了这份数据,我就可以知道,不同节点覆盖同一个地域的网络质量是怎么样的,在此基础上我们就可以知道,任何一个地区用哪些节点覆盖是最合适的,这样我们就可以实现最优的节点覆盖;另外,基于某个地域的网络质量和网络服务质量历史数据,我们就可以知道我们服务的当前情况怎么样,有没有网络抖动和异常, 我们内部称之为基于趋势的网络抖动发现机制;
因此,只要用户能够访问到我们的节点,相关的网络问题都可以被及时调整和发现;对于那些用户访问不可达的问题,我们有一套主动的网络探测系统,通过海量用户的访问和节点间的互探能够快速发现不可达的情况, 从而实现整个网络的质量优化的闭环。在网络质量相同情况下,TCP协议决定了下载速度,这是因为发送端的发送速度是和拥塞控制算法有关的,而下载速度和拥塞窗口紧密相关,所以在相同网络情况下,用户访问并不完全一样。
我们做TCP优化的思路主要是两条,第一:把协议自身的性能做到极致,尤其是在可靠传输机制这块;第二,我们称之为端到端的QoS,就是要根据不同应用的QoS要求为他定制针对性的拥塞控制算法,从而让服务质量更好:
•基于时间序的丢包发现机制
•主动的丢包发现机制
•自适应的初始窗口
•更激进的拥塞避免算法
•更小的连接超时时间
TCP优化效果如图所示:
图六 TCP优化效果对比
阿里云CDN为每个域名定制相应算法,例如点播、直播、图片或大容量下载。每个应用都有自己的服务质量的标准,比如说视频业务,并不一定下载速度达到10,20,几百就是速度快,只要比码流速度快就可以了。以上是两张线上数据,左图淘宝图片,两台机器在相同网络下同时运行得到的数据,优化之后的评价时间能降到20%多;右图是去年客户端的数据,可以看到,蓝色方框内的时间点突然下降,因为做了TCP优化。
服务稳定
稳定的服务背后,最重要的是快速的发现和定位问题,并做出及时的动作,保证服务不受到影响;
传统发现问题的方法是通过查看机器利用率、IO、CPU、磁盘等硬件判断系统是否正常工作、通过软件的相关指标判断软件是不是正常工作,通过抽样的探测发现服务是不是异常;但是这些手段都不能保证我们能够能够及时的发现问题,比如说一个域名的某个url访问正常,不等于所有url访问都是ok的;那么怎么才能判断我们的服务是正常的呢?实际上,服务质量是检验系统是否正常工作的唯一标准。现在阿里云CDN会采集所有用户的访问情况,包括每个用户下载文件所用时间,服务器响应时间,http code,回源时间等等信息;并实时的汇总成分钟粒度的数据,这样我们就可以的清楚了解每个节点、每个域名的服务质量,这样我们就可以清晰的知道服务有没有问题,
再通过自动化调度系统,从众多数据中快速发现并解决问题,这是调度系统的框架图如下:
图七 调度系统框架图
由此,可以保证快速感知、发现并且自动化处理问题,从而保证给用户稳定的服务。
下面为阿里云产品和高用户体验CDN整合在一起的方案,首先是视频,依赖于视频云的转码,编解码,鉴黄,存储能力等;还有网络上的高用户体验,包括软件定义专线、上传加速、TCP优化技术等,能够做到流畅的98%,码率比其他用户低30%,成本降低了30%,用户收看延时2秒,1秒时间打开并播放直播流。
图八 一站式视频云服务
接下来阿里云即将推出来的动态加速,基于软件定义专线、TCP协议栈优化、动态路由、私有协议等,网站加速比BGP网络好40%。还会推出移动解决方案:基于手机淘宝做了大量的网络的优化工作,包括SDK、多路复用、动态选路、速度探测、自动探测技术等。
本文根据阿里云CDN事业部专家刘泓昊(天澜)在5月17日举办的2016云栖大会·武汉峰会上《云时代——面向用户体验的CDN》演讲整理而成。