腾讯的开源革命

摘要: 腾讯强力开源。

图片来源@视觉中国

腾讯高级执行副总裁、技术工程事业群总裁卢山,曾多次在内部场合讲过一个让他触动的故事:

“一个新人来到腾讯后,他们team想要一个东西,在乐问(腾讯内网知乎)上找了一圈找不到。事情再极端点,如果他的团队是新组建的,内网能提供的都是各个事业群与生产系统紧密耦合的东西,很难拿出来就用,那么这个新团队就像一个孤岛。”

卢山之所以对这件事印象深刻,是因为他开始思考,走了20年的腾讯,各个事业群能力很强,技术团队也很强,但为什么外界甚至腾讯内部都感受不到这些能力的存在?

“这是非常现实的情况。”卢山说道。

在腾讯,技术服务于产品是常态,但这也导致腾讯内部的许多业务都各自形成了一个技术闭环。以应用在视频上的服务器端编码器技术H.265为例,此前腾讯有四个团队超过20个人围绕各自业务诉求在同时做,做得水平都很高,但彼此没有融合。以前,在腾讯可以找到很多类似这样的例子。

研发环境烟囱林立、技术孤岛等问题极有可能成为掣肘腾讯未来发展的痛点。

930变革后,腾讯成立了技术委员会,由卢山和腾讯高级执行副总裁、云与智慧产业事业群总裁汤道生两位腾讯总办领导牵头,在全公司推进开源协同和自研上云,所有行动的目的都是想要消除留在腾讯体内的技术孤岛。

下决心破除技术壁垒,优化研发环境,这是腾讯开源革命的缘起。打造腾讯自己的技术图谱和开发武器库,同时为2万多名技术人员搭建一个无缝协同的工作机制,或许是解决这种现状的“银弹”。

“开放代码是第一步,也是需要迈出的关键一步。开源可以理解为是一种文化,我们要从过去的代码封闭,转变成未来的代码开放。”卢山掏出了解除腾讯掣肘的第一把钥匙。

势在必行的“开源协同”

腾讯给出的开源协同最官方的说法稍显抽象:

“代码开源、技术协同、减少重复投入、提升研发效率、降低运营成本。核心是代码开源和技术协同。”

在采访中,了解到,开源协同实际上是腾讯将各个事业群最底层和共性的技术能力进行了一次梳理和拉通。打破壁垒,加强内部的开放和合作,这是腾讯开源协同的初衷。

“近一两年,内外部突然出现了一些对腾讯的技术实力的质疑声音,我们在反思。”腾讯技术委员会PMO成员、腾讯开源协同负责人郑亚峰回忆,“之前公司内部的确实有一些技术壁垒,部门与部门之间的隔阂太多了。同样的技术,多个团队在做。”

“其实在腾讯这么大体量的公司背后,一定有不同的技术支撑体系。”腾讯副总裁王巨宏在采访中提到。

以QQ为例,QQ 是腾讯最早的核心业务,它的架构演变可以说是腾讯技术发展和成长的典型代表的一个缩影,从中提炼出来的智慧和经验,浓缩成腾讯的“海量服务之道”。

腾讯内部有一个流传很广的说法,腾讯联合创始人、前 CTO 张志东,早期为 QQ 设计了后端架构,这个架构沿用了很长时间,支撑着 QQ 业务从无到有,直到后来上亿用户同时在线的体量。

这个说法或许也有夸大成分,但这套基于“有损服务”、“动态运营”、“大系统小做”、“过载保护”、“柔性可用”、“先抗住,再优化”等价值观和方法论的不断优化的架构体系,的确支撑了腾讯实现用户量从0到亿级的跨越。

除此之外,能够证明腾讯技术实力和对技术极致追求的案例还有很多:如QZone时期的支持LRU的share memory cache,和基于裸设备的file system;以及Wechat在移动互联网时代的分布式IDC容灾、容错设计,等等。

但内外部关于腾讯技术的争议也触动了腾讯的深刻反思,郑亚峰坦言:“此前腾讯基本上每个事业群在存储、计算、分析等方面都有自己的一套‘轮子’。”

这就造成,在腾讯内部,相同的技术领域,不同部门可能会重复进行基础平台的建设,由此也产生了资源、人力等成本的浪费。“将各个部门优势的基础平台开源出来成为公司级基础平台,其他部门直接在上面协同开发,实现统一的协同管理,我们想在内部营造开放的技术氛围和开放的代码文化,以提升公司的研发效能和运营效率。”郑亚峰表示。

于是,在开源协同理念提出之后,腾讯从各个事业群梳理出了一些相对基础性的技术版块率先进行了开源协同的实践。其中腾讯CI和大数据“天穹”就是两个较为典型的例子。

