HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

从 DAU 5 万到用户数破亿,揭秘腾讯会议增长背后的技术实践

  • 2021-01-12
  • 本文字数:4292 字

    阅读完需:约 14 分钟

从 DAU 5 万到用户数破亿,揭秘腾讯会议增长背后的技术实践

10.5 个人开发的一款产品 ,在正式上线两个月后,其日活用户就超过 1000 万。不到一年,它的注册用户就突破 1 亿。并且,其国际版在全球超 100 个国家和地区上线。过去一年,它支撑了 3 亿场会议。这是腾讯会议正式发布一年来取得的成绩。


而一年前,腾讯会议才刚刚亮相,显得平淡无奇。


2019 年 12 月 25 日,腾讯云发布一款云视频会议产品,即腾讯会议,它致力于提升跨企业、跨区域沟通和协作效率,帮助企业节省人力、时间等成本。用户可以直接通过手机、电脑、小程序等入口打开即用,一键入会。


产品发布后不久,疫情的到来促使企业和个人对远程会议的需求增长,腾讯会议步入高速发展阶段,驶入一条快车道。扛过疫情后,腾讯会议又不断推出新功能,持续进行架构优化,提升服务质量。


回顾过去这一年,腾讯云副总裁、腾讯会议负责人吴祖榕把腾讯会议最大的特点概括为“生于云、长于云”。某种意义上,“生于云、长于云”不仅让腾讯会议有了一个坚实的技术底座,而且经受住疫情的考验,甚至为其整个发展奠定了基础。

一个 DAU 5 万的小目标


腾讯会议最早可追溯至 2018 年 7 月,此时,这个项目正式启动,前途未知。


“那时,我们要把最小的功能单元做出来,最大的压力是团队规模小,整个腾讯会议的开发团队只有 7.5 个人。”吴祖榕在接受采访时说。


2019 年 5 月,腾讯会议发布了 0.94 内测版本,总共使用了 10.5 个人,其中前端 8 个人、后端 1.5 个人、产品 1 个人。当时,腾讯云投入 1.5 个后台开发人员,花了两个月时间搭建起整个腾讯会议的后台体系,核心技术则来自腾讯云原生的一系列技术组件。据悉,在基础设施层,腾讯会议使用了腾讯云的云服务器(CVM)和容器服务(TKE);在存储层,用了腾讯云的数据持久化(TDSQL);在逻辑层,使用了状态数据缓存(REDIS)、日志服务(CLS);在接入层,用上了腾讯云的接入域名(DNSPOD)和负载均衡(CLB in TKE)。


吴祖榕表示,这极大降低了后端的开销,让后台开发人员只需关注业务逻辑,保障整个业务的推出。“所有的技术组件都是由(腾讯云)云原生提供的,使得我们开发资源就像搭积木一样。”他说。


并且,正是因为腾讯会议在早期充分使用了一系列的云原生组件,也为其后续扩容提供了极大便利。


2019 年 12 月 25 日,腾讯会议正式对外发布,团队当时定了一个小目标:希望在 2020 年底,腾讯会议的 DAU(日活跃用户)可以达到 5 万。如果在 2020 年底实现 5 万 DAU 的目标,“我们觉得这就是我们今年最好的成绩”。

上线两个月,DAU 破 1000 万


世事难料,在腾讯会议发布近 1 个月后,武汉封城,疫情形势日益严峻。在武汉封城第二天,腾讯会议发布公告,面向用户免费开放 100 人不限时会议功能。此后,继续扩容,免费开放增加至 300 人。与此同时,大量用户开始陆续涌入平台,而腾讯会议在短时间内迎来海量用户的快速增长。


2 月初,腾讯会议迎来巨大考验。它的系统最初是为 5 万 DAU 目标设计的,但是,在不到两个月的时间,腾讯会议的 DAU 突然翻了几百倍。


腾讯会议后端技术总监王彬在接受 InfoQ 记者采访时说:“前期,我们系统投入的人力并不多,包括从产品到研发。此时,突然有上百倍的增长,这对我们的系统有很大的压力。”随着用户量的不断飙升,系统能否撑住变得至关重要。“2 月份,团队停掉所有新的开发任务,唯一的要求是稳定“。


吴祖榕称,稳定是最重要的。


