阿里开源自用 OpenJDK 版本,Java 社区迎来中国力量

3 月 21 日,阿里巴巴将宣布开源 Alibaba Dragonwell。届时,开发者可通过阿里云开发者中心及 Github 社区下载使用。InfoQ 记者独家专访了阿里云智能基础产品事业部资深技术专家李三红、阿里云智能基础产品事业部研究员 Kingsum Chow (周经森),听他们如何看待 Alibaba Dragonwell 与 Java 归途。

作者 | 赵钰莹
受访嘉宾 | 阿里云智能基础产品事业部资深技术专家 李三红
阿里云智能基础产品事业部研究员 Kingsum Chow (周经森)

阿里巴巴即将重磅开源 OpenJDK 长期支持版本 Alibaba Dragonwell。众所周知,Oracle 对 Java 的态度已经发生系列转变,由于 Java 用户群体庞大,预计此事在很长一段时间内都是开发者的讨论焦点。作为世界上最大的 Java 用户之一,阿里巴巴此时选择开源 OpenJDK 长期支持版本 Alibaba Dragonwell 是出于哪些考量呢?

  • Oracle 撒手,宣布对个人用户 (Personal Users) , Java 8 官方支持时间持续到 2020 年 12 月;对商业用户(Commercial Users),2019 年 1 月之后不再提供免费更新。
  • 红帽喊话,计划在 2023 年之前继续提供对 OpenJDK 8 的支持。
  • AWS 加入,正式推出 OpenJDK 长期支持版本 Amazon Corretto。

如今,阿里巴巴也宣布重磅开源 OpenJDK 长期支持版本 Alibaba Dragonwell。

这不禁让人感叹:Java 生态圈碎片化趋势越来越明显。对开发者而言,既不希望冒风险即刻更换,又希望可以使用具有持续安全更新和完备功能的 JDK。此时,阿里巴巴宣布开源 OpenJDK 长期支持版本,出于哪些考虑?这是否可以打动坚守的 Java 8 群体并解决其燃眉之急?未来,阿里巴巴打算如何处理这一项目与 OpenJDK 的关系?这家 Java 代码量上亿 (billion lines of Java code ) 的公司如何看待 Java 的未来?

Alibaba Dragonwell

Java 生态圈内的不少开发者想必对 AWS 开源的 OpenJDK 长期支持版本 Corretto 项目名字的来历有所耳闻,Corretto 由 Caffe Corttto 演变而来,这是一种意大利饮料,指含有少量白酒的浓缩咖啡。无独有偶,Alibaba Dragonwell 的命名也与饮料颇有渊源。周经森在采访中透露:

“Dragonwell”中文译为龙井,象征着中国的茶文化,又恰好是杭州特色(阿里巴巴总部所在地);“well”一词通常被描述为水源汇聚在一起供大家享用,我们希望可以集合所有开发者的力量不断完善该项目并最终贡献给所有用户。

为何此时开源?

在很大程度上,Java 由 Oracle 长期主导。自 2017 年底,Oracle 就开始陆续转变 Java 策略,逐渐将 Oracle JDK 中的商业功能开源给社区,并宣布不再提供免费商业版本更新,不提供安全更新和漏洞修复支持。

这对开发者而言意味着什么?如果你是 Oracle JDK 8 的用户,原 License 尚可免费使用,但之后若希望得到持续安全更新则需要为此付费。如今,在 Oracle 主导下的 Java 大环境已经发生变化。作为最大的 Java 的用户之一,阿里巴巴几乎拥有世界最大规模的 Java 应用集群,肯定需要为此采取一些行动。

在采访中,李三红表示,Oracle 的系列转变传递出一个重要讯息:

如果希望继续免费使用 Java 并获得持续更新,那之后可能就需要转换到社区版本。

