查看原文
其他

腾讯会议「求崩」的背后,8天扩容100万核!

The following article is from 腾讯开发者 Author 腾讯云CVM团队

就在一周前,腾讯会议公开向大家发出了助崩邀请


事情的经过是这样的....




黑人问号.jpg


腾讯会议这么飘,究竟是谁给的勇气?


疫情期间,腾讯会议作为一款非常便捷的远程协作工具,成为国内众多企业日常会议沟通交流的主要平台。殊不知,这款产品从2019年12月26日才正式推出。如何在这么短的时间内,有效撑起国内数以亿计的用户访问量,保证系统的稳定运行?本文来自腾讯云的技术人员,为你解析8天时间内完成100万核资源的扩容背后的技术,希望对大家有所借鉴。


如果需要交付100万核的计算资源,需要做什么?准备资源,然后按用户需求进行交付。如果在前面加一个定语“快速”呢?可以加班加点完成。但是如果要实现8天内完成100万核的资源交付,换算下来,每天需要交付12.5万核,这就有点苛刻。在云计算的历史上,从未出现过类似的案例。


那么,腾讯会议是如何做到的呢?



解决思路


首先,分析如此短的时间内,交付这些资源需要做哪些事情,会遇到哪些问题。


实际上,借助于当前成熟的虚拟化技术,可以基于已经制作好的镜像系统文件,快速地部署一套用于提供服务的生产环境,所以,只需要准备好足够的计算资源就能够实现服务的无限扩容,而这个过程大概需要以下四步。

1.准备资源,投放物理机:作为云计算服务提供商,首先资源是第一位的,所以第一步要准备用于提供服务的物理机。这100万核心的资源,相当于约12000台物理机。以防资源不足的问题,需要快速将这些物理机全部上架,同时,保证每台物理机经过验证,并且部署了正确版本的后台组件。

2.资源注册与分配:有了物理机资源,下一步就需要把初始化好的物理机资源投放到现网环境中,确保每一台物理机资源都在CVM后台服务中注册。腾讯云操作系统VStation需要维护数十万级的物理机资源,这无疑对资源调度能力提出了极大的挑战。这一步需要快速将所有计算资源找到对应的物理机承载。

3.资源创建与交付:当后台调度系统选择好承载计算能力的物理机之后,下一步是到物理机上创建虚拟机资源。这一步看似简单但需要做的事情却不少,如生成用户控制数据,与存储、网络系统交互,生成对应的虚拟机配置,启动虚拟机。

4.虚拟机初始化:虚拟机成功创建之后,就已经可以交付使用了。不过可能还需要进行配置,如拉取配置、加入服务集群、启动服务等。


完整历程解密


图1是腾讯云操作系统VStation架构图,腾讯云操作系统VStation,承担资源调度、请求排队的任务,已经对大批量、高并发的创建请求进行了充分优化。具体来说:


  • API 部分接入用户请求,管理用户角色、CVM 机型、用户配额等;


  • 云操作系统VStation,承担资源调度、请求排队,目前虚拟机每分钟吞吐可达到5000台;


  • Host组件上安装用于生产和配置CVM实例的各种辅助组件。


图1:VStation云操作系统


下面从资源准备、注册与分配、创建与交付、虚拟机初始化四大部分详细介绍下其中的具体过程。



1.准备资源,投放物理机


腾讯云基于定制化腾讯TLinux、自研的虚拟化hypervisor系统,可以实现批量自动部署、自动投放,并且在投放到现网之前进行自动验证,保证软硬件不存在隐患。腾讯云Host组件管控系统,方便管理腾讯云hypervisor上的各种代理组件,易于发布,方便运维。



图2:Host初始化过程


  • 安装系统:运维平台从资产管理平台CMDB拉取对应Host相关机型信息,寻找与该机型对应的TLinux操作系统控制BMC配置从pxe启动,从pxe服务器拉取系统镜像安装系统。


  • 系统初始化:安装完系统后需要配置各种系统参数,调优。


  • 部署Host使用的组件:每种不同机型的CVM使用的Host 会使用不同的后台Agent,以及相关配置。通过Host组件管控系统Host使用的插件进行统一管理,下发。


  • 导入集群:已经初始化好的Host,需要导入到VStation 集群才能售卖和生产CVM。


图3:Host组件管控系统


Host组件管控系统用于下发Host组件、灰度版本、控制、支持并发下载、灰度发布,同时上报Host上各个组件的信息、组件健康管理、自动拉起组件、异常告警等。



2.资源注册与分配


作为整个系统的核心,腾讯云操作系统VStation需要管理10万级的物理机资源,近千万级的核数,所以需要实现快速和稳定的调度系统。VStation服务类似Google Borg/Omega 使用的分布式调度架构,对计算资源进行调度。


图4:VStation 调度系统


其中,水平扩展调度器支持横向扩容,每个调度器拥有几乎全部的集群信息,方便掌握全局资源;采取增量同步、定时更新、局部缓存的方式,尽可能多地掌握全局视图,并且维持集群状态信息的准确性。


