前段时间,Oracle 正式发布了 JDK 15,同时作为惯例公布了 OpenJDK 全球贡献者榜单,表达了对这些企业与个人开发者的感谢。其中,Oracle 依旧是 JDK 开发的主力军,完成了 79.68% 的工作量。
但令很多人意想不到是,腾讯成为了全球企业贡献第五名,是国内为 OpenJDK 贡献最多的公司,并且是历史首个进入“Notable”贡献者范围的国内厂商,得到了 Oracle 的点名感谢。
谈到国内大厂的开源,社区中仍然存在不少的偏见。大厂的开源工作究竟是不是为了 KPI?除了商业价值外,大厂的开源工作是否真正为开源社区带来了有意义的贡献?
为了探究腾讯内部真实的开源情况,以及这些年来腾讯对开源社区的实质性贡献,我们邀请到了腾讯云副总裁、腾讯数据平台部总经理蒋杰,腾讯云大数据团队高级技术专家、OpenJDK committer 杨晓峰,腾讯技术委员会对外开源管理办公室总监许勇,一起深入探讨了腾讯内部开源文化的变迁史,获悉了以腾讯云大数据团队为代表的腾讯技术人,一些鲜为人知的开源故事。
OpenJDK 的突出贡献者
杨晓峰告诉我们,腾讯云大数据团队自 2019 年以来就一直在积极参与 OpenJDK 开源生态的贡献。
去年 11 月,腾讯开源内部使用的 JDK,并命名为 Tencent Kona JDK ,其定位是一款免费、开箱即用、经过腾讯规模生产验证的 JDK 发行版,为大家提供在数据科学和云原生领域的最佳产品体验。
据介绍,Kona JDK 基于 OpenJDK 主分支定制,针对大数据和云计算等场景需求,引入了 JDK 11 的特性,能够帮助用户无感知的使用共享核心类信息来提高启动速度,在云场景下 JVM 的启动速度最高能够提升到 40% 左右。为了增强线上诊断的能力,腾讯 Kona JDK 还引入了 JFR 等功能,可以帮助 java 用户获得从系统到应用的 profiling 信息,增强运行时诊断以及热点分析,指导优化,并陆续在后续版本更新中开源了 GC 等模块的多个自研特性。
Kona JDK 主要由来自腾讯云大数据团队的 OpenJDK 社区资深参与者负责研发和维护,该团队一直以来都在积极回馈 OpenJDK 社区。在今年 3 月 JDK 14 发布时,腾讯就进入了 OpenJDK 全球突出贡献者名单。
公开数据显示,短短不到一年,腾讯云大数据团队已向 OpenJDK 社区贡献了 50+ commits ,很多 commits 与腾讯自身在海量大数据生产负载技术方面的经验相关,其中针对 Vector API 向量计算、Loom 协程、ZGC 等方面的改进,是业界少有的生产级别前沿实践,为 OpenJDK 社区做出了十分有价值的贡献。
亮眼的开源答卷
长久以来,由于在社交、游戏等领域的业务特色过于鲜明,导致很多人忽略了腾讯的技术价值,尤其是在开源领域的贡献。以腾讯云大数据团队为例,除了积极参与 OpenJDK 社区以外,腾讯近年来在开源领域的贡献着实不少。
从 2014 年开始,腾讯即开始将内部的第一代大数据平台核心即腾讯版的 Hive 进行了开源。2017 年,腾讯又把基于 AI 技术的第三代大数据平台的核心 Angel 开源,并将该项目捐赠给了 Linux 基金会旗下专注人工智能的 LF AI 基金会,支持推动该项目顺利成为基金会毕业项目。
去年 11 月,腾讯除了 Kona JDK 外同期宣布开源的项目还有另外三个,分别是分布式消息中间件 TubeMQ、分布式 HTAP 数据库 TBase 以及企业级 K8s 发行版 TKEStack 。
其中,TubeMQ 项目是腾讯云大数据从 7 年前起开始研发的一款分布式消息中间件,支撑了腾讯QQ、微信等应用的海量数据业务,目前每天支撑的数据量超过 30 万亿条。TubeMQ 可支持数据的高性能存储与传输,吞吐率高,延迟可低至 5ms。目前,TubeMQ 已经捐赠给 Apache 基金会,被 ASF 正式接受为孵化级项目。
TBase 则是腾讯基于 PostgreSQL 开发的分布式 HTAP 数据库。该数据库具备高性能可扩展的分布式事务能力,支持 RC 和 RR 两种隔离级别,通过安全、管理、审计三权分立体系,提供全方位的数据安全保证机制。性能方面支持高性能分区表,可使得数据检索效率成倍提升。在兼容 SQL 2003 标准、PostgreSQL 语法和常用 Oracle 函数&数据类型、窗口函数等基础上,额外提供大小商户数据分离、冷热数据分离等高效的数据治理能力。
TKEStack 是腾讯将内部的容器编排平台基础上改进推出的 K8s 发行版。该平台面向离线业务、在线业务混部的业务场景,能够稳定地管理万级别的 Kubernetes 集群,并且提供全方位的资源管控,解决网络带宽控制、磁盘 IO 等难题。同时 TKEStack 还拥有腾讯创新的 GPU 虚拟化技术包括对 GPU 调度的改进。
除了将技术对外开源之外,腾讯云大数据团队还以贡献代码的方式投入到开源社区建设中。今年 9 月,Apache Hadoop 社区发布新一代分布式存储系统 Ozone 1.0.0,该项目解决了 Hadoop 分布式文件系统在可扩展性上的缺陷,能够满足千亿级小文件的存储需求。随着 1.0.0 的发布,腾讯也参与和见证了 Ozone 从 Apache Hadoop 社区孵化,到经 ASF 董事会的批准,直至正式成为一个Apache 顶级开源项目的过程。腾讯云大数据 Ozone 项目技术负责人,被社区推选为 Apache Ozone 首位项目主席(Chair),同时项目团队诞生了多位 PMC 成员和 committer,带领社区一起把 Ozone 打造成下一代大数据存储系统。
值得一提的是,在大数据开源领域的突出表现并非个例,根据腾讯开源主页的统计信息显示,目前由腾讯主导的开源项目仓库共有 112 个,代码贡献者 1801 人,项目 fork 总数超过 67 万,star 总数超过 33 万。腾讯公司也已经成为 Apache 基金会、 Linux 基金会以及 Openstack 基金会的白金赞助商,同时还是国内首个开源基金会 —— 开放原子开源基金会的联合发起企业之一。
拥抱开源的技术路线
腾讯云大数据的开源生态发展到今天,并不是一蹴而就的事情。
在 2009 年之前,腾讯与很多其他传统互联网公司一样,内部业务主要使用传统的关系型数据库。2009 年开始,随着互联网流量的爆发,传统的单机数据库所提供的服务在系统可扩展性、性价比方面已不再适用腾讯业务爆发式的增长。面对这种变化,腾讯云大数据转向基于开源的分布式 Hadoop 体系,构建了腾讯的第一代大数据平台。
2011 年末,坚信开源就是未来的大数据技术专家,现任腾讯云副总裁、腾讯数据平台部总经理蒋杰来到腾讯,据蒋杰回忆,他刚刚来到腾讯时,腾讯云数据中心的 Hadoop 集群刚刚起步,规模只有 200 台。
由于开源社区具备支持力强,会不断引进创新,始终处于技术发展的前沿,在生态以及人才方面具有不可比拟的优势,所以腾讯云大数据团队坚定选择了拥抱开源的路线。
蒋杰和腾讯云大数据团队基于开源软件,不断建设各种组件,从 Hadoop 基础存储 HDFS 开始,到改造 NameNode,改造 MR 的整个调度。之后又进入移动互联网时代,团队又从 Hadoop 转向 Spark 和 Storm 体系,建立消息中间件,构建企业级的实时数据分析体系。
2015 年左右开始,随着人工智能、数据挖掘、数据应用等前沿技术的深入,腾讯云大数据再次迭代。蒋杰带领技术团队与北京大学崔斌老师团队合作,于 2016 年推出了自研机器学习平台 Angel,并在 2017 年将其开源。Angel 项目专攻复杂计算场景,可进行大规模的数据训练,支撑内容推荐、广告推荐等 AI 应用场景。该项目不仅支撑了腾讯自身业务需求,在行业上也具有里程碑意义。
在这些崇尚开源的技术人的努力下,腾讯云多年来以开源软件为基础,对内部大数据相关的底层技术栈不断进行大规模地改造,顺利顶住了不同时期数据流量爆发式增长带来的挑战。
没有 KPI,兴趣就是最大的驱动力
几乎与腾讯云大数据确立基于开源的技术路线同一个时期,腾讯内部的开源文化也正在悄然兴起。
负责腾讯对外开源办公室的管理工作,以及腾讯内部研发工具和技术社区建设的许勇告诉我们,在开源成为公司层面的战略之前,腾讯内部的开源文化最早是从内部的代码复用开始,由基层的开发者们自发组织起来的。
2013 年,腾讯内部以提高开发效率为目的,开始倡导用公共组件的形式来共享和复用代码,涌现出了非常多的内部优质组件。为鼓励更多人参与进来,腾讯特别设置了代码文化奖,每两个月组织一次内部开源项目评选活动。评选完全由程序员们自己说了算,一票一票真实选举产生。获奖的员工和团队通过直播的形式被更多开发人员了解,让开源成为腾讯内部热议的话题。
许勇回忆,有时在直播过程中会发现一些平时不善言辞的程序员,当他们提到自己的开源项目时却滔滔不绝,眼中闪烁着光芒,“没有 KPI,兴趣就是最大的驱动力。” 腾讯代码文化奖作为腾讯代码文化的经典项目也一直延续到了现在。
把代码贡献出去,把口碑做出来
据许勇回忆,在公司层面,尝试过很多有意思的“小手段”用于激励开源,他还给我们讲了一个腾讯程序员热衷于抢开源红包的故事。
大家知道每逢节日发微信红包抢微信红包已成为一种深入人心的习惯,在腾讯内部,还有一种“企业微信开源定制红包”,是用于提醒和鼓励开源项目的开发者和贡献者,用这种极具广东地方特色的方式(广东抢利是)来激励开源项目团队、提升项目社区活跃度。
“比如新开源项目一个月积累到 500 个 star,我们就给负责人发放一个开源新秀红包,恭喜他达到了一个小小里程碑;每个月社区活跃度 TOP 10 的项目我们会发开源活跃红包;荣登 GitHub 日榜周榜或者有其他突出表现会发开源突出红包等等。来自不同业务线的开发者和贡献者们开心抢着红包,在线上一起分享项目达成一个又一个小小里程碑,是一件非常有腾讯特色、有意义的事情。”
在腾讯云大数据团队基于开源软件一路进行技术变革的过程中,团队成员们也意识到,开源不是一味地从中索取,只有积极回馈开源社区,才能促使整个开源生态良性发展。
腾讯大数据团队开始时是把一些改进后的优质代码回馈开源社区。再后来,腾讯内部的开源氛围也逐步成熟,腾讯大数据团队就索性直接将改进后的分支项目整个对外开源,主导建立开源社区。比如 Angel 平台在立项之初就已经决定要做成开源的项目。
蒋杰坦言,由于 Angel 团队成员都是技术出身,初心非常单纯,只想着把自己的代码贡献出去,让大家一起来把东西做好。
在将 Angel 项目开源以后,包括华为、新浪、OPPO、VIVO、拼多多在内的国内大厂都慢慢开始在内部采用该系统,项目社区也不断地得到来自这些大厂开发人员的贡献,这个过程给腾讯云大数据团队带来了很多信心与成就感。
谈到做开源给公司带来的利益,蒋杰认为,仅从对技术人才的吸引方面,做开源就是有很大价值的。“如果开源的东西多了,对于一个开发者来说,比如他在大学时都听到过 Angel,并且他的老师或者他身边的人都在用这个东西,甚至他也亲自去用过,这对他的影响可能是非常大的。同时,对于比较成熟的技术人才来说,如果他对新技术有追求,那么看到我们这样有前瞻性的项目,可能他也会想加入。另外,我们也会吸引到开源社区中跟我们有一样兴趣爱好的人,他们也会愿意来加入我们。”
蒋杰透露,腾讯云大数据团队依靠开源口碑,在 Spark、Flink、Hadoop 社区都吸纳了一些优秀的贡献者,到目前为止有接近 10 个 PMC,20 个 Committer 加入了他们的团队。
耿直的开源态度
2018 年 9 月,腾讯内部进行了名为 930 变革的组织架构调整,成立了开源协同项目组和对外开源管理办公室,正式将开源提升到公司战略层面。
在当时,包括 OSC 社区在内的很多网友对此并不看好,纷纷留言建议腾讯“先在 Linux 上支持 QQ 和微信再说”。有趣的是,腾讯在不久之后就悄悄发布了 Linux QQ 2.0 Beta。尽管距离 Linux QQ 上一次更新已经过去了十年,让很多社区的朋友直呼“活久见”,但还是有不少人认可了腾讯对待开源的耿直态度。
这一时期,腾讯的开源不再局限于自发参与的开源爱好者。2019 年 1 月,腾讯技术委员会成立,腾讯内部的开源协同工作进一步覆盖到所有的技术部门,从而减少代码的重复开发,提升项目推进效率。
技术交流的氛围也更加活跃了。
在公司内部,腾讯整体开发推进工具平台由 SVN 向更适合开源协同属性的工蜂 Git 迁移。同时上线码客社区,每个月有超过 98% 的技术人员访问码客社区进行技术讨论。数据显示,腾讯码客社区已经产生 1.9 万个技术问题,平均收获 6.6 个回答,所有技术问题在提出后 24 小时内 100% 得到回答。开源协同的工作也在码客社区中生根发芽,开源协同Oteam在码客通过圈子运营自己的开发者社区,与协同开发者以及用户共同讨论项目进展。开头提到的 OpenJDK 的代码贡献正是源自 Oteam 协作的成果。