基于此,阿里巴巴决定开源 OpenJDK 长期支持版本 Alibaba Dragonwell,一是因为其自身拥有大量 Java 客户和业务需求,阿里巴巴希望他们可以继续免费享受到 JDK 的所有功能;二是考虑到不少开发者可能会做出新的选择,阿里巴巴决定开源该项目,为开发者提供一个新的参考。

重要特性

Alibaba Dragonwell 是一款免费的 OpenJDK 发行版,其提供长期支持,包括性能增强和安全修复,这部分其实对应于 Oracle 收费部分的功能。李三红透露,Alibaba Dragonwell 目前支持 x86-64/Linux 平台,主要针对的场景是数据中心大规模 Java 应用部署情况下,Java 应用稳定性、效率以及性能的优化与提高。

此次发布的 Alibaba Dragonwell 8 预览版本对应 OpenJDK 8 版本,与 Java SE 标准兼容。值得重点关注的三大特性如下:

  • 移植上游 Java 11 的 Java Flight Recorder (JFR) 功能。众所周知,JFR 功能是 Oracle JDK 的商业收费功能,需要付费才可使用,虽然后期通过 OpenJDK 11 开源,但 Java 8 的用户群体仍然十分庞大,因此阿里巴巴决定将该功能移植到 Alibaba Dragonwell 8 中供开发者使用。Java 开发人员可以通过 JFR 收集 JVM 运行过程中的详细 profiling 信息,配合 Java Mission Control (JMC), 提高 Java 应用的问题诊断及性能优化效率;
  • 集成 JWarmup 技术。Warmup 问题一直是 Java 应用的最大难点之一,虽然阿里内部很早就有应对之法,但外部用户很难触达这一方案。如今,JWarmup 已作为 Java Enhancement Proposal(JEP) 在 OpenJDK 立项,未来有望加入 Java 标准发行版。JWarmup 允许用户在数据中心结合应用流量调度时机,动态提前预编译 Java 代码,从而有效减少由于传统 Just-in-Time 预热 (Warmup) 导致的 CPULoad 过高,Response Time 超时等问题;
  • 提供 GC 问题诊断等 Serviceability 方面的提高。

想必有心的开发者已经发现,目前 Alibaba Dragonwell 仅支持 Linux 平台,这也是大部分数据中心所使用的操作系统。为防止开发者出现误解,此处需要特别说明:这并不影响 Java 的跨平台特性。因为,跨平台指的是 Java 应用本身,JDK(包括 JVM)只是一个软件,不同平台有不同的版本,只要在对应平台安装好对应的 JDK。开发者可以在任意系统上开发 Java 应用,再部署到相应平台运行字节码文件即可。(开源后,阿里巴巴会提供详细的中英文使用文档说明)

后续规划

未来,阿里巴巴希望每个季度进行一次版本迭代,下一阶段也就是 3 个月后预计会发布 GA 版本。除此之外,阿里 JDK 技术团队会对该项目进行持续维护和更新,并将紧密与 OpenJDK 社区合作,促进 Java 技术的发展。

此外,考虑到用户实际需求以及 Java 8 群体的庞大性,阿里巴巴后续也会考虑继续将 OpenJDK 后续版本中的优秀功能移植到 Alibaba Dragonwell 中,类似于上文提到的 Java Flight Recorder 功能,供开发者在生产环境中提前使用。

阿里巴巴与 Java

2018 年,阿里巴巴获邀加入 JCP 最高执行委员会,任期两年,这也是第一家加入 JCP 的中国企业。JCP 是一个开放的国际组织,是 Java 最高执行委员会,由 Java 开发者以及被授权者组成,主要职能是发展和更新 Java 技术规范,这意味着阿里巴巴在 Java 标准规范制定中具有一定话语权,并可以参与 Java 生态重大事件的决策。

据调查,阿里巴巴是全球最大的 Java 用户之一,其内部拥有数量非常庞大的 Java 开发人员和服务器,这也是其业务发展使然。提到阿里巴巴,最容易想到的标签就是“双十一”。2018 年,天猫双十一的总交易额最终定格在 2135 亿,不到 2 小时就破了千亿大关,支撑系统高效运行背后的最大功臣莫过于 Java。

