腾讯底层技术进化史
导读:上周周四(6月16日),腾讯对外宣布,内部的自研业务实现了全面上云。
文|DoNews
作者|李信马
上周周四(6月16日),腾讯对外宣布,内部的自研业务实现了全面上云。
初次听到这个消息,还是有些震撼,上云虽然是当下的主旋律,但像腾讯这样体量的大公司,能够做到全面上云,并不是一件容易的事情。根据腾讯对外公开的信息,其自研业务上云的规模突破了5000万核;另一方面,腾讯统计,上云为腾讯累计节省的成本超过30亿人民币。
这不禁让笔者想起了在《腾讯传》看到的一段往事,1999年,缺钱的腾讯急需投资甚至卖身,却找不到合适的投资人或买家,当时接触过腾讯的企业都表示“不理解腾讯技术和无形资产的价值”,出价最高的不过60万人民币,而估值的方法,基本是按照电脑乃至桌椅板凳的数量来计算,找银行贷款,能抵押的也不过“几台折旧的服务器”。
这算是腾讯的至暗时刻之一,有些黑色幽默的是,几位愿意借钱的朋友,都不肯接受用腾讯的股票来还债,其中一位比较大方的甚至还表示:“不还也可以,但我不要你的股票。”——腾讯当前的市值,超过了3.59万亿港元。
凭借QQ秀的异军突起,腾讯迅速成为中国最赚钱的互联网公司之一,但很长一段时间里,也只是家能赚钱的公司,可以说,那时人们看到了腾讯的商业价值,但并没看到腾讯具备科技上的价值,哪怕腾讯的几位创始人和早期员工中不乏优秀的工程师。
真正的科技公司是什么样子的呢?比如“IOE”:IBM的小型机、Oracle数据库、EMC存储设备,简直可以称之为当时互联网公司的三件套,中国互联网公司赚到的钱,不少流进了他们的口袋。看看国外的科技公司,再看看我们的科技公司,多少会让人有些气馁。
这也是笔者想写这篇文章的原因,十余年过去了,我们看到像腾讯、阿里巴巴、百度这样的互联网大公司,研发实力不断增强,从以前的“造不如买”,到阿里云、腾讯云对外输出,还有在开源领域,从索取到拥抱再到贡献,这是比单纯的商业价值更令人激动的技术价值的体现。
一夜暴富或者富可敌国的故事,这个世界见过了太多,尔曹身与名俱灭,不废江河万古流。而底层科技的进步,才是推动我们的文明,持续前进的动力源。腾讯在这方面做的事情,要比30亿更值得来聊一下。
大数据时代
2008年,《自然》杂志提出了“Big Data”(大数据)的概念,揭开了大数据时代的序幕。当时互联网上非结构化数据迎来井喷式的爆发,据说阿里因用户激增导致“计算力”不足,早上8点到9点半,服务器的处理器使用率会飙升到98%,为了解决“大规模数据计算”的问题,这一年阿里启动了“云梯计划”,最后成长为阿里云这棵参天大树。差不多同一时间,百度也在进行对分布式的研发。
笔者曾采访过曾任腾讯大数据负责人的刘煜宏(现在已经是腾讯云副总裁、腾讯数据平台部副总经理),他在2005年就加入了腾讯,还清楚地记得,当时腾讯使用国外厂商的“盒子”,每次发生宕机事故,只能等对方的技术人员来解决,而且恢复时间漫长。
更大的问题,是越来越无法满足腾讯对大数据处理的需求。“很多数据我们跑不出来,比如QQ用户画像,3个月跑一次都跑不出来。”刘煜宏说。无论是从价格,还是从实际需求来看,对当时的腾讯来说,寻找新的解决方案是必须要做的事情,问题只有一个——怎么做?
2009年1月,腾讯开始搭建第一个Hadoop集群,只有30台服务器,业务最初拿来试水的业务是QQ蓝钻,迁移后对效率的提升显而易见,只需要30分钟,就能完成对月度数据的分析。几个月后,汤道生(现任腾讯高级执行副总裁、云与智慧产业事业群总裁)将《开心农场》(后改名《QQ农场》)引入QQ空间,这后来成为了中国互联网史上最疯狂的增长之一。5月22日,游戏上线的当天,游戏开发公司“五分钟”的服务器就被流量挤爆,不得不将服务器的管理权限让渡给腾讯,而腾讯面对每天高达100万的用户增长,也只能一次次增加服务器,并随时面临爆棚的危险。
据当时主管后台的卢山(现任腾讯高级执行副总裁、技术工程事业群总裁)透露,在2009年的下半年,最后追加给《QQ农场》的服务器超过了4000台。“那是一个不可思议的数字,也许在很长的时间里,都不会被打破。”汤道生这样评价。受益于此,2010年腾讯的半年利润一举超过阿里、百度、新浪和搜狐的总和,但另一方面,刘煜宏等技术人员也意识到,传统的数仓已经难以支持腾讯业务的发展,转向分布式计算势在必行。
不过直到2012年时,腾讯大部分业务还跑在传统数据库上,Hadoop的集群只有几十台规模。对此,笔者曾思考过,也许,可能是那时候的腾讯处于业务快速扩张期,对技术相对忽视了。总之,蒋杰(现任腾讯副总裁、腾讯数据平台部总经理)来到腾讯时,一番摸底考查下来,他对腾讯大数据的判断是:比阿里要落后三年左右。
在这之前,蒋杰在阿里呆了五年,也是阿里最早做大数据的那批人,云梯1队的成员。阿里云的“云梯之争”最终的获胜者是从零开始自研“飞天”云梯2队,但这场胜利却是王坚“钦点”的,2队在得到全集团技术资源的支持后成功突破了“5K”(调度 5000 台服务器)的瓶颈。
一度领先的云梯1队其实曾经率先实现4000台的集群调度,当时云梯2队还卡在1500台左右,但阿里云的工程师判断,Hadoop 在从4000台到5000台的过程中,将遇到难以克服的障碍,原因是受端口数量限制,万兆交换机下面实际最多分出2200台二级交换机,再加一层就是4400台。不过这个判断后来被证明并不准确,因为百度在2013年时,上线了1.3万台的Hadoop单集群,这也是当时世界上公开最大的Hadoop集群。
在蒋杰到来之前,腾讯大数据的实力与BA有着明显差距。2012年底,腾讯大数据的单集群规模突破了4400台,基本实现了从关系型数据库到自建大数据平台的全面迁移,2013年2月,传统数据库在腾讯全部下线。
不过随着互联网流量流向移动端,个性化内容推荐的模式异军突起,腾讯数据量爆发式增长,业务部门对数据处理速度和及时性的要求也更“快”, 有时候上线了某个业务或手游,5分钟后总办的领导就会去问运营数据,Hadoop离线计算刚建成就要落伍了。
真如逆水行舟一般,不进则退。
2014年9月,腾讯大数据在单集群达到8800台后,开始正式转向实时计算的Spark & Storm体系,并结合腾讯的需求对核心组件进行重写。到2015年2月,腾讯对外宣布其Spark集群规模成为全球第一,笔者在采访蒋杰时,他曾提到,这一年对他还有另外的纪念意义,意味着腾讯在大数据领域的技术水平,正式跻身国内第一梯队。
在大数据领域,腾讯还有许多故事可讲,比如之后通过机器学习解决广告业务的个性化推荐问题等,不过从时间上来说,这时候该讲另一件事情了,也是笔者觉得更重要,也更能体现科技价值的“开源”。
开源时代
2011年,“软件正在吞噬世界”的说法被提出,到了2015年,《福布斯》《连线》等媒体进一步认为,开源正在吞噬软件。而到了现在,很多人更直接地表示,开源正在吞噬世界。
很遗憾,中国的科技公司又慢了一拍。
这里说的慢了一拍,不是对开源软件的使用,实际上,中国的科技公司对使用开源软件还是很积极的,但对做开源贡献,往往就敬谢不敏了。上文有关大数据的讨论,提到的分布式计算框架Hadoop,就是由Apache基金会开发的开源项目,也是当时互联网公司替代传统数据库的主流方案。
之后替换Hadoop的分布式内存计算框架Spark,同样是Apache软件基金会旗下的顶级开源项目,在数据处理环节上全面优于MapReduce(MapReduce可以看作是Hadoop的组成之一),而Storm可以简单理解为实时计算版的Hadoop,可以说,腾讯的发展极大受益于开源软件。
而腾讯对待开源的态度,用后来腾讯开源负责人许勇曾经的话来说:“2010年前其实腾讯起码技术上是挺封闭的。”那时腾讯内部“数据孤岛”的现象很严重,由于没有统一的开发框架,每个业务团队又都有自己的开发习惯和开发语言,让开发协作出现了许多问题。不同语言之间的通信适配非常繁重,不同团队会重复实现一样的功能组件,而且代码质量参差不齐——有些团队没有实现业务容灾,有些团队为了快速上线,直接写死IP在代码中,甚至有的后台开发团队没有平台建设人员,操作都需要登录服务器,乃至造成误操作。
身为资深程序员的马化腾对内部的问题也心知肚明,2010年4月22日,在腾讯战略管理大会上,马化腾提出对内“各业务单元需建立新的协作机制,灵活机动打破‘部门墙’”,腾讯也开始试水对内开源。在2010年到2015年之间,对内开源一定程度上让腾讯减少了内耗,但在对外开源上,腾讯还是相当谨慎和敏感,曾经一位腾讯程序员对笔者表示:“如果对外开源,要经过层层审批,假如一个开发把自己写的部分代码开源了,结果忘了里面有一些内网的东西,那就完蛋了。”
一直到2016年,腾讯才开始低调地将开源项目开始在Github上公布,2017年,腾讯开源的项目数增长到近20个,之后开源项目数量快速增长。
但对当时腾讯内部的技术氛围是否足够开放,笔者还是持一定怀疑态度的,因为2018年,还有腾讯的新员工在内网吐槽:“来到腾讯就像来到技术沙漠。”腾讯对开源态度转变的关键节点,应该是在2018年的夏末秋初,在三天三夜的“香港会议”上,卢山(现任腾讯高级执行副总裁、技术工程事业群总裁)提出了“开源协同”,之后在2018年9月30日,腾讯启动战略升级,成立六大事业群,即“930变革”。2019年1月,腾讯正式组建技术委员会,由卢山和汤道生牵头,“开源协同”成为了技术委员会两大重要战略之一,之后腾讯的内外开源进一步走上了快车道。
讲个有意思的事情,上文提到,腾讯希望机器学习解决广告业务的个性化推荐问题,但当时业界的重点基本是放在图像识别、语音识别等领域,开源的机器学习和深度学习平台如TensorFlow、Pytorch等,也并不太适应腾讯的业务需求。
于是在2015年,腾讯联合北京大学共同研发了Angel项目——假如当时有合适的开源软件,可能这个项目并不会诞生——这个项目可以说是为腾讯的业务量身打造的,本质上是一个大规模、分布式的机器学习平台,架构核心是高性能参数服务器,聚焦在稀疏数据和高维模型领域,与腾讯的业务息息相关,比如推荐模型(可用于商品广告推荐)和图网络模型(可用于社交网络分析)。
而这个项目,在2017年正式对外开源,然后被大量的公司和机构使用,其中包括华为、 小米、滴滴等互联网大公司,并在2018年进入LF AI基金会孵化。2019年12月19日,Angel成功从LF AI基金会毕业,这也是中国首个成功毕业的项目,目前在Github获星6500+。可以说,在这个项目上,腾讯贯彻了开源的精神,也值得业界的尊敬。
Github上对Angel的简介 图片来源:Github
在中国,开源曾被长期忽视,但开源社区在的影响正与日俱增,即使是科技巨头也要承认,一个受欢迎的项目,通过开源接受全社区的检验和评价,以及优秀开发者对其的完善,得到的提升长期来看要快于内部的研发,并且有利于在更大范围内形成技术生态。
近年来中国科技企业也纷纷加大了开源的力度,比如华为的鸿蒙、百度的飞桨等,腾讯近两年的开源贡献,在全球企业中位居前十。如果我们领先的科技企业都愿意贡献更多到开源领域,那将是一件值得自豪,也能为世界贡献更多科技价值的事情。
好了,我们先将开源的话题放下,回过头来聊文章开头说的事情。
云原生时代
在香港会议上,卢山提出了“开源协同”的建议,而汤道生则提出了“自研上云”的建议,这两个建议,也是腾讯技术委员会的两大重要战略。自研上云,顾名思义,主要是将腾讯集团内部的海量自研业务,包括社交、游戏、内容等业务搬上云端。
时至今日,云计算的意义已经无需赘言了,业务上云也是理所当然——腾讯自己就有云,没道理不用啊。
不过具体上云要上到什么程度?据腾讯对DoNews披露的信息,当时腾讯内部其实也分成了两派,其中一派认为,腾讯各大事业群(BG)应该使用云上的虚拟机,但架构还是用各业务自己的,简单点理解,就是IaaS层上云。
如果只是这样,那么这篇文章其实没有写的必要了,无非是腾讯云多了一些内部客户。
另一派的看法是,IaaS层要上云,各BG的PaaS也要上云并统一。腾讯以“赛马机制”出名,也借此做出了不少优秀的产品,但相互间的隔离也成了痼疾(不然也不必“开源协同”和“自研上云”了),再进一步,就会有一个很现实的问题:当时腾讯每个BG都有各自PaaS平台,有基于开源的,有基于自研的,并且调度技术都是和各自业务磨合好了的,如果强行统一,业务部门一定会反弹。
这个问题其实在阿里巴巴也出现过,当初阿里在内部推广阿里云,投诉像雪花般纷至沓来绝不夸张,王坚被说成骗子,在台上泣不成声也不止一次。哪怕是后来执掌阿里云的胡晓明,在听说自己的业务要上阿里云(那时他在蚂蚁金服),他也很不情愿(事实证明后来的确出了很多问题)。
实际上,虽然2019年1月技术委员会就成立了,但从2月到4月,腾讯总办还在不停讨论如何上云。在卢山、汤道生等的坚持下,腾讯最后确定,自研上云不仅要使用云上虚拟机,而且要拥抱最新的云原生技术,将资源统一调度。
这个结果用一句话来描述,就是“风物长宜放眼量”。
虽然有争论,但对云原生是大势所趋,大家却是没有异议的。云原生(CloudNative)是一个组合词:Cloud+Native。Cloud表示应用程序位于云中,不是传统的数据中心;Native表示应用程序从设计之初即考虑到云的环境,为云而设计,能够充分发挥云平台的“弹性+分布式”的优势。
这个概念也在不断演化,2015年云原生计算基金会(CNCF)成立,最初把云原生定义为“容器化封装+自动化管理+面向微服务”;2018年,CNCF又将服务网格(Service Mesh)和声明式API给加了进来。总之,在2019年,理念上的统一并不是问题,问题只在于执行。
从目标来看,腾讯的全面上云是想要借助云原生,尤其是容器、微服务、DevOps的能力,构建面向未来的技术架构,打破部门墙和重复造轮子现象,加强基础研发,提高公司的技术资源利用效率。另一方面,这个过程中积累的云产品、技术未来也通过腾讯云对外输出。
实际中,用哪个BG的调度技术,首先就成为摆在腾讯各个技术运营部面前的难题。为此,腾讯内部展开了激烈的PK,也调研了很多云原生技术,最终确定了基于内部开源协同的K8S能力来构建统一的技术底座,在此之上使用腾讯云TKE来构建每个BG自身的业务运维发布平台。腾讯云TKE即腾讯云上的容器服务(Tencent Kubernetes Engine,TKE),基于 Kubernetes 提供以容器为核心的解决方案。当时腾讯云容器产品中心总监邹辉在运营管理大会上,向每个BG汇报方案,最终达成一致:代码上开源协同,资源上在腾讯云统一,运营上各个BG独立。
2019年腾讯启动上云,主要是主机上云,2020年全面启动容器化改造,这个过程中就出现了不少“幺蛾子”。
比如腾讯平台与内容事业群(PCG),提出了不少“不可思议”的要求,像创建集群的接口要支持指定的各种参数,数量多到以至于腾讯云的负责团队怀疑对方“想把我们TKE当成一个空壳,只是把集群买完之后,指定完这个参数,还要自己闭环干这个事情”(来自腾讯提供的采访记录)。事实证明无论内部还是外部客户,都确实有这个需求,这个需求后来演变成了TKE的两个产品能力——TKE独立集群和TKE自定义参数。
还有腾讯互动娱乐事业群(IEG),因为很多业务要迁移到云上,要求TKE支持固定IP。这个需求,说实话挺不“云原生”的,因为严格意义上真正的云原生是不支持固定IP的。于是双方进行了多次“PK”,最后在IEG表示不支持的话,业务就不能上云后,腾讯云的团队只好推出了一个新特性——容器支持固定IP,结果没想到,这个特性之后在外部客户中也大受欢迎,成为腾讯云的一个“独家利器”。
其间也有碰了“一鼻子灰”的事情,曾经有个重要的游戏上线,结果晚上高峰期做活动时,有两个小时非常卡,当时腾讯内部论坛上有不少“腾讯云不行”、“腾讯云垃圾”、“原来挺好的,非要搞上云”之类的吐槽,这个事情闹出来之后,直接捅到总办,一度搞得他们压力很大。事后总结,双方团队发现,是评估计算资源时,应该用高主频服务器,却用了普通服务器,到了高峰期算力就扛不住了。
不过,上云整体的进展还算顺利,在推进节奏上,腾讯云的团队注意“抓大头”,先啃最难啃的骨头,比如QQ是腾讯首个全面上云的内部业务,而且过程中用户零感知。腾讯从QQ开始,上云也以QQ开始,不得不说是个有趣的轮回。
对于IEG的游戏,就先让最热门游戏上云,这样其他观望的腰部业务看到没问题后,基本就会选择跟进。在业务切换的过程中,腾讯云的团队还要负责保驾护航,当时每当《王者荣耀》推出一个活动,他们就会提前去梳理可能的风险和问题。至于像腾讯会议、视频号这样的新业务,更是一开始便是云原生的。
腾讯云副总裁徐勇州在采访中回忆,2019年在腾讯内部的乐问平台上,对为什么上云的讨论还有不少,到2021年,基本就不再质疑了,TKE的核心量一年之内增长了将近4倍。“整体的业务负载,三年前大概是在30%的水平,但是今天,基于云原生带来的调度以及迁移的能力,集群负载提升到45%,在离线业务混部集群的负载更是到了65%这样一个相对比较高的水准,业界做得好的也就是北美有做到50%左右。”徐勇州总结说。
其实腾讯主要业务的全面上云在2021年就基本完成,只有有些业务在等待服务器的逐步替换。根据腾讯的统计,腾讯云TKE拥有目前国内最大规模的Kubernetes集群,相对于自研上云前,云服务器相对物理服务器性能损耗下降到0,CBS的存储性能提升13倍,网络的包转发能力提升7.6倍,TKE的在离线业务混部能力使服务器资源利用率从30%提升至65%。同时,自研业务上云过程中,还有将近100项成果复用到公有云。
这的确也是一个里程碑式的事件。
从2009年到2022年,中国互联网也经历了PC互联网、移动互联网和产业互联网三个不同的阶段,从底层技术到表层的商业模式都在发生着改变。2009年,创业公司“五分钟”因为无力提供《开心农场》所需的算力,不得不以几百万的价格就卖掉了游戏在腾讯平台的使用权,并在2012年末破产。2011年,比微信提前上线一个月前的米聊,在用户增长最快、竞争最激烈的时候,因为服务器和后台架构的缺陷,出现了五次宕机,不得不主动退出了竞争。2018年9月,如日中天的腾讯在股价接连下跌之后,自我革命,走向了“开源协同”和“自研上云”的道路。
我们看到中国互联网商业模式创新的威力,已经大幅让步给科技的进步,以往看不见的冰山,正逐渐浮出海面。文中提到的一些技术也许快成为明日黄花,但开源和云原生,还有更多文中没提到的前沿科技领域,却仍是方兴未艾,而这也将会是未来科技公司的竞争力所在。
额外讲一件事情,自2019年,金融科技及企业服务营收规模正式披露以来,其单季度营收规模已经翻了一番。2021年Q4,腾讯的金融科技与企业服务收入达到479.58亿元,首次超过游戏收入,占总营收比例升至33.26%。从腾讯的变化我们能看到,做研发搞技术,不止能省钱,也真的能挣到钱,而且比单纯挣钱更有趣和让人有敬意。
也希望这样有趣的好故事,能在更多中国公司内上演。
参考资料:
吴晓波《腾讯传》
浅黑科技《阿里云的这群疯子》