2 月 3 日,即春节后开工第一天,随着海量用户的涌入,各大办公软件陆续“崩了”,腾讯会议也没扛住。稳定是第一要务已经不言而喻。如何保证稳定,关键是扩容。2 月 10 日正式复工,这意味着腾讯会议只有 8 天的扩容时间。“复工复学第一天,我们就开始了夜以继日的扩容”。


以前,腾讯谈海量服务是“先扛住,再优化,周期往往是一个月或两个月。吴祖榕表示,”到了疫情期间,这个周期缩短到 24 小时:白天,我们做大量的扩容,保障带宽资源、服务器资源等;夜里,我们针对产品性能等问题做大量的开发、部署;凌晨,我们再对当天的所有变更、代码优化做压力测试”。


白天扩容,晚上优化,这 8 天是所有人压力最大的时候。


8 天后,扩容 10 万台云主机,累计有超百万核的计算资源投入。


不过,对王彬他们而言,事情远未结束。“我们的设备跟进了,但我的管理能力是跟不上的”。他打了一个比方,一个饭店以前一天接待 100 人,突然有一天,要接待 10000 人。


设备虽然得到扩容,但并不是事情就完成了,业务层面还有大量的细节需要优化和解决。扩容前,业务层只是一个几十台设备的集群系统,系统的管理和调度系统都比较简单。扩容后,突然变成一个多地域,设备数达 10 万级的集群,原有的调度和管理系统完全无法支撑这么大的规模,需要快速优化和局部重构。


因此,这就需要他们做很多事,比如入口路径规划等等。具体说来,集群化管理上,完成 4 个普通 Set 和 2 个 BGP Set 的建设,这样可根据业务发展情况,灵活调度和扩容。在接入和加速优化层面,利用腾讯云在全球的 IDC 机房、数据节点和加速节点,腾讯会议完成了全球部署和接入,确保全球用户的使用体验。


除调度系统的优化外,还要梳理所有模块的调用关系,明确系统的核心路径,尽量简化核心路径,减少和取消核心路径的外部依赖。


对于存储层,王彬介绍,由于访问量突增,同时需要确保低延迟的接口响应,将核心模块的存储从 MySQL 迁移到腾讯云 redis,确保在高并发下系统的稳定性。为了发现系统瓶颈,他们也建立了一套分布式的压测系统,每天凌晨进行压力测试,从压测中发现系统的瓶颈点,再快速的优化和改进。通过每日压测,系统的同时在线服务能力逐渐从 100 多万上升到 500 万、800 万在线。


在人力方面,他们同样“压力山大”,因为整个人力非常短缺。据王彬介绍,在腾讯会议 1.0 版本发布时,它的后台开发只有几个人。在疫情期间,虽然扩容了 10 万台云主机,但是系统要调整,架构要优化,这也意味着需要有更多的开发人员。


人手不够怎么办?他们一方面紧急招募新人和一些志愿者;另一方面,向腾讯云求助,腾讯云兄弟部门则派了四五个团队过来协助。


事实证明,腾讯会议的成功扩容和后续优化,不仅让它扛住了复工后汹涌而来的巨大流量,而且经受住疫情的巨大考验。


吴祖榕说:“你要能在 8 天扩容 100 万核,你不长在云上,做不了这件事情。如果是传统的做法,完全没办法在这么短时间里调集这么多服务器资源、带宽资源、技术资源等。这就是‘生于云、长于云’背后最核心的东西。”

245 天,注册用户破 1 亿


在疫情得到控制后,腾讯会议的第一要务从稳定变成了功能和服务质量。与此同时,它也从爆发期迈入稳定期。


这时,腾讯会议在技术上主要是持续打造自己的核心能力。首先,在音视频的核心体验上,“多方通信是一个带约束条件的技术问题”,端到端通信需要在 400 毫秒内完成。如果时间小于 200 毫秒,效果会更好。


吴祖榕表示,“这个过程中,每增加一个新技术,就会带来延迟,因为要运算、要处理,处理完之后再交给下一个环节。这一块越长,链条越复杂”。


虽然约束条件是 400 毫秒,但是团队在内部定的目标是在 200 毫秒内完成端到端通信。在这个过程中,他们做了许多事情。比如,语音方面,团队专门采集很多噪声,甚至还花费很多力气去采集雨点打到玻璃窗上的声音。