随着体量增长和业务需求复杂性的提升,阿里巴巴在 2004 年决定从 PHP 语言全面转向 Java,并急需更高效的方式
来解决生产环境中的问题, 这逼着阿里巴巴不得不基于开源技术自我构建解决方案,指导 Java 开发人员快速定位并解决问题。

互联网企业的节奏非常快,一周内甚至需要迭代很多版本,这其中就会出现很多问题,如果全部依靠官方更新来解决,整个战线瞬间被拉长,业务根本等不起。这也是很多互联网企业选择基于开源版本的一个非常重要原因:自主可控,快速构建匹配业务发展的解决方案。

最早于 2010 年,阿里开始基于 OpenJDK 6 进行 JVM 定制优化,这是国内第一个优化、定制且开源的服务器版 Java 虚拟机。之后,阿里内部多个团队陆续都开始参与了 JDK 研发(没错,最开始确实是多个团队都在做),随后,阿里巴巴考虑到 JDK 作为一项重要的基础设施,几乎覆盖了物流、金融、电商、新零售和菜鸟等所有业务场景,长期分开研发肯定是不行的,便将所有 JDK 团队合并为一个。

2015 年,统一后的阿里 JVM 团队开始着手基于 OpenJDK 8 进行优化和定制工作,并推出了如今众所周知的定制版 AJDK (Alibaba/AlipayJDK) ,这几乎承载了淘宝、天猫,蚂蚁,菜鸟的所有核心应用,并经受住了多次双十一考验。

那么,如今开源的 Alibaba Dragonwell 与阿里内部使用的 AJDK 是一个东西吗?

通过阿里的业务运行情况来看,AJDK 的功能和性能确实不错,但 本次开源的 Alibaba Dragonwell 与 AJDK 还是有差异的。李三红表示,Alibaba Dragonwell 是 AJDK 的开源版本,AJDK 技术的继承者。目前开源的版本并未包含 AJDK 的所有功能,比如多租户,Wisp 协程,ZenGC 等,主要是因为开源一个技术会涉及到比较长时间的准备。

就目前公开的 Alibaba Dragonwell 8 预览版本,阿里内部其实也进行过很多次讨论,反复准备、测试、沟通,确定后又耗费了半年时间才最终将该预览版本开源,之后,阿里会考虑将 AJDK 的功能逐渐过渡到 Alibaba Dragonwell。显然,这一工作需要时间。

各家 JDK 火热,OpenJDK 咋办?

不同于 Oracle JDK,OpenJDK 是基于 GPL v2/a Classpath Exception 的开源项目,从 Java 7 开始就是 Java SE 的官方参考实现。曾有 OpenJDK Committer 在接受采访时表示,OpenJDK 有一个约定成俗的做法,经过多年免费支持后,Oracle JDK 版本的生命周期就进入结束期,之后由社区接手并主导后续更新。在此之前,Oracle 已经为 JDK 8 免费提供了五年支持,也是时候进入社区维护阶段了。

如今,国际不少主流厂商都在使用 OpenJDK,比如 Google、Twitter、Amazon 和阿里巴巴,并研发了基于此构建的 JDK 版本,这让不少生态圈内的开发者出现担忧:在不少用户开始考虑选择 OpenJDK 的时候,这些大厂是否还有心思参与整个社区的维护?

从阿里巴巴层面来看,李三红在采访中反复强调一个观点:

Alibaba Dragonwell 一定是 OpenJDK 的下游,每个 Alibaba Dragonwell 发行版都会同步上游最新更新,并经过阿里巴巴内部大规模的应用集群测试。同时,阿里巴巴也会积极将 AJDK 上的技术积累贡献到 OpenJDK,积极参与社区的项目更新和维护。

AWS 方面与这一观点也颇为类似,AWS 首席开源技术专家 Arun Gupta 曾在 AWS 开源博客上发布公告称:

