堪称中国最火爆的手机游戏“王者荣耀”,拥有亿级用户体量,千万级日活用户,如何快速、低成本地保障业务突发?本文从该问题出发,论述了问题对应的解决方案,并对其效果做出总结。

作者:黎斌,整编:51CTO技术栈

来自:腾讯架构师微信公众号

“王者荣耀”是一款国民级手机游戏,用户体量巨大,而且一直保持着较高的更新频率。这种业务场景下,突发也变得非常频繁,然而业务体验是至关重要的,使用 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,而下载类和网页类 Buffer 无法直接使用,这限制了 Buffer 的大小。即使复用同类型资源,因为涉及多个业务资源的协调,准备时间一般会超过两天,无法应对临时突发情况。

  • 无法降低成本。针对部分突发业务,比如游戏应用下载,带宽高峰期在上午和中午,如果只使用本平台资源,会导致结算带宽明显上涨,从而增加成本。无法利用同其他业务错峰的特点来降低结算带宽。

解决方案

通过虚拟化复用现有资源,搭建全业务通用的突发池,所有平台共享 Buffer。突发池中的设备为 Docker 虚拟机,虚拟机有不同的规格,只要业务有需求,都可以按需使用。

突发池中的带宽储备达到了 10Tb,基本能满足所有业务的突发需求 。任何业务有突发需求,配合自动化上架接口,可在 10 分钟完成 10Tb 突发池的扩容。

01

突发池系统架构

图1:突发池系统架构

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

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

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

虚拟机和物理机部署了上报 Agent,业务信息和服务器负载每分钟都会上报到监控系统。监控系统会根据历史带宽预测一个值,并与当前带宽比较,如果当前带宽超过预测值的 50%,则认为有突发。

根据带宽上涨的比例,系统会自动从突发池中扩容相应数据的设备。针对提前准备的突发活动,运维可以指定带宽需求量,之后系统便会自动计算设备需求并扩容。

分钟粒度上报的服务器负载信息则为监控系统做调度决策提供了依据。系统会依据机房剩余带宽、服务器带宽、CPU、IO 等综合信息决定虚拟机是否需要从直通车中启用或者禁用。

用户访问时先请求直通车调度系统,直通车会根据调度策略返回一个 302 地址,此302 地址为实际 CDN 资源地址。用户跳转到 302 地址,并获取实际内容。

02

技术优化

使用虚拟化技术复用资源的重要前提是不影响现有业务。这就要求对资源有充分的隔离,比如 CPU/磁盘,以及对带宽的使用。

下面是实现过程中存在的几个问题及解决方案:

精准控制单机负载

负载过高会影响业务质量,需要对单机负载进行精准的控制。

解决方案:

  • 配额系统:直通车中有配额系统,对每个虚拟机可使用的资源做了限制,包括 CPU/IO 和带宽。监控系统中上报的信息,结合配额系统,可以确保服务器负载被限定在指定的范围内,粒度为分钟级。

  • 部分请求返回 302:对 CPU/带宽/IO 等做了限制后,应用程序能根据母机当前负载,实时判断是否处理一个请求。

    如果负载在限制范围内,直接处理;如果负载超出限制,则返回 302,使用户跳转到直通车的调度地址,这样能在尽量不影响业务质量的情况对负载做精准控制。程序层面对负载的实时控制,是配额系统的有效补充。

  • 网卡流量控制:在极端情况下,业务带宽超过设定阈值,这时虚拟网卡会主动丢包,避免对母机造成影响。

限制磁盘大小

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

解决方案:由于腾讯 CDN 业务基本都是使用 ext3 / ext4 文件系统,这种情况下 Docker 只对根据用户或用户组对磁盘进行限制,但现网业务都是直接在 root 环境下使用。

这里我们使用 loop device 来解决磁盘大小限制问题。虚拟机中突发业务使用挂载在 loop device 上的目录,这样就可以间接限制磁盘大小,防止使用太多磁盘影响其他业务。

CPU 绑定

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

解决方案:通过脚本每分钟采集一次系统所有单 CPU 负载,为避免频繁调整和受毛刺数据影响,选取 15 分钟的均值。

最后选取负载较低的部分核,并通过配置文件 cpuset.cpus 来动态绑定,将虚拟机对母机业务影响降低到最小,并且能充分利用资源。

应用效果

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

总结

腾讯 CDN 通过 Docker 技术复用资源,搭建 Tb 级别突发池,能支持直播、点播、静态等各种业务突发,能自动检测到业务突发需求并在 10 分钟内完成资源扩容,具有发布快,成本低等特点。

资源复用能提高资源利用率,为业务提供极大的突发池,但要注意复用业务之间不能相互影响,这需要对服务器进行实时的监控和及时的调度。

另外还有一些待改进的地方,比如内核参数基于容器隔离,方便不同业务调优;部分业务客户端不支持 302 跳转,调度系统需要支持域名调度方式。

长按订阅更多精彩▼

