王者荣耀背后的腾讯云CDN业务


“王者荣耀”是一款国民级手机游戏,用户体量巨大,并且一直保持着较高的更新频率。这种业务场景下,突发也变得很是频繁,然而业务体验是相当重要的,使用CDN必不可少。相似地,常常有带宽突发的场景,好比新闻爆点视频、大型直播活动、热门影视剧上线、热门游戏等应用发布。同时,因为家庭带宽和移动网络的快速升级,突发带宽量级愈来愈大,常常达到Tb级,甚至10Tb 。如何快速、低成本地保障业务突发,成为CDN的一大挑战。api



2007年,腾讯自建CDN启用,接入了第一个业务腾讯网。到如今CDN带宽量级,从最先的数十Gb,发展到如今的数十Tb;单业务的带宽也愈来愈大,大部分业务常量带宽在几百Gb,部分突发业务达到了10Tb。网络的快速升级,移动用户爆发式增加,以及视频类业务包括点播和直播的兴起,使得业务突发愈来愈频繁,突发带宽愈来愈高,对CDN的要求也愈来愈高。


自建CDN得益于腾讯业务的蓬勃发展,前后支持了游戏下载、流媒体视频加速、春节红包等腾讯内部业务;2014年腾讯将CDN全面能力开放,成为腾讯云CDN产品,除承载内部业务外,也开始接入第三方客户,好比快手点播、斗鱼直播等。以上各类业务都有突发场景,也有很强的成本诉求,在如何低成本地保障业务突发,腾讯CDN积累了丰富的经验。接下来就挑战和问题、解决方案、效果三个方面来解析。


1、挑战和问题


下面将从业务特色开始,分析目前存在的挑战和问题。


一、 业务特色和挑战


CDN多样化的场景,注定了突发业务充满挑战。突发业务具备体量大、场景多样化、 无规律等特色。


a) 体量大:突发业务带宽大部分都超过Tb,部分甚至达到了10T ;


b) 场景多样化:点播中的热剧和新闻爆点;直播中的LOL/KPL/DOTA2等游戏直播,NBA/世界杯等体育直播,演唱会等综艺直播;应用下载中的王者荣耀等游戏下载;静态网页加速中的红包活动、电商促销等;


c) 无规律:部分突发活动没法预知,活动快要开始或已经开始了才知道,好比新闻爆点。


体量大,须要准备更多的资源;场景多样化,须要知足不一样的资源需求;无规律性则对咱们的扩容效率提了很高的要求。


二、 目前存在的问题


仅仅为了知足业务突发需求而储备大量的资源,成本过高,会形成资源极大的浪费。因此通常会经过复用资源来应对业务突发。可是直接复用资源,存在两个问题:


a) 只能复用部分资源:CDN业务,通常按业务类型来区分平台和资源使用,主要缘由是不一样业务类型对资源需求不一样,好比点播类须要更多的存储;有较多https请求的静态页面类,则须要更多CPU资源。这种限制使得资源没法充分利用,加大了资源准备的难度。好比视频突发主要使用视频Buffer,而下载类和网页类Buffer没法直接使用,这限制了Buffer的大小。即便复用同类型资源,由于涉及多个业务资源的协调,准备时间通常会超过两天,没法应对临时突发;


b) 没法下降成本:另外针对部分突发业务,好比游戏应用下载,带宽高峰期在上午和中午,若是只使用本平台资源,会致使结算带宽明显上涨,从而增长成本。没法利用同其余业务错峰的特色来下降结算带宽。


2、解决方案


腾讯云CDN经过虚拟化复用现有资源,搭建全业务通用的突发池,全部平台共享Buffer。 突发池中的设备为Docker虚拟机,虚拟机有不一样的规格,只要业务有需求,均可以按需使用。突发池中的带宽储备达到了10Tb,基本能知足全部业务突发需求 。任何业务有突发需求,配合自动化上架接口,可在10分钟完成10Tb突发池的扩容。


