上周周四(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%。从腾讯的变化我们能看到,做研发搞技术,不止能省钱,也真的能挣到钱,而且比单纯挣钱更有趣和让人有敬意。
也希望这样有趣的好故事,能在更多中国公司内上演。
免责声明:本网站内容主要来自原创、合作伙伴供稿和第三方自媒体作者投稿,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证有关资料的准确性及可靠性,读者在使用前请进一步核实,并对任何自主决定的行为负责。本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。任何单位或个人认为本网站中的网页或链接内容可能涉嫌侵犯其知识产权或存在不实内容时,应及时向本网站提出书面权利通知或不实情况说明,并提供身份证明、权属证明及详细侵权或不实情况证明。本网站在收到上述法律文件后,将会依法尽快联系相关文章源头核实,沟通删除相关内容或断开相关链接。