2019年下半年,一支“精英小队”在腾讯大数据团队内部开始集结。成员除了各处抽调的精兵强将,还有两名来到腾讯不久的资深工程师——杨晓峰和傅杰,集结他们,只为了一个艰苦而又重要的任务——自研 JDK 。
有成员这样评价这个任务——“脏活、累活”,还有委婉点的说法——“非主流的技术方向”,至少在当时,这个任务并不是会让大家争抢的那种。
但总有孤勇者,愿意去直面困难的挑战。
三年之后,这支小分队不仅研发出了国产化的Kona JDK,还培养出了OpenJDK社区为数不多的中国Committer和Reviewer,在上游社区有了更深度的参与和贡献。
同时,腾讯的Kona JDK也已经通过开放原子开源基金会TOC(技术监督委员会)的评估,即将进入捐赠流程,汇入中国基础软件的蓬勃生态中。
腾讯为什么要做 JDK ?又是怎么做的?现在做的怎么样?带着这些问题,让我们回溯到三年前,一切的起点。
// “没有一个外部版本能满足腾讯的业务需求”
2019年正好是腾讯大数据团队成立的十周年,当时的腾讯大数据平台经历了三个阶段的演进,无论是业务量还是算力规模,都已经是业内最大之一,技术水平也在国内领先。
不过,当他们抬头仰望星空时,却还是会发现笼罩在头顶的一片乌云,那是信息技术底层研发的“深水区”——JDK(Java Development Kit),外购和开源社区的产品已经不太能满足腾讯当时的业务需求了。
“安全性也好,性能也好,包括时延等很多的指标,离我们的目标差的挺远。”
Java 诞生于1991年,并在1995 年公开发布,2006 年,Sun 宣布将Java开源,OpenJDK 开源项目逐步成为成为业界众多JDK发行版的基础。
JDK 是和操作系统、数据库一样的基础软件—— Java 写成的程序必须依赖JDK才能够编译、运行, JDK 的执行效率会影响到海量 Java 应用的性能、安全、扩展性, 可以说其是整个Java 生态的基础也不为过,每个 Java 程序员都会用到。
作为开源项目, OpenJDK 是 Java SE 标准的参考实现,但通常认为, OpenJDK 就是基于 OpenJDK 项目做出的 JDK 发行版。“它就像我们日常吃饭用的餐具,程序员需要通过它,让 Java 程序运行在 Java 虚拟机上。”杨晓峰解释道。
随着当时腾讯大数据业务量的快速上涨,一个尴尬的事情发生了——中餐馆做大做强了,可桌上端来了面条,餐具却还是配的刀叉,这用起来多不方便?谁能给整副筷子吗?
“大数据也好,AI的场景也好,还有比如说游戏、视频,很多定制化的需求,开源社区的版本是做不到的,所以我们才开始组建这个团队。”腾讯云副总裁,腾讯数据平台部副总经理刘煜宏说道。
腾讯有着丰富且多样化的应用场景和海量的应用实践,这既意味着强烈的需求,也意味着,可以帮助团队打磨出国际上具备竞争力的产品。更重要的是,腾讯愿意在基础软件的深度研发上进行持续、耐心的投入,这才是底层软件研发真正必需的条件。
Kona JDK 项目就此成立。当时不少团队成员来自传统软件公司,对于基础软件研发在互联网环境的效果,大家开始还是有些忐忑。
“这是一个尚无前人踏足的无人区,腾讯的业务体量和复杂的业务模式都让我们捏了一把汗。”杨晓峰说。
但当 Kona JDK 第一个大版本在大数据现网拿到性能提升效果的数据时,整个团队都“沸腾”了起来。“远远超过我们最开始的估计,整体提速大概12%,节省了10%左右的资源,这个兴奋是非常难以抑制住。”杨晓峰笑着说,在腾讯天穹大数据智能计算平台上试运行后,发现效果和稳定性如此之好,团队经过商议之后随即决定上线5万台服务器——这个决定在之后的三年,每年预计为腾讯省下了数千万的成本。
对腾讯来说,Kona JDK 解决了许多社区版无法满足的难题。在性能方面,可以做到比社区版本提高15%以上(在大数据计算场景,15%以上的性能提升;在AI场景,30%以上的性能提升),甚至在部分特定业务场景中实现性能翻倍,同时更加快速地支持了自研服务器大数据等广泛业务的生产落地,大幅提升了内存、CPU的利用率,超大堆GC能力的提升则有力支持了关键场景产品扩展能力翻倍。
“而且对这样一个广泛使用的基础软件,我们对它的安全、兼容性和各种能力,有了充分的掌控。”杨晓峰补充道。
// 腾讯也要自研JDK吗?
中国工程师离不开 JDK,但在这个领域,中国却是长期“失声”的。
在基础软件,尤其是编程语言的编译器和虚拟机领域,中国很多企业长期受益于开源社区,但自身的积累比较有限。甚至当腾讯提出自研 JDK 时,连内部都有不少质疑的声音。“早期招聘时,那些应届生很惊讶的反问我们,腾讯也要做JDK吗?在他们心里,腾讯一直是做上层应用的,大家都在质疑我们能不能做好。”杨晓峰回忆道。
但对他来说,这却是一个技术上的理想。早在上大学时,杨晓峰就开始接触 JDK ,2011年工作入职 Oracle 时,作为Java Platform团队一员,他深度参与了对 OpenJDK前沿版本的研发工作,之后他先后加入京东、腾讯,一直从事相关的工作。“对质疑,用言语回应是苍白无力的,不用在意外界怎么看,我们用实际成果去回应就行了。”杨晓峰说。
而自研并不是 Kona JDK 的终点。“我们是2019年11月正式对外开源的,一个主要的考虑是, JDK 这样的基础软件不是一个敝帚自珍的秘密武器,对外开源,希望能够使我们的研发成果服务更多的人。”
很多中国公司和腾讯一样,对 JDK 有特定的需求,但却没有相应的技术能力,也很难在开源社区中找到相应的解决方案,而腾讯的 Kona JDK 这样“中国特色”的版本就显得格外有价值。比如国内某家银行在国产ARM架构服务器上使用某国际原厂的 JDK 时,一直有一个垃圾收集的问题无法解决,对金融客户的现网运维带来很大挑战,后来他们抱着试试看的态度换成了 Tencent Kona JDK ,第一时间就解决了问题,而且再也没有出现。
团队成立大半年后,在 JDK 领域,就成为开源贡献第一的中国企业,并且也成为国内首次被社区官方公开点名致谢的突出贡献者。傅杰接触 JDK 同样有十余年,在攻读博士研究生时,他被选去做 JDK 相关的研发工作。2018年底,他正式开始接触OpenJDK国际开源社区。
OpenJDK社区将开发者从初级到高级划分为Contributor、Committer和Reviewer三种角色。Contributor 提交代码,只有Reviewer 具备代码评审资格, Committer 和Reviewer才有权限把代码合并到 OpenJDK 仓库里去。OpenJDK 社区对代码贡献的要求非常严苛,尤其关注贡献本身的质量和价值。得益于腾讯在大数据、机器学习和云计算等领域的前沿实践,社区对团队的贡献接受度非常高。
在之后的一年多时间里,基于腾讯内部的业务需求,傅杰持续向社区贡献了大量代码,成为国内首个自己培养的 OpenJDK编译器方向的Reviewer, 腾讯多次蝉联国内厂商贡献度第一,全球排名前五,成为国内首支被开源社区官宣为全球 Notable 贡献者的企业。
而比起荣誉,更有价值的是他们一定程度上影响了 OpenJDK 社区的走向。有一件事情令傅杰记忆深刻,首次发布 Kona JDK17版本时,在中文操作系统环境构建却失败了。经过分析,发现原因是编译构建的机器使用中文作为默认语言,而国外一般在英文环境中构建。如果将操作系统默认的语言由中文改为英文,则构建成功。
“当时面临两个选择,一是直接改机器的语言,改成英文,然后就把这个版本发布了,很快,也不费劲;另一个选择是分析这个问题,把它彻底解决。”傅杰说。
团队毫不犹豫地选择了第二种方案,并很快找到了相应的解决方案,随即决定向 OpenJDK 社区提交适配中文环境的提案。
“社区外国专家看到我们的提案后,第一反应就是建议每次发布版本的时候把操作系统的语言配置改成英文。”
“在中国的服务器上,为什么要强制把这个语言改成英文呢?”我们当时就向国外的同行提出不同的建议,希望把这个问题彻底修复,而不是更改机器的语言。经过努力争取,最终说服了国外的专家接受我们的提案。从此,OpenJDK 可以使用机器默认的中文语言环境进行构建了。
谈到这里,傅杰的眼中不经意间闪现出一丝自豪。原来这个问题并非只有他们遇到过,只是只有他们尝试解决并成功了,“提案被接收之后,友商的同行也向我们表示祝贺,从此以后大家都不用改语言了。”
不积跬步,无以至千里,就是这些“较真儿”,逐步让团队在 JDK 生态有更深的影响力,也意味着,中国企业在JDK这样的基础软件领域开始发出自己的声音。
// 基础软件35岁方才入门
程序员常有“35岁危机”的说法,但在 JDK 领域,中国的开发者们却还是刚刚起步。
在2011年时,国内还只有个别厂商,在 OpenJDK社区有一定的代码贡献,现在不仅腾讯成为全球贡献最多的厂商之一,越来越多的国内厂商也参与其中,在别的基础软件领域也有了更多的发声。这既有国内技术水平和实践积累不断提升的原因,也是开源和国产化的趋势所推动的。
当被问到,为什么要做国产化的 JDK 时,腾讯数据平台部数据中心总监、腾讯大数据平台产研负责人陈鹏给出了两个原因。
“从宏观上讲, JDK 属于底层的关键基础软件,我国的信息化产业其实是非常迫切地需要这方面的能力,来构建基础软件生态的安全可控能力;微观上,对企业来讲,国产化JDK能够更加适应国内企业业务的场景需求,有效解决业务面临的现实挑战。”
Kona JDK 从最初 OpenJDK 的一个分支发展而来,针对腾讯的业务环境深入做自研,已经体现了商业价值,提高了自主可控能力。不过陈鹏认为,这还只能算是“一小步”,在基础软件方面,中国企业还是有更长的路要走。“我们在很多关键的路径,比如说安全或者虚拟机引擎,这些重要的模块方向上,还尚未真正引领国际方向。我们还是要通过坚持不懈地自研、对外开源,分享更多的成果让更多的人受益,逐步实现引领甚至打造关键基础软件源头社区。”
JDK 支持了非常庞大的 Java 生态,这意味着, JDK 也将在未来很长一段时间内持续迭代和发展。除了 JDK ,腾讯大数据团队也打算将其朝更大的范围发展,打造成自主可控,在硬件和应用软件之间,更安全、更高效的一个软件架构。
“35岁对于一个像JDK 这样的基础软件开发者而言,通常他是刚入门的,不太可能35岁被淘汰”,傅杰打趣说:“但缺点也是有的,入门的门槛很高,依赖长期积累,要耐得住寂寞,能够经受得住诱惑,心中要有一份热爱才能够长期地坚持下去。”
热爱又来自哪里呢?
“如果你希望,自己的代码能够影响到上千万的开发者、全球几十亿人的几百亿台设备,那你就该马上加入到基础软件的研发中去。”杨晓峰补充道。