当前位置: 首页 > 科技观察

《王者荣耀》高并发背后的故事

时间:2023-03-16 16:50:22 科技观察

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

猜你喜欢