我们期待与 OpenJDK 社区密切合作,共同开发 OpenJDK 8 和 11 的未来增强功能。

就笔者看来,这一状态下,各大厂商推出的 JDK 势必会与 OpenJDK 存在些许差异,这很容易理解:客户生产环境所遇到的实际问题未必适合 OpenJDK 的改进;面对同一问题,OpenJDK 的解决方案未必与各大厂商的想法一致,这就需要多方进行友好协商,并逐渐形成良性机制,现在只是迈出了推动 OpenJDK 的第一步。

Java 归途

选择多了,生态似乎更“碎”了,坚守 Java 8 的开发者未来有意愿向 OpenJDK 迁移吗?

坚守的 Java 8 群体

既然 Java 8 和 Oracle JDK 8 存在这样那样的问题,为什么开发者不大规模迁移至更新的版本呢?为什么 Alibaba Dragonwell 依旧从基于 OpenJDK 8 开始呢?这个问题的答案很简单:

Java 8 是目前最被广泛使用的版本,并且其群体非常坚守!

在 Java 圈内,你会发现一个很有趣的现象:无论新版本给出的更新多么诱惑,大部分 Java 开发者似乎并不感兴趣,依旧坚持自己的选择。确实,Java 8 是一个非常成功的版本,以至于很多开发者并不认为需要更新其他版本,这可能与长期养成的习惯和固有信任有关系。

对此,李三红认为,Java 这么多年发展过来,大多数开发者已经习惯信任官方 Oracle JDK,对社区 OpenJDK 版本关注不够,所以从 Oracle JDK 到 OpenJDK 的切换需要一个过程。但随着这些国际科技大厂的努力,OpenJDK 的生态一定会越来越完善,功能也会更加齐备,面对持续的安全更新和众多大厂的深度参与,这个项目应该会成为 Java 生态中的重要公共资源。

越来越“碎”的生态

很早之前,Java 生态就开始出现碎片化趋势,这在 Oracle 收费之后似乎得到了加剧。此前,为了减少对碎片化问题的潜在担忧,AdoptOpenJDK 曾强烈鼓励所有 OpenJDK 提供商将补丁提交给 OpenJDK。

对此,周经森认为,就开发者而言,目前的选择越来越多,这不见得一定是件坏事。并且,不同版本之间的兼容性其实非常高,迁移成本几乎为零,这不会给用户使用造成额外负担。不同的版本在性能优化、平台支持等方面确实存在些许差异,开发者可以根据需要进行选择,但阿里巴巴正在努力将这些技术推向上游,也就是整个 OpenJDK 生态,这一问题应该会在未来得到缓解。

Alibaba Dragonwell 项目地址


本文作者:amber涂南

阅读原文

本文为云栖社区原创内容,未经允许不得转载。