“有一天,我们正在开会,而外边下起了大雨。因此,会议另一边的人听着非常嘈杂,他们问发生了什么事情。这时,我们意识到雨点噪声(对会议的影响)”。


除了雨点声,团队还采集了公交车开门的声音、餐桌上吃盒饭的声音、关门声、水杯放在桌子上的声音、咳嗽声、微信消息提示声和敲键盘的声音等等。据了解,他们累计采集了上几百种的声音。团队把采集下来的声音作为噪声,将经典信号处理与深度学习结合,通过 AI 训练来实现降噪,目的是在开会期间安静地把声音传输给对方,提升整体的沟通效率。


另一个深入音视频核心场景的技术实践与椅子有关。当时,腾讯会议新出了一个功能,叫虚拟背景。因为疫情期间,人们在家开会时会打开摄像头,但背后的画面有时并不适合出现在摄像头里,因此就有了这个功能。


但是,这个虚拟背景最大的问题是椅子的头枕,它会在后面凸出来,给人的体验很不好。为解决这个问题,团队采集了近 6 万张带有头枕椅子的数据,给它们做标注,从而实现更好的虚拟背景效果。


“整个阶段,我们围绕‘听得清、看得清、听得真、看得真’做了大量的努力。”吴祖榕说。除了音视频层面,持续打造核心能力的第二点是后端技术。据腾讯会议后端技术总监王彬介绍,第一,他们做了系统服务化拆分,把“会管会控”拆分成主控、媒体网关、安全、权限、数据网关、消息、应用。“拆了以后,需求不用每次改个‘大胖子’,消息的改消息,安全的改安全,这对整个服务的质量提升是有帮助的”。


并且,这样做还可以降低维护成本和提升系统的运营质量,拆分出核心模块和非核心模块,则大大提升了核心模块的稳定性和容灾能力。


第二,在接入方面,他们建立分级的数据中心,完善后台管理体系和调度系统,调度用户就近接入和数据流闭环。以前,他们接入的机房均位于北京、上海、深圳等地,但这些机房的成本很高。那怎么办?于是,他们将全国数据中心划分为三级:第一级为 DC,在北京、上海等地;第二级是 EC,位于成都、重庆、武汉等地;第三级是 OC,比如兰州等地。“像成都等这些地方不比一线城市,它的成本会低一点。我成都的会就在成都开,接入成都的 IDC 机房”。


第三,在部署和运营上,他们从预发布、灰度 Set 到普通 Set 再到 VIP Set 形成一套完整的流程和体系。新版本正式上线前会有预发布,通过自动化拨测检测系统的质量和可用性。然后,进入灰度 Set 阶段,基于后台管理体系评估灰度版本的质量,减少系统发布异常的影响范围。经过灰度 Set 验证的版本,在普通 Set 开始部署和放量。最后是 VIP Set,在普通 Set 验证系统和功能的稳定性后,逐步部署到 VIP Set 中。


此外,他们还进行了流量优化、提升通信质量,等等。


现在,王彬他们正在做私有化系统建设。基于腾讯云 TCS 平台,由 TCS 提供云基础设施、中间件、数据库等产品服务整合,涵盖应用自动化测试、部署、升级、运维等,打造将业务快速私有化和交付的能力。同时,在功能上,支持超大型在线会议和更多的数据类型等。“现在,我们的企业版支持 2000 人开会,后面会支持更多的人,比如支持 10000 人、20000 人开会。”他说。


在腾讯会议正式发布 245 天后,其注册用户正式突破 1 亿。

写在最后:


虽然腾讯会议已经一岁,但是它未来的路还有很长。正如吴祖榕在采访中所说:“至少在明年一年的时间里,我们在会议上要补充的东西依然有很多,我们的路还很长很长。过去一年,你会发现腾讯会议的界面几乎没有变过,但是我们在每个版本上都迭代了非常多的细节,优化了产品。”

2021-01-12 08:003452
用户头像
万佳 前InfoQ编辑

发布了 677 篇内容, 共 355.9 次阅读, 收获喜欢 1800 次。

关注

评论 4 条评论

