- 《架构师》2018年12月
- InfoQ中文站
- 2630字
- 2020-06-26 06:08:56
Amazon Corretto技术细节探秘
在比利时安特卫普举行的Devoxx BE大会上,亚马逊发布了Corretto预览版,这是Java的一个参考实现,一个“免费、跨平台、生产就绪”的OpenJDK版本。在开幕主题演讲中,Java语言创始人James Gosling宣布Corretto可以作为所有Java SE发行版的直接替代品,但使用了OpenJDK中没有的功能的场景除外(例如Java Flight Recorder)或当前正在非HotSpot JVM上运行的工作负载。亚马逊计划在2019年将Corretto作为亚马逊Linux 2的默认OpenJDK。
Corretto 8的预览版本对应于Java 8,二进制安装文件目前可在Amazon Linux、macOS和Windows上安装。GA版本计划于2019年第一季度推出,并将增加对Ubuntu和Red Hat Enterprise Linux的支持。亚马逊将至少在2023年6月之前为Corretto 8提供免费的安全更新。对应于OpenJDK 11的Corretto 11将于2019年上半年推出。亚马逊至少在2024年8月之前为Corretto 11提供每季度更新。
AWS首席开源技术专家Arun Gupta在AWS开源博客上发布公告称,Java是AWS客户使用的最流行的语言之一,亚马逊致力于支持Java并保持Java免费。
我们正在向客户提供免费、长期支持的Java,并提供季度更新,包括错误修复和安全补丁。AWS还将在季度计划之外为客户提供紧急修复。
在Oracle最近宣布改变Java产品支持策略之后——主要是移除Java的免费长期支持(LTS)——很多亚马逊客户开始担心他们必须为LTS版本的Java支付费用才能运行他们的工作负载。之前,亚马逊确认亚马逊Linux中的LTS版本Java将继续获得支持,现在开始跟进Corretto的预览版。
在Devoxx BE的分组讨论会上,Gupta与AWS JDK团队经理Yishai Galatzer进行了交谈。两人谈到,Corretto 8包括来自较新OpenJDK版本的反向移植,以及来自社区和亚马逊新开发的增强功能。发布过程包括对数千种Amazon生产服务进行测试,因此修复程序可以在发现问题后的几天内发布。亚马逊还在每个Corretto版本上运行Java技术兼容性工具包(TCK),以确保与Java SE平台的兼容性。
Corretto中包含的额外补丁和改进是在当前的OpenJDK上游代码库之外,这些改进让亚马逊能够“解决真实的大规模服务问题,满足高性能和可扩展性需求”。这些补丁包括:[C8-1] 当长时间运行的本机调用导致G1 GC挂起,防止过早抛出OutOfMemoryException; [C8-2] 从OpenJDK 10反向移植,修复了JDK-8177809:“File.lastModified()丢失毫秒精度(总是以000结尾)”; [C8-17] 在使用gcc7时,提高JVM源代码的可移植性。
亚马逊最近已经开始参与贡献OpenJDK,Gupta的博文称“我们期待与OpenJDK社区密切合作,共同开发OpenJDK 8和11的未来增强功能”。他说,“我们在下游为OpenJDK提供修复,根据我们自己的经验和需求添加增强功能,然后构建成Corretto”。不过,这确实增加了上游OpenJDK代码库和Corretto之间存在微妙差异的可能性。
如果针对这些补丁的努力被延迟或不适合OpenJDK项目,我们会将它们提供给我们的客户,只要能够为客户带来价值。如果在OpenJDK中使用了不同的方式解决问题,我们将在安全的情况下采用他们的解决方案。
在安装好Corretto二进制文件后,用它来运行Java应用程序,“现有的命令行选项、调整参数、监控和其他内容将继续像以前一样保持不变”。但前提是需要通过HotSpot JVM执行应用程序,并且如果当前正在使用其他的JVM,例如Eclipse OpenJ9,那么一些命令行选项可能不兼容,需要做出修改。Devoxx的参会者问在未来是否支持其他JVM,Galatzer表示,目前只有HotSpot将与Corretto捆绑在一起。
Corretto的源代码可以通过GitHub获得,InfoQ与Gupta取得了联系,问他该项目是否接受来自社区中的提取请求和补丁。
是的。有关Corretto的拉取请求可以通过https://github.com/corretto提交。任何与OpenJDK相关的问题都需要根据OpenJDK贡献者协议提交到相应OpenJDK代码库中,让整个社区都可以从修复中受益。在向OpenJDK提交代码后,我们建议再与Corretto团队就提交的问题展开讨论,并确定创建新的Corretto PR是否有助于加速修复。
他还指出在Corretto和OpenJDK上提交bug的公开程序:
OpenJDK相关的bug应该提交到OpenJDK代码库中,然后在Corretto上提供该bug的链接。这是为了让整个社区都知道与这个bug相关的代码或想法。如果存在只与Corretto相关的构建脚本、文档和工件相关的问题,那么应该将问题提交到https://github.com/corretto。
HackerNews和Twitter上针对发布公告的讨论,例如,Java Champion及Joda-Time的作者Stephen Colebourne比较关注Corretto版本的发布周期。Gupta证实,目前只支持与OpenJDK的LTS版本相对应的Corretto版本:
目前,我们计划遵循Oracle的LTS发布周期。因此,除了Corretto 8和Corretto 11之外,下一个LTS版本将是Corretto 17。
OpenJDK的其他版本也可用,包括Oracle的Java、Red Hat的OpenJDK构建版本,以及来自AdoptOpenJDK组织的社区构建版本。AdoptOpenJDK致力于促进OpenJDK的采用,一股来自民间社区的力量,由一系列商业组织、Java用户组和Java开发者组成。InfoQ联系到了Java Champion、LJC和OpenJDK Build Farm项目的负责人Martijn Verburg,询问了他对发布公告的看法:
亚马逊宣布Corretto是对OpenJDK作为生产环境中可行的运行时的额外认可!我认为很多保守组织会看到这一点,他们会说“如果亚马逊、IBM、Red Hat等正在使用OpenJDK,那么我也就没有什么疑虑了!”
InfoQ还问到亚马逊是否与AdoptOpenJDK合作,Verburg回答说:
“亚马逊曾经与AdoptOpenJDK合作,使用我们的一些脚本和专业知识解决他们的Windows和Mac安装程序问题,并改进他们的测试。AdoptOpenJDK的精神一直是关于Open Infrastructure As Code(请参阅第3个要点),我们欢迎亚马逊使用这些资源,我们期待继续与他们合作。”
AdoptOpenJDK项目的一级赞助商包括Azul Systems、IBM、LJC、微软Azure、Ocado和Packet,InfoQ还问到了亚马逊对社区的参与情况以及Java生态系统发生碎片化的可能性:
AdoptOpenJDK还在与亚马逊和其他OpenJDK提供商讨论进一步的举措,以缓解对碎片化的担忧。例如,AdoptOpenJDK有一个开放的测试套件和测试管道(40-60,000个测试),可用于测试任意的二进制文件。这为所有的OpenJDK提供商提供了一个他们可以达成的公共质量标准基础。
为了减少对碎片化的一些潜在担忧,AdoptOpenJDK将强烈鼓励亚马逊和其他OpenJDK提供商将他们的补丁提交给OpenJDK。亚马逊在他们的常见问题解答中也提到了这种担忧。
Verburg还指出Java生态系统在商业和业余爱好者中都有广泛的应用,并且认为有必要提供透明的构建过程。
AdoptOpenJDK仍然是供应商中立的,社区可以生成经过严格测试的OpenJDK构建版本,最终用户可以清楚地看到他们所使用的每个二进制文件的构建过程。
他继续说道,亚马逊目前以Corretto为目标的平台之外还存在很多其他的硬件架构、操作系统和Java版本:
AdoptOpenJDK将继续支持整个生态系统,提供广泛的平台支持(ARM32/64、Win 32、AIX、Linux s390、PPC以及Win、Mac OS X和Linux x86)和版本变体(Eclipse OpenJ9 VM、OpenJDK 8,9,10,11、Project Amber等)。
最后,Verburg鼓励社区通过为AdoptOpenJDK这样的项目作出贡献来共同参与共建Java的未来。
我们已经有几百万的下载量,社区成员,如IBM、Red Hat、Azul、Ocado、SAP、LJC(以及亚马逊)每天都参与其中。在人们看来,这个项目是一个对软件行业具有长久意义的重要公共资源。
现在让我们回到Gosling在Devoxx上介绍Corretto这个话题上,Gosling向Java的咖啡主题历史致敬——Caffè corttto是一种意大利饮料,含有少量白酒的浓缩咖啡——并向Devoxx与会者表达了他的激动心情:
亚马逊在Java方面有着悠久而深厚的历史。我很高兴看到我们内部的任务关键型Java团队的努力正在走向世界。
用户可以下载Corretto 8,同时还提供了文档,其中包含一个入门指南,指南中包含了所有受支持平台的完整说明。用户也可以在stackoverflow或Twitter(@awsopen)上提出相关问题。