Blog chevron_right 未分类

如何选择合适的 Java 版本?

本博文分为前后两篇,在前篇,我们了解了 OpenJDK 的版本发布节奏、如何升级 Java 版本和更新 OpenJDK 功能。在后篇,我们将了解在有多个 Java 版本时应该如何选择。

OpenJDK 的每个新版本都会添加新的实验性功能,包括速度和内存方面的改进。因此,每当有新版本推出时,最好升级您的所有运行时环境。不过,这需要每六个月就对所有服务器和/或应用程序进行一次测试和升级。在只有几个实例的小型设置中,这项工作很容易。但是,由于使用 Java 的许多业务环境包含数十、数百或数千个服务,这种升级需要大量的规划和精力。对于这些用例,您坚持使用一个版本的时间可能会更长。选择版本时,有以下几个标准:

  • 长期支持 (LTS)此版本的生命周期会预先公布,且此版本能保证获得更新的时间会更长。升级到下一个 LTS 版本的日期已经确定,因此可以提前安排升级。
  • 功能:开发团队是否需要某个特殊版本才有的特定功能。
  • 实验性:许多开发人员会在工作 PC 上使用最新版本。这样既可以对新功能进行测试,又得以构建和编译可向后兼容生产环境所用运行时的应用程序。

从实际示例中了解升级或更新的影响

升级到较新的版本(例如,从一个 LTS 版本升级到另一个版本,比如从 11 升级到 17 版本)需要进行大量测试,以确保生产环境按预期运行。您可以期待每个新版本都能提高性能,但随着代码和运行时的不断发展,您也可预期会出现错误。这些升级路径和测试需要完全由您的团队处理。

不过,当您部署了某个版本,并遵循我在上一篇博文中讨论的 CPU/PSU 周期,更新到新版本的过程就会更容易管理。我们以 Azul Zulu 版本 OpenJDK 的 2022 年 10 月版本发布说明为例

关于不同版本支持期限的完整概述,以及对 Oracle、Eclipse Temurin 和 Azul 提供的商业支持的比较,请参阅我们的支持路线图


OpenJDK 的新版本在上半年由 Oracle 发布和维护。例如,OpenJDK 19 将在 1 月份发布由 Oracle 管理的最后一个版本 19.0.2,之后如果有 OpenJDK 社区成员主动担任该版本剩余生命周期的维护者,它就可以成为一个社区项目。如果有多个候选者,则由社区决定谁将成为维护者。到 2020 年为止,我维护 OpenJDK 6 版本已长达 4 年,随后我负责维护 OpenJDK 7 版本,直到 2022 年。这些都是相当稳定的版本,只需要一些以传统方式部署的安全修复程序。我的同事 Yuri Nesterenko 负责维护 OpenJDK 13 15,一直到 2023 3 月。

Azul 资深软件工程师 Andrew Brygin


Azul Zulu 版本的 OpenJDK 2022 年 10 月发布说明中的 Java 11 到 19 的版本信息

在您的环境中部署 CVE 修复程序的最短路径

  • 您的生产系统应已经在运行 Zulu PSU 2022 年 7 月版本(Zulu PSU 17.36)并获得之前的所有修复程序和更新。
  • 10 月版本同时包含 CPU 和 PSU 包:
    • Zulu CPU 17.37,基于 OpenJDK 17.0.4.1.101
      • 更改量最低,以使运行时更加安全。
        • 例如,对于 2022 年 10 月版 OpenJDK 11.0.16.1.101 更新:有 14 项修复程序。
      • 更容易投入生产,因为只需要少量测试。
      • 需要尽快部署到您的生产环境。
    • Zulu PSU 17.38,基于 OpenJDK 17.0.5
      • 包含相同的关键更改和其他改进。
        • 例如,对于 2022 年 10 月版 OpenJDK 11.0.17 更新:有 220 项修复程序。
      • 首先需要进行更深入的测试,因为该更新包含更多更改。
      • 需要在每季度发布计划之间进行部署。
  • 您的系统现在运行的是 Zulu PSU 17.38 (OpenJDK 17.0.5),并已准备好在 2023 年 1 月的下一个季度更新中处理相同的流程,以便在下一个 CPU 可用时立即改用该 CPU。

按照这种方法,您将在最短的时间内在您的环境中部署 CVE 修复程序,以确保环境安全。


顾名思义,“关键补丁更新”需要尽快部署,因为它会添加安全修复程序。为此,必须提供一个易于升级的版本,即只需对几个文件进行最少量的更改。虽然修改量很少,但要在 Azul 内部创建一个新版 CPU 需要数周时间!新版本会在所有受支持的平台上进行测试,这意味着在这些平台上总共要执行多达 1 亿次测试。测试结果由十几名质量工程师组成的团队来处理。因此,我们的客户只需要进行少量测试即可将此类 CPU 更新投入生产,因为 Azul 已经执行了全面测试。

另一方面,PSU 更新可能包含许多文件中的数百个更改,因为这还包括安全更新和其他改进。Azul 质量团队对 PSU 更新的测试需要两个月的时间。我们希望尽量减少客户方面受到的影响和需要的测试次数。CPU PSU 已通过验证,在大多数实际用例中表现良好,并在适用情况下已通过 TCK 认证

现在举例让您了解一下下测试和分发的版本数量:针对每一个新版本,我们都会创建超过 500 CPU 包和超过 1000 PSU 包,这些都包含在我们的质量流程中!

Azul QA 经理 Sergey Grinev

结语

为获取最新的 Java 改进和安全修复程序,务必让 OpenJDK 处于最新版本!好消息是,Azul 会在每个季度新 CVE 的报告出炉后数小时内,就提供许多不同版本 OpenJDK 的新版本。请查看各个平台所有可用版本的下载页