腾讯CI Oteam是腾讯内部的一个跨团队虚拟组织,由IEG(互动娱乐事业群)的蓝鲸CI(蓝盾项目)团队牵头,组织相关团队和个人共同进行腾讯CI的开发建设及运营,旨在减少重复劳动、提升研发效能。目前,蓝鲸团队已有多年内外部的开源经验,腾讯CI开源协同项目目前已经服务于腾讯10000+开发人员。

据腾讯CI的开源协同负责人、腾讯蓝鲸产品中心总监党受辉介绍,CI分为下层的自动化流水线模块和上层的度量改进模块,下层属于基础设施,不及上层贴近业务价值高,但做不好下层就无法构建上层。而且下层的自动化容易统一,但上层的度量改进与各个BG业务类型、管理模式相关,不容易统一。

因此腾讯CI首先成立了Oteam达成的共识:下层流水线共建,上层度量相互交流学习。这样一来,各事业群只需要保留少部分人力共建下层流水线,可以将更多的资源投入高价值的上层建设。”

“平台开源一步到位,协同则根据应用情况进行局部协同或全员协同。”党受辉传授腾讯CI团队的开源协同之道,“在腾讯CI的oteam协作中,大家没有把开源协同当做KPI,而是让其自生长。”

截止目前,腾讯CI的Oteam中,共有来自全腾讯的217名开发人员提交了自己开发的插件,用于对接各个事业群在CI流程中会用到的内部系统;提交组件287个,提交代码10066次。

相比于腾讯CI对腾讯各部门的持续集成交付系统的统一,腾讯天穹项目则是将腾讯六大事业群的大数据相关的系统做了统一。

“开源协同有很多好处,在大数据系统没有统一之前,BG可能有自己的数据平台,系统是割裂的,数据不统一;重复造轮子,开发资源造成浪费。同时,由于没有开源,大数据系统对很多公司用户来说就像黑箱,而开源协同之后,大家一起参与大数据的共建,系统的问题就会实现透明化。”腾讯大数据负责人,同时也是腾讯大数据开源协同项目“天穹”的负责人刘煜宏表示。

在刘煜宏看来,开源协同除了实现了问题的透明化和责任共担,也是腾讯工程师提升自己影响力的一个有效出口。

他认为,对技术人员来说,开源就是影响力,“现在很多开发的同学都主动要求把自己的项目对外开源,我们内部项目使用跟外部开源社区一模一样的运作模式。公司从上往下倡导开源协同,对技术人员来说,对外的通道一下就被打开了,每个人都想自己的代码能被成千上万的人使用,也更容易打造个人技术影响力。”

一个部门某个项目被开源出来,也需要被其他部门立即知晓,保证不再重复建设,对此腾讯也建立了一套开源协同的管理运营方法。

据腾讯开源协同项目执行总监徐海丽介绍,开源协同项目成立之后,建设了一系列公司的内部触达渠道,有开源协同官方网站、官方邮件号、公司内部企业推送渠道等,同时也通过内部技术交流社区“码客”、腾讯技术地图全貌“技术图谱”、围绕技术激烈探讨的“吐槽大会”等各种方式,做好信息传递和协调沟通的工作。

卢山对技术图谱的未来寄予重望:“五年以后项目经理、技术经理、研发经理,可以很容易在腾讯的技术地图上选择哪个东西可以用。”

目前,在腾讯,像腾讯CI和大数据天穹这样的开源协同项目已经有50多个,k8s、CI、软件源、大数据、配置中心等基础底层技术的公司级顶层设计正在逐步形成。码客社区在上线近10个月的时间内,产生了近3000个技术问题,触发回复及评论达15万次,每个月有超过80%的技术人员访问码客社区进行技术讨论。

内外共生的三步走战略

腾讯开源三步走

腾讯开源三步走

开源协同的提出也进一步完善了腾讯开源战略的链条。

今年6月,在由CNCF主办的云原生技术大会上,腾讯开源联盟主席、腾讯开源管理办公室委员、Apache Member堵俊平首次公开了腾讯整体的开源战略路线图。

路线图显示,腾讯开源有一个三步走的计划,我们前面提到的开源协同其实是腾讯开源战略的第一步,这一步的目的最终是要通过部门小团队作战或跨部门大团队作战的方式协同推进技术研发,以优化资源配置的方式集中优势寻求技术突破。随后,腾讯建立起筛选机制将代码向内部开放出来。

第二步则是外部代码开放,这一步,腾讯将优化设计与代码结构,不断拓展落地场景,有效利用外部贡献者资源实现资源整合,构建技术影响力。

第三步是社区开放治理,在这一阶段,腾讯将注重大规模技术推广与应用、开发者生态体系构建、社区领袖与领导力培养、全社会研发资源的优化配置等等。