一、 突发池系统架构


突发池系统架构见图1

图 1突发池系统架构


a) 突发池:在各平台物理机的上层,由Docker虚拟机组成的资源池,对CPU/内存/磁盘等使用进行了限制,防止对物理机形成影响。原有业务依然部署在物理机上,不用调整。


b) 自动化部署和监控系统: 能根据业务实际需求,自动预测需求并扩容 。全部的突发需求,都能在10分钟内扩容完成。针对点播/下载业务,自动分发热点文件,下降回源带宽。


c) 调度系统:突发业务的突发性和体量大两个特色,使得相比域名调度系统,直通车更占优点。直通车调度更灵活,生效时间快,能达到分钟级。


虚拟机和物理机部署了上报Agent,业务信息和服务器负载每分钟都会上报到监控系统。监控系统会根据历史带宽预测一个值,并与当前带宽比较,若是当前带宽超过预测值的50%,则认为有突发。根据带宽上涨的比例,系统会自动从突发池中扩容相应数据的设备。针对提早准备的突发活动,运维能够指定带宽需求量,以后系统便会自动计算设备需求并扩容。


分钟粒度上报的服务器负载信息则为监控系统作调度决策提供了依据。系统会依据机房剩余带宽、服务器带宽、CPU、IO等综合信息决定虚拟机是否须要从直通车中启用或者禁用。用户访问时先请求直通车调度系统,直通车会根据调度策略返回一个302地址,302地址中为实际CDN资源地址。用户跳转到302地址,并获取实际内容。


二、技术优化


使用虚拟化技术复用资源的重要前提是,不影响现有业务。这就要求对资源有充分的隔离,好比CPU/磁盘,以及对带宽的使用。下面是实现过程当中存在的几个问题及解决方案:


● 精准控制单机负载:负载太高会影响业务质量,须要对单机负载进行精准的控制。


解决方案:
a) 配额系统:直通车中有配额系统,对每一个虚拟机可以使用的资源作了限制,包括CPU/IO和带宽。监控系统中上报的信息,结合配额系统,能够确保服务器负载被限定在制定的范围内,粒度为分钟级。
b) 部分请求返回302:对CPU/带宽/IO等作了限制后,应用程序能根据母机当前负载,实时判断是否处理一个请求。若是负载在限制范围内,直接处理;若是负载超出限制,则返回302,使用户跳转到直通车的调度地址,这样能在尽可能不影响业务质量的状况对负载作精准控制。程序层面对负载的实时控制,是配额系统的有效补充。
c) 网卡流量控制:在极端状况下,业务带宽超过设定阈值,这时虚拟网卡会主动丢包,避免对母机形成影响。


● 限制磁盘大小:Docker在ext3/ext4文件系统中没法对文件/目录级别进行磁盘大小限制。


解决方案:
因为腾讯云CDN业务基本都是使用ext3/ext4文件系统,这种状况下Docker只能对根据用户或用户组对磁盘进行限制,但现网业务都是直接在root环境下使用。这里咱们使用loop device来解决磁盘大小限制问题。虚拟机中突发业务使用挂载在loop device上的目录,这样就能够间接限制磁盘大小,防止使用太多磁盘影响其余业务。


● CPU绑定:默认是绑定全部CPU,部分单CPU负载高会影响母机业务。


解决方案:
经过脚本每分钟采集一次系统全部单CPU负载,为避免频繁调整和受毛刺数据影响,取15分钟的均值。最后选取负载较低的部分核,并经过配置文件cpuset.cpus来动态绑定,将虚拟机对母机业务影响下降到最小,而且能充分利用资源。


效果


突发池上线后,高效支持了王者荣耀下载、NBA直播、KPL/LPL游戏直播等屡次大型突发活动,节约成本2000万。经过共享buffer,搭建突发池能显著提升突发能力和下降成本。服务器


----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------网络