腾讯10年维护微信系统不崩的故事,是一个从手忙脚乱到心平气和的成长故事,是一个技术系统从无到有的故事,也是一个国民级用户产品的技术秘密。
作者:任晓宁
壹||微信诞生早期,上面的时刻时有发生。2015年,微信红包赞助春晚,除夕当天红包量级从10万级提升到10亿级,负责运维的肖攀,买了个QQ公仔,插上两根香,每当觉得心里不稳妥,就去公仔前拜一拜,祈求千万不要出事。
贰||长期以来,腾讯在互联网公司中都以产品力著称,产品的背后,是技术平台的助力。微信诞生10年,背后的系统也有所不同。
叁||当系统遭遇了远超预估的访问量,就要降级,比如朋友圈视频平时一个视频大概2兆,但高峰时刻可以先砍一刀,把2兆砍成1兆,让更多的人有视频可以看。
肆||2018年之后,微信很少再有关键时刻。这一年,微信红包的用户量基本上接近于微信的用户量,之后的增长基本上已经平稳。
伍||微信成立10年,腾讯技术团队也跟着走了10年,他们经历高压,经历崩溃,经历焦虑,到现在视为寻常,一路走来,他们见证微信用户从0涨到12亿用户,与有荣焉。
微信为什么没崩过?
12亿中国人都在使用微信,却很少有人思考过这个问题。其实,微信也曾徘徊在濒临崩溃的边缘,腾讯基础架构部运营管理支撑中心总监邹方明现在还记得2014年除夕,人们刚学会用微信发拜年视频,流量直接爆掉,系统濒临崩盘,公司上下所有人的压力都集中到他一个人身上,等他做出决定。他说,那是他最痛苦的时刻。
直到现在,在微信使用量最大的时刻,比如除夕,或是元旦、七夕、中秋,或是情人节,腾讯团队也会提前几个月筹备资源。前几年的高峰期,负责腾讯红包系统运维的肖攀甚至会拜一下QQ公仔,就像拜佛一样,求系统不崩。
现在,他们已经积累了一整套保证系统不崩的方法论。
腾讯10年维护微信系统不崩的故事,是一个从手忙脚乱到心平气和的成长故事,是一个技术系统从无到有的故事,也是一个国民级用户产品的技术秘密。腾讯技术团队向经济观察报讲述了这些故事,他们构建的系统,使用的技术,在运行中积累的经验教训,对于其他公司,或可提供些许借鉴。
濒临崩盘的时刻
一刀切关闭系统、还是继续寻找漏洞?是邹方明必须立刻做出的判断。
他是腾讯的老人,2006年进入腾讯,负责技术,一手搭建了QQ和微信的聊天图片、视频系统。但在2014年除夕微信流量爆发而濒临崩盘的时刻,他依旧承受不住这种压力。“系统全方位崩盘,流量也爆了,前端的系统就好像洪水一样的,后端的系统更脆弱,连着倒了三四个系统和平台,不光我们的平台倒了,底层存储的其他部门其他系统也倒了。”
体现在用户侧的感受是,用户在朋友圈把视频发出去了,但身边朋友一个都没看到。
用户投诉源源不断而来,邹方明需要立刻做出判断。他可以花更多时间去查一下到底是什么原因导致,彻底解决问题,或是干脆一刀割下去,先暂时限制视频功能。“哪个方案能够最快恢复服务,我事后在脑海里模拟了无数遍,也想不出哪一个更快。”
邹方明站在机房前,对着那台显示崩盘的电脑,身边的运维看着他,手指放在键盘上等待指令,老板在办公室一言不发,产品团队需要一个回复,公司外数以亿计的用户,所有人都在等待着他的指令。
虽然只有十几分钟,但每一秒都是煎熬。
邹方明最终决定一刀切。至少切断后,再次恢复,能给到用户继续使用的可能性。否则,不知道要排查多久才能真正找出问题。直到现在,他也不能说自己的选择是最正确的,但那是最快解决问题的选择。
微信诞生早期,上面的时刻时有发生。2015年,微信红包赞助春晚,除夕当天红包量级从10万级提升到10亿级,负责运维的肖攀,买了个QQ公仔,插上两根香,每当觉得心里不稳妥,就去公仔前拜一拜,祈求千万不要出事。
微信后期,一套成熟的稳定系统已经形成,依旧有不可预料的事情发生。2020年2月,腾讯会议在一个月时间增长1000倍,腾讯云副总裁、腾讯基础架构部总经理肖志立也遇到了难题,他的难题不是技术原因,而是物力资源跟不上。
当时,因为疫情,运营商的BGP带宽满足不了、外网IP地址满足不了,并且,由于设备供应商无法复工,设备也供应不了。
肖志立给联想打电话,询问能不能给库房供1万台机器,对方说不好意思,员工都回家了,疫情期间没有办法回来。
直到最后,新机器也没有送到。最终,还是只能死磕技术,通过软件的优化,把之前一个单元支持100路的技术,提升到支持200路,才解决了物理资源不足的难题。
一个从无到有的系统
12亿用户感知到的,是每天都在使用的微信这个产品。他们感知不到的地方,微信背后仅技术平台就包括图片平台、音视频传输平台、红包系统、小视频平台等等,这些平台接入腾讯内部超过90%的业务。
平台组合在一起,形成庞大的系统,基本能解决已知与未知的问题。这些平台的形成,不是一蹴而就的,而是经历了漫长的过程。
图片系统历史最悠久,早在2006年的QQ时代就开始使用。当年,QQ用户突破1000万,上线了QQ空间相册,产品很受欢迎,但对于技术团队来说,一个首先面对的问题就是:撑不住了。存储方案也好,流量方案也好,索引方案也好,都支撑不了用户诉求。“整个底层存储都已经疯掉了,”邹方明来到这个部门时,恰好经历了这样的时代。一些公司在近几年赞助春晚或遇到突发事件时,突然发现的问题,腾讯在十几年前也遇到过。现在微信、QQ系统的稳定,是当年吃亏后积累的经验教训。
用户对图片的诉求,延伸出了腾讯第一代存储系统,衍生了TFS,之后有了相册系统,不过,当时,他们还没有想到做技术平台。
不久,新矛盾爆发。QQ农场火爆后,每个用户都有很多头像,但原有的相册系统支撑不了图像高IO(输入输出)。这种情况下,邹方明把相册系统做了简单的分支,就叫头像系统。
头像系统和相册系统,都是图片,应该分开还是融合?内部当时有些焦灼,经过很长的PK,他们觉得,还是应该融合到一起。融合之后,腾讯有了第一个技术平台,图片平台。
相对于之前各自分离的系统,平台的优势在于成本。腾讯其他团队也在做图片服务,他们发现,花了这么多年研发精力,还不如接入到图片平台中,把研发团队的生产力解放出来。
腾讯的其他平台随后逐渐诞生。
2016年,视频平台诞生。2019年,音视频传输平台形成。期间还有红包系统、文件系统、网盘系统,用户最核心的几个场景平台,都由基础架构部搭建完成。
长期以来,腾讯在互联网公司中都以产品力著称,产品的背后,是技术平台的助力。
去年火爆的视频号就是一个典型案例,一年时间,视频号推出了一系列功能,产品人员提出功能需求后,技术人员第二天或者是第三天就能拿出方案,这离不开平台的服务和支撑。“产品有想法时,研发人员能够很快速做出一个模型,尽快做迭代和尝试。”邹方明解释,“能够在60分的基础上去做加法,产品技术团队可以把视角放在用户喜欢玩的玩法上面,放在终端体验的细节上面去,从而从整个研发的长周期中挣脱出来。”
微信诞生10年,背后的系统也有所不同。2016年之前,系统处于性能不足阶段,当时出现问题,无论是漏洞或是代码问题,事件爆发的根本原因是,系统能力不足导致的故障。
2016年之后,系统升级,此后再有热点,或是再有突然事件,对于技术来说,就只是量级提高了,都在系统可以支撑的范围内。
在云时代,系统的支撑能力又有了增加。QQ于2020年完全上云,整体都在云端。微信花了3年时间上云,今年会全部上云。上云的好处是,如果有突发情况要从其他的业务腾挪资源,速度快很多。“否则我们就得先把设备从A业务上下来,再添加到B业务去,再做测试验证,这样时间就长很多。”
微信10年,系统的基础建设主要朝着两个主要的目标在做。“一个是系统的健康性,比如你的熔断能力,自我恢复能力,每年我们都在找方法。另一个方向就是系统单位成本的承载能力。从字面上去解释,因为我们的资源团队、产品团队,都会给出一个固定的成本,这固定的10000台设备,能够支撑100万次请求,还是500万次请求,是每年都在持续优化和迭代的过程。我们会发现,只要你的承载能力强了,就可以把每个危急时刻变成不危急。”邹方明说。
产品不崩的方法论
不过,即使有了系统,也不能完全保证不崩。尤其对于一款12亿人使用的社交产品,任何时刻都有不可控性。
直到现在,腾讯技术团队也不敢打包票说系统完全可控。“推演也是算不过来的,总会算错的。比如说零点全国发红包的人到底有多少?公司发红包的量到底有多少?这个东西说实话不是那么好估了,这个时候我们就会想,有没有保底的大招,来使得这个访问量控制在系统可接受的范围之内,这是非常重要的保底措施。”肖志立说。
崩盘之前,技术部门会提前预演,策划好“剧本”,“剧本”是一种柔性控制,也可以统称为降级。微信用户有时在高峰期会觉得微信消息有延迟,或是朋友圈视频分辨率降低,就是一种降级。
当系统遭遇了远超预估的访问量,就要降级,比如朋友圈视频平时一个视频大概2兆,但高峰时刻可以先砍一刀,把2兆砍成1兆,让更多的人有视频可以看。
在不可预判的业务场景,他们基本上都会以这种方法去应对。“高突发的时候,用户不会用得那么爽,但能让90%用户觉得满意,不至于说突然量超过预期了,然后就立刻不行了”。
肖志立告诉记者,腾讯一直有一个海量之道的技术方法。在突发比较高时,始终有一个漏斗模型,“第一层先去顶住绝大部分的请求,把符合要求的再往下层漏,再往下层交易最重的系统。这样能保证承担的请求是真正需要的请求,而不是把前面所有的请求都打到后面去。”
这个技术方法论被视为腾讯的保底大招,多年来屡试不爽。
如今只道是寻常
2021年春节,腾讯基础架构部在一片祥和中度过。除夕5点半,肖志立把当时留守的几十个兄弟拉到办公室对面的一个餐厅聚餐,吃到6点半,回来守着机器一起度过了除夕夜。
全程没有任何惊险时刻,无惊无喜。
肖志立依旧全程盯着。他每年春节前后都在,春节是最考验微信的时刻,在他们技术内部看来,平时吹什么牛,都不如扛过春晚的流量来的实在。“每次我也在想,我也不去敲代码,也不去做指令,为什么我要在?我能够感觉到就是崩盘了之后,大家都指着我去做‘要人命’的决定,出了故障我才有价值,没出故障我就像一个闲人。”邹方明已经记不清自己守过了多少个春晚,只是觉得很感慨。
在基础架构师的职业生涯里,非常重要的一点,就是在关键时刻做出关键决策。
2018年之后,微信很少再有关键时刻。这一年,微信红包的用户量基本上接近于微信的用户量,之后的增长基本上已经平稳。
肖攀最近两年也没有再拜过QQ公仔了,“都比较有信心。”
现在的系统,已经不再需要大的变动。并且多年春节经验后,团队值班的手段和策略都是已经完备和成熟的,还可以提前预判事件。比如今年,他们预测云年夜饭会提前导致一个小高峰,果然,当晚7点的流量是往年5倍,因为已经提前预测,今年也平稳度过。
对于现在的腾讯技术团队,不再有惊心动魄的故事发生。
架构师的经验教训
微信成立10年,腾讯技术团队也跟着走了10年,他们经历高压,经历崩溃,经历焦虑,到现在视为寻常,一路走来,他们见证微信用户从0涨到12亿用户,与有荣焉。“做技术支撑的团队,一定要有一个好的心态,就是你不在聚光灯下,但是我们心里面知道今天在台上的产品那么成功,跟我们是有很大关系的,自己的内心要足够强大,要相信这一点。”
他们也摸索出了足够多和业务部门沟通的方法。邹方明经常给团队灌输的理念是,除非你有确凿的依据能证明你是对的,不然你就先听业务部门的。
目前,微信背后的技术系统已经接近完善,“没有特别明显的缺陷和短板。”肖志立对此很自信。
不过,技术团队依旧存在焦虑感。其实,腾讯这支技术团队一直很稳定,腾讯内部架构几经大动,技术部门始终没变。他们经历了文字互联网时代、图片互联网时代,到了视频互联网时代,再到现在的实时音视频互联网时代,技术一直在演进,内容越来越丰富,实时性越来越强。这对于背后系统承载能力的要求,对于稳定性、延时的要求,也要比原来高很多,技术永无止境,他们也永远等待攻克下一个难关。
邹方明还在持续学习中。他经常参加线下活动,在一些论坛或峰会上,奔到现场面对面和业界大牛交流取经,“我们不能够关着门做,你必须要到外面找一些可学习的点,业界的大牛很多,他们会有很多比较好的创意和方法论。”“你永远不知道什么时候冒出一个新的东西。”肖志立很感慨,“作为支撑团队,我们得有这种魄力和能力,能够在弹药不够的情况下支持业务团队打胜仗。”