阿里开源自用 OpenJDK 版本,Java 社区迎来中国力量的更多相关文章

  1. 重磅发布:阿里开源 OpenJDK 长期支持版本 Alibaba Dragonwell

    原文地址:https://yq.aliyun.com/articles/694603 本文作者:阿里开源  本文来自云栖社区合作伙伴"阿里系统软件技术",了解相关信息可以关注&qu ...

  2. 阿里开源 OpenJDK 发行版 Dragonwell

    日有消息显示,阿里将于 21 日重磅发布其 OpenJDK 发行版 Alibaba Dragonwell. 我们知道 OpenJDK 是基于 GPL v2/Classpath Exception 的 ...

  3. 重磅发布:阿里开源 Open JDK 长期支持版本 Alibaba Dragonwell

    3 月 21 日北京阿里云峰会,阿里巴巴正式宣布对外开源 OpenJDK 长期支持版本 Alibaba Dragonwell.作为 Java 全球管理组织 Java Community Process ...

  4. 带你上手阿里开源的 Java 诊断利器:Arthas

    本文适合有 Java 基础知识的人群. 本文作者:HelloGitHub-秦人 HelloGitHub 推出的<讲解开源项目>系列,今天给大家带来一款阿里开源的 Java 诊断利器 Art ...

  5. 初识阿里开源的本地Java进程监控调试工具arthas(阿尔萨斯)

    转载自:https://www.cnblogs.com/linhui0705/p/9795417.html 上个月,阿里开源了一个名为Arthas的监控工具.恰逢近期自己在写多线程处理业务,由此想到了 ...

  6. 阿里巴巴开源项目汇总-(JAVA)

    来源:https://segmentfault.com/a/1190000017346799 1.分布式应用服务开发的一站式解决方案 Spring Cloud Alibaba Spring Cloud ...

  7. 学生党成功拿到阿里技术offer:面Java开发,却是C++考官,几个意思?

    摘要: 这是我为大家分享的如何拿到阿里技术offer系列文章中的第一篇,今天分享的文章的作者是一位在2015年阿里的校招中成功得到offer的美女学姐,从学姐的这篇文章中我们能学到很多在阿里面试的宝贵 ...

  8. 阿里开源的热补丁框架AndFix使用教程

    阿里巴巴推出的AndFix框架 首次给出大家这个框架的地址:https://github.com/alibaba/AndFix 对源码比较感兴趣的同学们可以自行研究代码 AndFix原理介绍 AndF ...

  9. 如何找到fastjson.jar这个阿里开源的jar包

    如何找到fastjson.jar这个阿里开源的jar包 转载 https://blog.csdn.net/AngelLover2017/article/details/84261261 Java编程中 ...

随机推荐

  1. [Hdu-6053] TrickGCD[容斥,前缀和]

    Online Judge:Hdu6053 Label:容斥,前缀和 题面: 题目描述 给你一个长度为\(N\)的序列A,现在让你构造一个长度同样为\(N\)的序列B,并满足如下条件,问有多少种方案数? ...

  2. 新手玩ubuntu(一)终端

    有终端才能行天下事 点击为如下,就可以进行下面的开发了

  3. MYSQL错误代码和消息

    服务器错误信息来自下述源文件: ·         错误消息信息列在share/errmsg.txt文件中.“%d”和“%s”分别代表编号和字符串,显示时,它们将被消息值取代. ·         错 ...

  4. codeforces600E. Lomsat gelral(dsu on tree)

    dsu on tree先分轻重儿子先处理轻边,再处理重儿子再加上轻儿子的答案 #include<iostream> #include<cstdio> #include<q ...

  5. MaxCompute问答整理之8月

    本文是基于对MaxCompute产品的学习进度,再结合开发者社区里面的一些问题,进而整理成文.希望对大家有所帮助. 问题一.通过数据源数据增量同步后,如何查看某一条数据具体被同步到MaxCompute ...

  6. day72作业

    目录 models模型类 路由配置 视图配置 序列化组件配置 基于ModelSerializer类,完成Car资源的单查,群查,单增接口 序列化:显示车名,车的颜色,车的价格,车的海报,车的品牌 反序 ...

  7. xshell上传文件到linux

    z,sz是Linux/Unix同Windows进行ZModem文件传输的命令行工具. 优点就是不用再开一个sftp工具登录上去上传下载文件. sz:将选定的文件发送(send)到本地机器 rz:运行该 ...

  8. JQuery--漂亮的三目运算与jQ选择器结合代码

    $(function($) { $("input[name='timeset']").bind('click', function() { $(this).val() == 'cu ...

  9. java代码乱序问题

    java两个线程互相访问的时候并不能按照你的思路运行,因为执行语句可能有前后快慢之分,比如a=1和flag=true.下面线程B访问的时候 这两个赋值语句不一定按顺序执行 产生这种原因是因为指令重排序 ...

  10. mybatis学习:mybatis注解开发一对多

    实体类User: public class User implements Serializable { private Integer id; private String username; pr ...