发布
用户头像
这不就是腾讯云的软文么
2021-01-13 10:35
回复
该评论已删除
2021-01-13 10:37
回复
“欲加之罪,何患无辞”
2021-01-13 10:49
回复
用户头像
这样的项目,技术人梦寐以求的,羡慕下
2021-01-13 09:45
回复
需要机遇和舞台
2021-01-13 10:05
回复
没有更多了
发现更多内容

广西移动圆满完成区运会通信保障任务

Geek_2d6073

Ansible最佳实践之AWK VS Anssible Tower 界面介绍

山河已无恙

12月月更

裸辞不慌!入职蚂蚁金服P6,掌握并发编程我是这样吊打面试官的

钟奕礼

Java java面试 java编程 程序员‘

Ansible最佳实践之 AWX 启用facts缓存和模板问卷调查

山河已无恙

12月月更

react源码中的协调与调度

flyzz177

React

拿到8000元的火焰杯比赛奖金,感谢霍格沃兹测试开发学社

测吧(北京)科技有限公司

软件测试比赛

【python小脚本】监听日志文件异常数据发送告警短信

山河已无恙

12月月更

MySQL从入门到实战讲解,京东T5大牛学习笔记分享,看完我哭了!

钟奕礼

Java 程序员 java面试 java编程

Ansible最佳实践之 AWX 使用 Ansible 与 API 通信tags

山河已无恙

12月月更

Ansible最佳实践之 AWX 作业创建和启动

山河已无恙

12月月更

Redis之String类型和Hash类型的介绍和案例应用

C++后台开发

redis 数据结构 hash 后端开发 C++开发

SAP MM 为UB类型的STO执行VL10B,报错-没有项目类别表存在(表T184L NL 0002 V)-之对策

SAP虾客

SAP MM UB类型STO VL10B T184L

互联网医疗领域月度观察——数字乡村建设加快,“互联网+医疗健康”带动乡村高质量发展

易观分析

数字化 互联网医疗

Java jar 如何防止被反编译?代码写的太烂,害怕被人发现

小小怪下士

Java 程序员 反编译

Serverless Devs 重大更新,基于 Serverless 架构的 CI/CD 框架:Serverless-cd

Serverless Devs

Serverless Serverless Devs

Ansible最佳实践之 AWX 构建高级作业工作流的创建和调度

山河已无恙

12月月更

Ansible之 AWX 管理清单和凭据的一些笔记

山河已无恙

12月月更

关于 Git 重写历史的一些笔记

山河已无恙

12月月更

Ansible之Ansible Tower使用User和Team管理访问权限的笔记

山河已无恙

12月月更

Ansible最佳实践之Playbook高级循环任务如何操作

山河已无恙

12月月更

创业者说丨云起无垠沈凯文:构建新一代开发安全基础设施 让Fuzzing技术为企业赋能

云起无垠

安全开发 开发安全 Fuzzing技术防护

多引擎可视化数据流实现方案

元年技术洞察

数据中台 数字化转型 专利解析 方舟企业数字化 PaaS 平台 #方舟平台

镕铭微电子加入龙蜥社区,推动开源 OS 在音视频产业的应用

OpenAnolis小助手

操作系统 芯片 数据存储 龙蜥社区 镕铭微电子

Ansible最佳实践之 AWX 创建管理项目的一些笔记

山河已无恙

12月月更

react源码分析:babel如何解析jsx

flyzz177

React

react源码中的生命周期和事件系统

flyzz177

React

OpenMLDB Meetup No.7 回顾 | OpenMLDB+AutoX:整合自动特征工程,拥抱高效机器学习

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

降价背后,函数计算规格自主选配功能揭秘

Serverless Devs

Serverless 前端 函数计算FC

预告|2022 星策 Summit MLOps 分论坛议程公布!

星策开源社区

人工智能 机器学习 开源 AI MLOps

教你用JavaScript实现乘法游戏

小院里的霍大侠

JavaScript 前端开发 编程实战 实战案例 初学者

教育部公布2022年第一批产学合作协同育人项目,千锋教育57个项目成功立项

千锋IT教育

从 DAU 5 万到用户数破亿,揭秘腾讯会议增长背后的技术实践_文化 & 方法_万佳_InfoQ精选文章