2019独角兽企业重金招聘Python工程师标准>>>

摘要

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

image.png

背景

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

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

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

一、挑战和问题

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

1、 业务特点和挑战

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

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

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

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

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

2、 目前存在的问题

仅仅为了满足业务突发需求而储备大量的资源,成本太高,会造成资源极大的浪费。所以一般会通过复用资源来应对业务突发。但是直接复用资源,存在两个问题:

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

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

二、解决方案

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

1、 突发池系统架构

突发池系统架构见图1

image.png

图 1突发池系统架构

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

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

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

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

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

2、技术优化

使用虚拟化技术复用资源的重要前提是,不影响现有业务。这就要求对资源有充分的隔离,比如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,搭建突发池能显著提高突发能力和降低成本。

image.png

总结

腾讯云CDN,通过Docker技术复用资源,搭建Tb级别突发池,能支持直播、点播、静态等各种业务突发,能自动检测到业务突发需求并在10分钟内完成资源扩容,具有发布快,成本低等特点。资源复用能提高资源利用率,为业务提供极大的突发池,但要注意复用业务之间不能相互影响,这需要对服务器进行实时的监控和及时的调度。另外还有一些待改进的地方,比如内核参数基于容器隔离,方便不同业务调优;部分业务客户端不支持302跳转,调度系统需要支持域名调度方式。

在此我向大家推荐一个架构学习交流群。交流学习群号: 744642380, 里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良

转载于:https://my.oschina.net/u/3833719/blog/1799238

腾讯架构师的王者荣耀高并发故事相关推荐

  1. 王者荣耀高并发背后的故事

    本文转载自:王者荣耀高并发背后的故事 摘要 堪称中国最火爆的手机游戏"王者荣耀",拥有亿级用户体量,千万级日活用户,如何快速.低成本地保障业务突发?本文从该问题出发,论述了问题对应 ...

  2. 高级架构师,精通JAVA/高并发/微服务/分布式/中间件

    JAVA高级架构师专栏 大纲介绍 Java基础复习 单点系统 Springboot框架应用 页面开发模版引擎 Java核心基础 JVM调优 高并发优化 Spring.Mybatis.Springboo ...

  3. 【成为架构师课程系列】高并发系统设计的三大目标:高性能、高可用、可扩展

    系统设计目标 1:如何提升系统性能? 提到互联网系统设计,你可能听到最多的词儿就是 三高,也就是 高并发.高性能.高可用,它们是互联网系统架构设计永恒的主题.在前两节课中,我带你了解了高并发系统设计的 ...

  4. 并发经验八年架构师:缓存在高并发场景下该如何问题

    缓存一致性问题 当数据时效性要求很高时,需要保证缓存中的数据与数据库中的保持一致,而且需要保证缓存节点和副本中的数据也保持一致,不能出现差异现象.这就比较依赖缓存的过期和更新策略.一般会在数据发生更改 ...

  5. 阿里架构师教你处理高并发:2种方法,解决Redis和Mysql一致性

    需求起因 在高并发的业务场景下,数据库大多数情况都是用户并发访问最薄弱的环节.所以,就需要使用redis做一个缓冲操作,让请求先访问到redis,而不是直接访问MySQL等数据库. 这个业务场景,主要 ...

  6. 架构师必备!分布式高并发都不会还做Java程序员

    Java核心架构笔记大致如下 0~1年: Java基础(基本语法.面向对象.继承.多态.接口和抽象类.异常.内部类.集合.泛型.反射.I/O等) Web编程(Servlet+MySQL数据库+商品管理 ...

  7. 腾讯AI单挑碾压王者荣耀职业玩家:人类15场只能赢1局,坚持不到8分钟 | “绝悟”技术细节披露...

    乾明 发自 凹非寺  量子位 报道 | 公众号 QbitAI 最新消息,腾讯又围绕王者荣耀AI"绝悟"发表了新论文,已经被AI顶会AAAI 2020收录. 这是继今年8月份绝悟在5 ...

  8. 被腾讯起诉抄袭《王者荣耀》的公司发声明,重点却是法官

    http://www.sohu.com/a/255219956_100166583 被腾讯起诉抄袭<王者荣耀>的公司发声明,重点却是法官 2018-09-21 14:32拳头公司/王者荣耀 ...

  9. 腾讯AI Lab x 王者荣耀:开放让「AI+游戏」想象力落地

    感谢阅读腾讯AI Lab微信号第81篇文章.本文将介绍腾讯 AI Lab 与王者荣耀共同推进的 AI+游戏开放平台计划. 8月18日,王者荣耀「无限开放计划交流会」在深圳举办,这是一次「造梦之旅」的开 ...

最新文章

  1. 十年学术生涯新开端:港中文助理教授周博磊宣布加入UCLA
  2. 这款IDEA插件,可以让你用中文编码哟
  3. remo video repair中文版
  4. 【spring-session】介绍
  5. 【线上分享】WebRTC传输与服务质量
  6. IBASE text component
  7. 每日一题(18)—— 指定地址存入数据
  8. Spring4.x集成xfire1.26 问题汇总
  9. yum php 降级 5.3,CentOS 5.3 通过yum升级php的方法
  10. setTimeOut与setInterval的区别
  11. amap vueamap 与_vue中使用vue-amap(高德地图)
  12. python怎样定义font_无法在matplotlib中使用自定义字体
  13. Python 爬虫对链家网广州二手房源信息的处理与可视化分析
  14. c语言地址符作用,理解C语言取地址符
  15. 批量自定义裁剪多张图片,可以按固定像素值或比例批量裁剪图片
  16. oracle表空间temp表空间满了,Oracle temp表空间爆满的处理方法
  17. 企业正确导入BPM系统要注意什么
  18. Android gatekeeper的原理介绍和代码导读
  19. 解决:org.apache.catalina.core.ContainerBase.addChildInternal ContainerBase.addChild
  20. 工具 | Plant UML介绍及使用

热门文章

  1. linux下oracle查看表结构,Oracle 查看表结构的方法
  2. Photoshop制作一个质感的卡通小公仔
  3. iframe 跨域处理
  4. 三子棋2(完成玩家和电脑循环操作部分)
  5. 从构建进程间缓存设计谈Webpack5 优化和工作原理
  6. Linux——shuf sed
  7. IOS开发 相关尺寸总结
  8. 养猫小程序(前半部分)
  9. Android刘海屏、水滴屏全面屏适配详解,android开发应用实战详解
  10. 【PS】浅谈PS颜色模式-CMYK模式