“这三步虽然顺序有先后,但其实是在同步推进,这更像是开发中的‘迭代’概念。目前我们的资源更多是投入在第一步的,但在第二、三步上也已经有一些成绩和产出。”堵俊平表示。

至今,腾讯已在Github上发布了84个开源项目,包含微信、腾讯云、腾讯游戏、腾讯AI、腾讯安全等相关领域,这些都是经过了腾讯众多明星业务海量检验的项目。由腾讯发起的开源项目累计在 Github 获得了超过24万Star数,在GitHub全球企业Star总数中排名前十,在国内和国际都受到广泛关注和认可。

王巨宏也在采访中提到,三步走战略的前两步,内部开源协同和外部代码开源其实是相互促进的关系。

“我们对外开源时,规范、治理、管理办法、工具等,都是全套跑通的。之前内部的开源协同刚推进时,我们原本以为可能不需要这些,直接做可能更高效。”

但一段时间之后,腾讯发现不跟外部开源采取同一套标准,其实有很大的问题。于是腾讯开源团队又快速的把外部规范,比如安全检查流程、代码规范要求,引入到了内部开源的建设过程中。

“如果没有外部开源这些年的积累,可能内部又要在流程规范和管理制度上摸爬滚打很长一段时间。现在我们的经验、规范都已经做好了准备,如果在内部开源时发现问题,可以马上应用。”王巨宏表示。

腾讯开源管理办公室执行总监许勇也认为,为了推动内部开源项目的持续发展和迭代更新,开源协同借鉴了外部开源社区的理念,在公司内聚集了对这个项目感兴趣的团队和个人,使内部开源协同项目能够持续更好的发展下去。

当然,内部开源协同也直接推动了腾讯技术团队外部开源贡献率的提升,工程师的开源热情正在被唤醒和激发。

“这是内部930架构调整后催生的变化,对腾讯开源生态产生了质的飞跃”,王巨宏表示:“内部开源能够推动外部开源产生更多重量级的项目,以前开源的项目,前端的、工具类的比较多,现在大数据、AI深度学习、物联网操作系统等方面的重磅项目也在不断开源。”

截止目前,腾讯参与贡献了Apache、Linux、Openstack、KVM、docker、NVDIMM、ceph、HBase、Hadoop、Spark、kubernetes、torrent、dht、goprocinfo、flannel、netlink 等众多知名开源社区和项目,成为会员和maintainer。同时,腾讯也正在整体推进工具平台由SVN向更适合开源协同属性的工蜂Git迁移,10个月内新增了600个开源项目。

自上而下的开源变革

新举措的推行往往也伴随着一些问题。

在腾讯CI、天穹等项目开启之前,腾讯内部其实已经预见到了一些项目贯彻过程中可能会出现的插曲。

腾讯有2万左右的工程师,各个BG以前都有自己的研发技术,如果现在突然要统一成一个技术,难免会又不一样的声音产生,这时候就需要自上而下的强力保证实施。

2019年1月4日,腾讯技术委员会正式成立,卢山和汤道生两名腾讯总办成员牵头,几大事业群的技术负责人悉数进入技术委员会决策圈。

腾讯技术的指挥部由此诞生,负责统筹公司整体技术战略规划,制定公司级技术规范与流程,指导大型技术项目的落地。

过去的许多年,腾讯面对开源其实采取的都是一种“自下而上”的民间态度,并没有从自上而下的角度整体审视过开源的战略性。2013年前后,3Q大战让腾讯意识到了开放的重要性。这在技术方面的直观改变就是,以张志东为代表的腾讯总办领导,开始向工程师们倡导“开放、复用和合力开发”的代码文化。

“当时为什么是自下而上,因为总办虽然提了,但还没到强制执行的地步,大家参与开源其实是完全自愿。”许勇回忆。

过去几年,这种自下而上的自愿开源也让腾讯取得了不少成果。但慢慢腾讯发现,在对外开源越做越大之后,自下而上的推进模式遇到了瓶颈。

“自下而上开源的项目更多是前端体量比较小的项目,很难撬动体量、影响力比较大的项目进行开源协同。”这个时候就需要一个自上而下的强力的推动。

那么,腾讯为什么必须要撬动大的开源项目呢?

这背后其实与腾讯公司的整个战略有关。腾讯副总裁王巨宏向介绍,腾讯目前正在积极拥抱产业互联网,整个开发者生态对腾讯产业互联网战略来说非常重要。

在腾讯的To B战略中,以CSIG为代表的腾讯To B出口,虽然能够为企业用户提供各种基于云的服务,但腾讯不可能、也绝不会去遍历所有的服务,云在落地的过程中需要的跟合作伙伴走共同建设的道路。