亿级用户体量,千万级日活用户,《王者荣耀》高并发背后的故事!相关推荐

  1. 互联网日报 | 华为鸿蒙OS 2.0正式发布;微信小程序日活用户超4亿;百胜中国回港上市首日破发...

    今日看点 ✦ 微信小程序最新数据:日活用户超4亿,相关从业者达536万 ✦ 华为鸿蒙OS 2.0正式发布,明年华为手机全面支持 ✦ 百胜中国回港二次上市首日破发,总市值超1600亿港元 ✦ 华住集团通 ...

  2. 互联网日报 |《王者荣耀》日活用户平均1亿;四部门联合约谈蚂蚁集团有关人员;“百度云手机”旗舰版发布...

    今日看点 ✦ 袁隆平团队双季稻亩产超1500公斤,再破世界纪录 ✦ 菜鸟核心系统全面上云,将实现日均处理10亿包裹 ✦ 百度正式发布"百度云手机"旗舰版:30天月卡售价77元 ✦ ...

  3. 华为如何在开发者选项观察错误日志_资讯:华为Mate 40 Pro屏幕供应商曝光;iPhone 13第一版原型机曝光;王者荣耀日均日活用户过亿...

    黑马公社为你报时,今天是2020年11月2日,周一. 黑马资讯如约而至. 华为Mate 40 Pro屏幕供应商曝光  据数码博主 @数码闲聊站 爆料称,华为 Mate40 Pro 的已知屏幕供应商有三 ...

  4. Facebook入局视频会议,日活用户超3亿的Zoom股价应声下跌,Zoom为何不扛打?

    全球社交媒体巨头Facebook上周五宣布,将推出新视频会议产品Messenger Room,供用户免费使用. 受此消息影响,疫情期间增长最快的视频会议软件服务Zoom股价出现大幅震荡:从增长超6%, ...

  5. Snapchat日活用户突破2.03亿,创历史最高水平

    7月最后一周和8月的第一周,全球知名照片分享及社交应用Snapchat接连在中国参加了两场盛会:全球移动互联网大会(GMIC)和ChinaJoy,展现了Snapchat是一个以相机为核心功能的社交应用 ...

  6. B站财报图解:年营收219亿净亏大幅缩窄 日活用户9280万

    雷递网 雷建平 3月2日 哔哩哔哩(NASDAQ: BILI,HKEX:9626:简称"B站")今日公布截至2022年12月31日的第四季度和全年财务报告.财报显示,2022财年B ...

  7. 搜狗上市总市值53亿美元;微信发布数据报告,9月份日活用户9亿丨价值早报

    第[767]期早报由[周五]赞助播出 01 今日头条 搜狗上市首日涨3.85%报13.5美元,总市值52.9亿 11月10日消息,搜狗昨日晚间在纽交所上市,发行价为13美元,股票代码为"SO ...

  8. Netflix测试有线电视频道、字节11亿入股掌阅、快手香港IPO、王者荣耀日活破一亿等|Decode the Week...

    Decode the Week≠音视频技术周刊  Picture from LiveVideoStackCon 2020 Beijing News Briefing 1. 字节跳动一亿七千万美元入股掌 ...

  9. 华为19级专家10年心血终成百页负载均衡高并发网关设计实战文档

    负载均衡(LoadBalance)的字面意思是将工作负载分担到多个工作单元上进行执行,它建立在现有网络结构之上,是构建分布式服务.大型网络应用的关键组件. 近十几年来,负载均衡技术层出不穷,令人眼花缭 ...

最新文章

  1. Android Launcher3(二) -- Drag拖动实现
  2. 【Espruino】NO.12 加速度传感器演示
  3. 微软加入字节码联盟,进一步开发支持Blazor 的WebAssembly技术
  4. 在Java等于方法中进行精确比较
  5. Android入门(六) | Activity 的启动模式 及 生产环境中关于 Activity 的小技巧
  6. 苹果发布2019年上半年透明度报告,收到数万条政府请求
  7. 具体数学-第13课(组合数各种性质)
  8. Git — 解决“requested upstream branch ‘origin/master‘ does not exist“
  9. 无线WIFI上网监控串联部署方案
  10. SpringBoot工作原理
  11. python把中文转英文_python自动化测试——中文转拼音,转英文
  12. Linux 虚拟内存
  13. 网络爬虫笔记【4】 掌握获取 Ajax 异步加载网页内容的方法
  14. 明翰英语教学系列之语料篇V0.4(持续更新)
  15. java兵临城下_CentOS6.4 64位系统安装jdk
  16. 苹果计算机的桌面图是什么情况,苹果电脑开机后,只能显示电脑桌面,桌面图标都不能显示。怎么办?...
  17. 【学习OpenCV4】图像金字塔总结
  18. 计算机连接游戏手柄,电脑如何使用手柄_电脑怎么连手柄打游戏-系统城
  19. 【安卓】【Dimens】适配文件创建
  20. python正则匹配特殊字符_python 正则表达式特殊字符

热门文章

  1. 《写作的诞生》读后感
  2. 5个方法助设计师保持创造力
  3. 电动车,摩托车灯照明 汽车灯照明 手电筒 驱动芯片
  4. 亚信Internet中国
  5. xsl 自定义函数(杂记 存在一个并没有什么大用)
  6. Java中关于队列与栈的区别
  7. c语言 gps课程设计,完整版GPS定位系统设计.doc
  8. Java函数式接口--抽象方法接口
  9. Android项目开发实战常用知识点
  10. incaseformat蠕虫病毒爆发,深信达助力安全防护