调度决策方面,将可能过滤掉更多物理机的基础条件放在调度器的靠前位置,过滤掉无法满足基本条件的物理机列表,减少调度过程中物理机集合在不同调度器之间的传递;同时,根据多个维度,如物理机资源使用率、剩余资源等,对满足装箱条件的物理机进行排序,尽可能优先使用优质Host资源,合理调配。此外,避免多个调度器在并发时选中相近的物理机,对经过排序后的物理机进行随机调整,减少大并发时造成的冲突。




3.资源创建与交付


解决资源调度问题后,需要在选中的物理机上创建虚拟机资源,其中有一些耗时的硬性阶段无法解决,VStation对此结合资源创建过程的的特点,做出了令人满意的优化,把单台虚拟机创建时间基本控制在3-5秒。


前面提到,资源创建需要与诸如用户控制数据、网络服务、存储服务、镜像服务、密钥、安全组服务等进行交互,完成用户与所创建的虚拟机资源之间的映射。VStation平台设计之初就考虑到高并发,批量创建的场景,对周边系统的交互实现了并行化通信。同时,为支持高并发,提高服务的吞吐量,每种与其他服务交互的工作进程通过高可用消息队列通信,都是无状态和可扩容的。真正实现了高可用、高并发、自动容灾。图5是VStation 内部系统的核心架构。


图5:VStation 后台架构


VStation 通过高可用的消息队列,控制数据与周边系统交互的工作进程间通信,同时对创建过程中的关键任务按照依赖关系实现并行化,最大限度的压缩创建总耗时。针对高并发请求,为减少对系统自身的影响,系统具备以下特性:


1

控制信息载荷自动压缩


控制消息携带了CVM实例的各种控制信息:计算、存储、网络以及各种元数据信息。随着系统功能增加,控制层面数据也有所增长,控制信息载荷增大。使用压缩算法在投递消息前进行压缩并在接受消息后解压缩,能够大大降低消息占用消息总线,提高消息吞吐率。目前VStation 使用开源LZ4 - Extremely fast compression压缩和解压缩算法,压缩速率可达到780 MB/s,解压缩速率在4970 MB/s,压缩率在2倍左右。


2

负载平衡


分布式系统中会使用多个实例以增加系统请求响应吞吐率,控制模块负载平衡可以保证请求均匀地被各个worker处理。负载平衡需要后台处理请求的worker均匀分配到不同处理实例上,降低等待队伍长度,并发执行任务。同时需要将虚拟机实例尽量均匀地分配在不同Host。

将并发请求尽可能均匀地分在不同物理机,有利于加快办法创建速度。生产虚拟机较为耗时的任务有创建虚拟机磁盘、下载虚拟机镜像、申请网卡、配置网络等。如果多台虚拟机串行地在同一台物理机上创建,必然是系统瓶颈,创建耗时延长。VStation Scheduler 在装箱时,每个Scheduler实例有近乎全局的资源视图,对同一批次的创建任务,可以在虚拟机并发装箱时保证虚拟机尽量不落在同一台物理机。


3

流控系统


当请求数超过系统承载能力时,如果不加控制,会对周边系统造成危害,导致系统过载,内部组件异常(如DB慢查询、不响应、消息队列丢消息),破坏性较大,严重时会造成服务不响应,甚至用户数据不一致。VStation增加排队机制,降级服务,而不是返回系统内部错误,以提升用户体验。流控系统由以下几个方面组成:


  • 关键请求频次控制:在API请求频次上对用户做限制,防止恶意用户频发请求系统,如恶意购买,刷单等。


  • 用户配额限制:限制用户随意申请资源,尤其是按量资源,限制配额。


  • 后台请求排队与流速控制:任何系统都有能承载的处理容量,当VStation正在处理的请求超过一定阈值时,对新加入的请求不做拒绝处理,而是放入等待队列中待正在处理的任务完成后继续执行。


图6:VStation 流控系统


4

任务编排优化


一个完整的创建任务涉及到的各种子任务较多,单纯串行执行虽然逻辑清楚且维护简单,但不利于充分发挥系统能力,高并发创建场景中耗时较长。通过分析虚拟机实例创建过程中的各种依赖关系,将不耦合的任务并行执行,把简单的单项图转换成有向无环图(DAG),进一步提升任务的并行度。

图7:创建流程任务优化


调整后,单台CVM实例创建任务可以控制在5秒以内。



4.虚拟机初始化


提到云主机的初始化,CVM 支持使用云原生的cloud-init服务,支持云计算主机镜像初始化协议,用户通过传入自定义的脚本程序,实现云主机创建后自动执行预定义配置。同时,腾讯云提供实例metadata 服务。用户在自定义脚本程序中可以访问实例metadata服务获取与实例有关的信息,如IP地址、实例名称等,来实现每个实例的特殊化配置。



图8:CVM元数据


CVM 实例相关元数据信息包括镜像、用户数据、vendor数据、元数据几部分组成。其中镜像信息和用户数据信息可以让用户自行配置,vendor数据和实例元数据(如IP信息、地域信息等)可以通过内网访问腾讯云元数据服务获取,从而实现快速自动化配置CVM实例。


总结


8天内完成为腾讯会议扩容100万核的任务,在此一役,腾讯云CVM后台服务有效地支持了高并发请求,通过优化调度算法、优化内部架构、降低创建耗时,完美经受住了此次考验。未来,将更有信心迎接其它更艰巨的挑战。


官方交流群

长按二维码添加小助手加群与大神们一起交流

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存