因此只有做开源,才能吸引更多开发者加入腾讯生态,为最终端的产业互联网用户、企业提供服务,腾讯产业互联网的战略才能落实到位。

“开源从上到下都是跟公司战略紧密配合的。原来自下而上的方法,如果只把一些前端的、工具类的组件开源出来,是对情怀的追求,但对业务没有任何影响。但现在如果不把核心的技术平台开源出来,不仅情怀受影响,可能业务都会受影响。所以腾讯必须做这件事。”王巨宏表示。

“开源代表一种未来技术研发的方式,这种技术研发方式是站在前人基础上往前不断地迭代,而不是反复地造轮子。”腾讯开源运营负责人王春雨提到:“一个好的开源项目将会吸引到众多的参与者,它在输出自己能力的同时,也不断在吸收这个社区的营养,会变得越来越健壮。在开源技术的支持之下,会大大的缩短技术创新的周期。”

腾讯改变了原来“自下而上”纯自发开源的路径,采取“自下而上”与“自上而下”相结合,自发与自觉相结合的开源新模式。在新的模式推动下,腾讯已经将一些非常核心、创新的项目开源了出来,最近刚开源出去的自研轻量级物联网操作系统TencentOS tiny以及万亿级的大数据消息中间件TubeMQ,今年8月与 TensorFlow 功能互补的腾讯全栈机器学习平台 Angel 也发布了 3.0 版本。

但是在这一过程中,决策层也考虑到,腾讯现在已经不是“一声令下”就能让千军万马跨越技术壁垒,从头开始的小团队了。在决策生成之后原来自下而上的传统也不能丢,因为需要一线员工来定义开源决策实施的新方式。

于是,最终技术委员会还是会选择把内外开源的主动权进交给每一位参与开源的技术工程师。了解到,委员会从成立起,收集一线意见反馈的工作就一直没停下来。2万名技术人员围绕着公司的开发环境、统一框架、研发流程、技术氛围等问题展开讨论,描述自己遇到的问题,提出解决思路。

在腾讯内部技术社区码客、“腾讯内部的知乎”乐问、邮件等各种渠道上,这些话题几乎成为“日更贴”,讨论的热潮此起彼伏。腾讯技术委员会相信,“只有从下至上,才能发现真正的问题,只有从上至下,才能快准狠地解决问题。”

工程师骨子里的开源文化

自上而下的改革不仅体现在核心项目的开源上,腾讯的研发文化也随之进行了升级。

郑亚峰表示,开源让代码更透明,“talk is cheap,show me the code”这种开放的平台,更容易让工程师之间相互学习、相互交流和高效沟通。郑亚峰也希望,未来在开放的基础上,技术人员能够把腾讯的技术深度和高度进一步提升。

对此许勇也认为,原来靠“产品”得天下的腾讯,比较注重业务的增长,各个团队都在做研发的闭环。但可能到了一定阶段,需要大家共同一起做技术的变革和升级,这样才能更有效地将更多资源,用到创新、代码质量上。

腾讯副总裁姚星也曾经在腾讯内部技术社区码客上对于“新代码文化”做过进一步的阐释:

“开源是手段,协同是结果。当一个组织太大后,把所有的研发集中在一起是非常低效的。而‘去中心化’的问题又会让公司研发各自为战,闭门重复造轮子。如何平衡‘去中心化’和‘重复造轮子’,开源协同是个很重要的方法。开源的目的是减少‘重复造轮子’,权限开放、代码相互可见。协同的目标是‘去中心化’,能使用开源组件,能复用必复用;开源组件去BG部门属性,共同拥有腾讯属性;开发人员是开源组件的共同的参与者和创作者,不是甲方和乙方,从而保持快速的响应。”

今年年初,腾讯技术委员会的成立,让腾讯再次明确了“开源协同、自研上云”的公司技术战略。“开源,协同,云上生长”成为了腾讯新代码文化的关键词。

“我们希望从骨子里做这件事,工程师写的每一行代码,除了支撑腾讯自己的业务,也会开放出去,创造更多价值。对内也是,全员都要做开源协同,开源将是一种文化的沉淀。”王巨宏总结道。

回到故事刚开头的H.265,现在在腾讯,它是代号V265的开源协同小组。基于同一套基线代码,分业务分场景,四个团队协同合作开发,奔着打造业界最好的视频编码器的目标,正在为腾讯自研业务和云上业务的视频压缩做强有力的支撑。

上一篇:结盟120天,千方与阿里云协同终落地 | 2019云栖大
下一篇:阿里巴巴数字经济体拓展业务边界,从“云”到

网友回应

欢迎扫描关注我们的微信公众平台!

欢迎扫描关注我们的微信公众平台!