堪称中国最火的手游《王者荣耀》。解决方案并总结其影响。《王者荣耀》是一款国民级手游,拥有庞大的用户基数和高更新频率。这种业务场景下,突发也变得很频繁,但是业务体验很重要,CDN的使用必不可少。腾讯CDN开发背景在使用CDN的业务中,经常会出现带宽爆棚的场景,比如突发新闻视频、大型直播活动、热门影视剧在线、游戏等应用发布。由于家庭带宽和移动网络的快速升级,突发带宽越来越大,经常达到Tb级别,甚至10Tb。如何以低成本保证业务的快速爆发是CDN面临的一大挑战。2007年,腾讯CDN接入第一笔业务腾讯网。带宽从最早的10Gb发展到现在的10Tb。单业务的带宽也在增加。大多数业务的恒定带宽为数百Gb,部分突发业务已达到10Tb。网络的快速升级,移动用户的爆发式增长,以及点播、直播等视频业务的兴起,使得业务突发更加频繁,突发带宽越来越高,对CDN的要求也越来越高。得益于公司业务的蓬勃发展,腾讯CDN先后支持了游戏下载、流媒体视频加速、春节红包等内部业务;2014年,腾讯CDN开始接入第三方客户,如快手点播、斗鱼直播等。以上业务都有意想不到的场景。腾讯CDN在多年的发展过程中,在如何保障业务突发事件方面积累了丰富的经验。下面将从挑战与问题、解决方案、效果三个方面进行分析。挑战与问题从业务特点出发,分析当前的挑战与问题。01业务特点与挑战CDN多样化的场景注定对突发业务充满挑战。突如其来的业务具有三个特点:量大。大部分突发业务带宽超过Tb,有的甚至达到10T。场景多种多样。热点剧集、新闻热点点播;LOL/KPL/DOTA2等游戏直播,NBA/世界杯等体育直播,演唱会等综艺直播;应用下载中的王者荣耀等游戏下载;静态网页加速。红包活动、电商促销等不定期。有些突发事件是无法预测的,比如新闻爆点。体量大需要准备更多的资源;不同的场景需要满足不同的资源需求;不规范对我们的扩容效率提出了很高的要求。02目前的问题是大量资源预留只是为了满足突发的业务需求,成本过高,会造成资源的极大浪费。所以一般都是复用资源来应对业务的突发。直接重用资源有两个问题:只能重用部分资源。对于CDN业务,一般会根据业务类型来区分平台和资源使用情况。主要原因是不同的业务类型对资源的需求不同。例如,点播课程需要更多的存储空间;具有许多https请求的静态页面类需要更多CPU资源。.这种限制使资源无法得到充分利用,增加了资源准备的难度。例如视频突发主要使用视频缓冲区,但不能直接使用下载和网页缓冲区,这就限制了缓冲区的大小。即使复用同类型资源,由于涉及多个业务资源的协调,准备时间一般需要两天以上,无法应对临时突发事件。无法降低成本。对于一些意想不到的业务,比如游戏应用下载,带宽峰值出现在上午和中午。如果仅使用平台资源,结算带宽将大幅增加,从而增加成本。不能利用与其他业务错峰的特点来降低结算带宽。该方案通过虚拟化复用现有资源,为所有业务构建一个通用的突发池,所有平台共享Buffer。爆破池中的设备为Docker虚拟机。虚拟机具有不同的规格。只要业务需要,就可以按需使用。突发池中的带宽储备达到了10Tb,基本可以满足所有业务的突发需求。如果有任何业务突发需求,10Tb突发池的扩容,配合自动上架接口,10分钟即可完成。01Burstpool系统架构图1:Burstpool系统架构Burstpool:在各个平台的物理机上层,由Docker虚拟机组成的资源池,限制CPU/内存/磁盘的使用,防止物理机制受到影响。原业务仍然部署在物理机上,没有做任何调整。自动化部署和监控系统:根据实际业务需求自动预测需求和扩容。所有突如其来的需求,都可以在10分钟内展开。对于点播/下载业务,热点文件自动分发,减少回源带宽。调度系统:针对业务突发性和大流量两大特点,直通车相比域名调度系统更具优势。直通车调度更灵活,见效时间快,可达到分钟级。上报代理部署在虚拟机和物理机上,业务信息和服务器负载每分钟上报给监控系统。监控系统会根据历史带宽预测一个值,并与当前带宽进行比较。如果当前带宽超过预测值的50%,则认为存在突发。根据带宽增加的比例,系统会自动从突发池中扩容相应的数据设备。对于提前准备的突发活动,运维可以指定带宽需求,系统会自动计算设备需求并进行扩容。以分钟粒度上报的服务器负载信息,为监控系统进行调度决策提供了依据。系统会根据机房剩余带宽、服务器带宽、CPU、IO等综合信息,判断虚拟机是否需要从直通车中启用或禁用。当用户访问时,首先请求直通车调度系统,直通车会根据调度策略返回一个302地址,这个302地址就是实际的CDN资源地址。用户跳转到302地址,获取实际内容。02技术优化利用虚拟化技术实现资源复用的一个重要前提是不影响现有业务。这需要充分隔离资源,例如CPU/磁盘,以及带宽的使用。以下是实施过程中存在的几个问题及解决方案:单机负载的精准控制负载过大会影响服务质量,需要对单机负载进行精准控制。解决方案:配额系统:直通车中有配额系统,限制了每个虚拟机可以使用的资源,包括CPU/IO和带宽。监控系统上报的信息,结合配额系统,可以保证服务器负载限制在指定的范围内,粒度在分钟级别。部分请求返回302:在对CPU/带宽/IO等进行限制后,应用可以根据宿主机当前负载情况实时判断是否处理某个请求。如果负载在限制范围内,则直接处理;如果负载超过限制,则返回302,让用户跳转至直通车的发车地址,尽可能在不影响服务质量的情况下,精准控制负载。程序级的实时负载控制是对配额制的有效补充。网卡流量控制:在极端情况下,当服务带宽超过设定的阈值时,虚拟网卡会主动丢包,避免影响母机。磁盘大小限制Docker无法在ext3/ext4文件系统中的文件/目录级别强制实施磁盘大小限制。解决方案:由于腾讯CDN业务基本使用ext3/ext4文件系统,本例Docker只是根据用户或用户组限制磁盘,而目前的网络业务直接在根环境下使用。这里我们使用循环设备来解决磁盘大小限制的问题。虚拟机中的突发业务使用挂载在loop设备上的目录,这样可以间接限制磁盘大小,防止磁盘使用过多影响其他业务。CPU绑定默认是绑定所有CPU,部分单CPU负载高会影响主机业务。解决方案:通过脚本每分钟收集系统中所有单CPU负载。为避免频繁调整和受毛刺数据影响,选择15分钟的平均值。***选择一些负载低的core,通过配置文件cpuset.cpus进行动态绑定,尽量减少虚拟机对宿主机业务的影响,充分利用资源。应用效果爆款池上线后,支持王者荣耀下载、NBA直播、KPL/LPL比赛直播等多场大型爆款活动,节约成本2000万元。通过共享缓冲区,构建突发池可以显着提高突发能力并降低成本。总结腾讯CDN利用Docker技术对资源进行复用,构建Tb级爆发池,可支持直播、点播、静态等多种业务爆发,并可在10分钟内自动检测业务爆发需求并完成资源扩容.具有速度快、成本低等特点。资源复用可以提高资源利用率,为业务提供巨大的爆发池,但需要注意的是,复用业务之间不能相互影响,这就需要对服务器进行实时监控和及时调度。此外,还有一些地方需要改进。比如内核参数基于容器进行隔离,方便不同业务的调优;部分业务客户端不支持302跳转,需要调度系统支持域名调度。
