Eclipse Adoptium 使用 Quarkus 构建高吞吐量 Java SE 发行版 API

Adoptium logo

Java 被全球数百万开发者使用,并且根据 Redmonk 的说法,最近回升至使用量排名第二的编程语言。 Java 运行时和开发工具包有很多发行版,但 Eclipse Temurin(以前称为 AdoptOpenJDK)发行版已被证明是最受欢迎的。 最近,AdoptOpenJDK 项目已转移到 Eclipse 基金会,并更名为Eclipse Adoptium。 Adoptium 的目标是推广和支持高质量、经过 TCK 认证的运行时和相关技术,以便在整个 Java 生态系统中使用。 它通过执行定期构建、测试、认证,当然还有为需要评估、构建原型以及使用 Java 运行生产工作负载的数百万开发人员提供二进制文件来实现这一目标。 与其他开源 Eclipse 项目一样,发行版 API 背后的团队主要由志愿者组成,因此他们不断寻找优化他们的时间和资源以及用于实现其使命的技术的方法。

挑战

虽然开发人员可以通过单击直接从Adoptium 网站下载发行版,但在 CI/CD 管道中自动化此过程变得更具挑战性。 对于 Java 版本、发布类型、操作系统、架构、JVM 实现等的多种变体而言,尤其如此。 为此,Adoptium 需要提供一种以编程方式发现和访问基于这些变量的预构建二进制文件的方法,并生成了最终用户 API

AdoptOpenJDK 的下载量非常大,每天大约 500,000 次,这意味着性能将成为 API 的关键考虑因素。 此外,Adoptium 没有传统的数据中心,因此所有这些都在 Microsoft Azure 上的云中运行,当您有持续运行的工作负载占用不必要的空间时,成本可能会增加。

Download trends
图 1. Adoptium 发行版的最新下载统计数据,来自 dash.adoptopenjdk.net

2017 年,技术团队首次尝试公开 API 是使用 Node.js + Express。 随着请求量和发行版变体的数量增加,团队发现响应时间越来越慢,这不仅是因为请求量大,还因为早期做出的架构选择。 特别是,应用程序的单体架构,其中前端和后端在同一个应用程序中,会导致前端出现明显的缓慢,而后端则处理并发请求。 此外,API 中缺少分页意味着请求可能会返回巨大的结果,即使只需要结果的前几个元素。

负责维护 API 的技术指导委员会的首席开发人员解释说:

现有的 API 存在设计缺陷,不容易修复,因此我们正在考虑用新的实现来替换它。 我们的小团队在 JVM 语言方面比 JavaScript 更有经验,并且由于这是一个服务 Java 数据的 API,我们认为吃自己的狗粮是件好事!

- Adoptium 技术指导委员会的首席开发人员

Quarkus 登场

2019 年 7 月,该团队通过其与 Java 生态系统中其他框架的相关工作发现了 Quarkus。 他们对 Quarkus 在性能和更小占用空间方面的优势特别感兴趣,这与 Node.js 甚至 Golang 相当。 更好的是,Quarkus 对 Kotlin 的一流支持意味着该团队可以将他们的 Java 和 Kotlin 经验都重用于 Quarkus。

该团队发现 Quarkus 非常容易开发,尤其是 实时编码功能。 Quarkus 中熟悉的 JAX-RS API 使创建必要的端点变得容易。 首席工程师进一步解释说:

我们非常喜欢 Quarkus 使用 JAX-RS,我们已经很熟悉它了。 与 RESTEasy reactive 的开箱即用集成是一个不错的性能奖励,并且 Quarkus 中提供的 OpenAPI 扩展使得将 API 作为 Swagger API 浏览器公开变得非常简单,而无需任何额外的工作。

- Adoptium 技术指导委员会的首席开发人员

在使用 Quarkus 开发应用程序时,实时编码也被证明非常有用

在使用 Quarkus 进行开发时,实时编码快速反馈循环非常有用。 虽然快速启动很好,但它并不是关键,因为我们的应用程序是长时间运行的,但在开发过程中,当我们调整我们的 API 时,能够立即重新测试节省了我们大量的开发时间。

- Adoptium 技术指导委员会的首席开发人员

Quarkus 在 JVM 上的开箱即用性能轻松超过了他们的预期

我们最初希望大多数 API 的响应时间都在亚秒级,并且能够处理大约每秒 10,000 个请求。 通过零优化,我们的应用程序在 1 毫秒内响应大多数 API,并且轻松超过了我们的吞吐量要求。 这远远超过了我们在可预见的将来需要的。 与 [与 Node.js 相比] 相比,Quarkus 应用程序使用的 CPU 时间也少于一半,尽管处理了更多的流量并提供了更多的功能。

- Adoptium 技术指导委员会的首席开发人员

总的来说,迁移到 Quarkus 是一次非常积极的体验,在开发人员生产力和运营效率方面带来了实际的好处。 该团队自 2019 年 11 月以来一直在生产中使用 Quarkus 用于 Adoptium API,并且已被证明非常稳定。

一个活跃的社区

社区是任何开源项目成功的关键方面,包括 Quarkus。 毫不奇怪,社区的健康状况是在做出采用决策时要考虑的一个主要因素。 对于 Adoptium,这通过示例得到了明确说明

今年早些时候,我们在 Quarkus 的 RESTEasy Reactive 组件中发现了一个内存泄漏。 在与 Quarkus 社区合作的几天内,我们能够识别并修复该问题。 这让我们有信心,从长远来看,我们将能够快速解决问题。

- Adoptium 技术指导委员会的首席开发人员

Adoptium 的下一步是什么

Adoptium 对他们采用 Quarkus 的决定感到非常满意,并且期待尝试 Quarkus 中的新功能,例如 MongoDB(他们选择的数据库)的持续测试和开发服务支持。

总的来说,Quarkus 的功能给我们留下了深刻的印象,并且我们与 Quarkus 社区的合作体验非常棒。 我们期待看到它如何发展,并改进我们为 Java 社区的 Java 发行需求服务的方式,在未来的几年里!

- Adoptium 技术指导委员会的首席开发人员

更多信息

关于 Eclipse Adoptium

Eclipse Adoptium 顶级项目的使命是生产高质量的运行时和相关技术,以供在 Java 生态系统中使用。 Eclipse Adoptium 还提供工件,包括作为代码的开源基础设施、全面的持续集成构建和测试场以及广泛的质量保证测试。 Eclipse Adoptium 项目和其他运行时技术构建器可以使用这些工件来确保提供安全、经过 Java SE TCK 测试且符合规范的生产就绪运行时。