Java 自诞生以来就始终是热门的编程语言。得益于丰盛的生态以及欠缺保护的包和框架,Java 领有着宏大的开发者社区。这个 1995 年诞生的计算机语言,以 “一次编写,到处运行” 的跨平台个性以及面向对象、泛型编程等古代语言的个性迅速成为了企业级利用乃至挪动利用开发的首选。亚马逊云科技也始终在 Java 方面有继续的投入,以丰盛整个 Java 生态。

亚马逊云科技开发者社区为开发者们提供寰球的开发技术资源。这里有技术文档、开发案例、技术专栏、培训视频、流动与比赛等。帮忙中国开发者对接世界最前沿技术,观点,和我的项目,并将中国优良开发者或技术举荐给寰球云社区。如果你还没有关注/珍藏,看到这里请肯定不要匆匆划过,点这里让它成为你的技术宝库!

无论在寰球还是在中国,开发者规模的增长都越来越快。开发者们会抉择本人相熟的语言进行代码的构建、编译和生成,尽管市场上可选的编程语言很多,但 Java 始终是泛滥开发者的首选语言。

Apache 软件基金会在 2020 年的考察指出,应用 Java 语言构建源代码的数量远超其余编程语言,由此可见开发者对于 Java 语言的青睐水平。此外,TIOBE 编程语言排名调研结果显示:从 2001 年到 2022 年,Java 语言始终处于编程语言排名前三的地位,而且在 2005 年和 2015 年别离取得开发者最为青睐的编程语言。可见,Java 语言领有着非常广阔的市场以及宏大的开发者群体。

亚马逊的 Java 生态

亚马逊正在宽泛地应用 Java,无论是对外的电商批发零碎还是外部的利用,包含很多亚马逊云科技的服务也都在应用 Java 进行构建。

亚马逊有成千上万的 Java 利用在生产环境中运行。从 2016 年开始,咱们意识到不能适度依赖内部的二进制发行版构建 Java 利用。起因在于:

一是 Java 的季度公布中通常会引入重大更新,并可能产生宽泛的影响。

二是某些要害谬误的修复须要期待 Java 的公布进度,可能整体下来须要几个月的工夫能力取得反对,而咱们迫切需要把这些修复投入生产以解决问题。

因而,咱们决定从源代码开始构建 Java,以满足亚马逊对 Java 利用在性能和平安等诸多方面的需要。

2018 年咱们公布了 Amazon Correto,Amazon Corretto 是凋谢 Java 开发工具包 (OpenJDK) 的收费、多平台、生产就绪型发行版。Amazon Corretto 提供长期反对,其中包含性能加强和平安修复。咱们会借助 Amazon Correto 疾速为 Java 带来新的能力,修复更多的谬误,奉献给 Java 社区,一直为 OpenJDK 做出奉献。

1 大规模运行 Java 利用

亚马逊作为一家数据驱动型公司,咱们的后盾运行了泛滥 Java 构建的零碎,咱们会为这些系统生成火焰图进行运行剖析。通过剖析软件的可视化,帮忙咱们疾速精确地辨认最常见的代码门路。

这是 Amazon SDK v1 中 S3 存储桶的调用快照,它提供了每个调用的详细分析,并显示每个办法调用的 CPU 利用率,这里咱们能够发现 java.math.BigInteger.squareToLen 函数占用了 20% 的 CPU 工夫。对于所有应用 Java 的服务,咱们都有这样的数据。这其实是一个十分大规模的聚合数据。

基于亚马逊本人的应用教训所产生的数据,将有助于帮忙咱们确定要为 Java 做哪些类型哪些方面的奉献和改良,并反馈给上游社区。但有时社区须要 3-18 个月能力驳回这些修复,因而咱们须要一整套解决方案,不仅帮忙亚马逊外部,也帮忙开发者更好地取得对于 Java 性能的晋升以及谬误的改良。

2 亚马逊云科技的 Java 生态系统

亚马逊云科技的 Java 生态系统是宏大、欠缺和具体的。其中涵盖了开发工具包,以及与亚马逊云科技服务的集成,包含服务、环境、性能、工具等。

在 Amazon Correto 推出之前,亚马逊的 Java 生态其实曾经初具规模。Amazon Correto 的推出又进一步丰盛了 Java 生态系统。包含如何将更多的 Java 工具和罕用的 IDE 进行集成,以及帮忙开发者更好地在云端开发,咱们也推出了 Amazon Java SDK 的第二版。

与此同时,咱们也思考了要在云服务中引入便捷的 Java 构建形式,比方 Amazon Lambda、Amazon CDK 、Amazon Kinesis 等。通过咱们的不懈努力,开发者当初能够通过亚马逊云科技的服务和工具便捷疾速、高性能地构建任何的 Java 利用。

Java 开发工具

1 Amazon Corretto 的起源

Amazon Corretto 是依据亚马逊外部需要构建的,并作为二进制发行版对所有开发者凋谢。亚马逊的数千种基于 Java 的生产环境都在运行 Amazon Corretto,这意味着在 Java 开发中遇到的很多问题、谬误等等均能够在晚期被发现。Amazon Corretto 是 OpenJDK 的上游发行版,OpenJDK 是 Java 平台标准版的开源实现,这是自 Java 7 以来 Java SE 所需的根底环境。OpenJDK 是一个凋谢源代码的我的项目,并且也开始提供从 Java 11 开始的二进制发行版。

Amazon Corretto 目前提供 4 个版本:8、11、17、19。Amazon Corretto 是 OpenJDK 的牢靠版本,并保障提供收费的长期反对 (LTS) (Amazon Corretto 19 是 non-LTS 版本)。每个 LTS 版本都会蕴含亚马逊收费提供的性能加强、安全更新等内容。Amazon Corretto 更新打算是每季度公布一次,并且在惯例季度周期之外,当必要时会为用户提供利用紧急修复程序(次要是安全性更新)。

Amazon Corretto 被设计为所有 Java SE 发行版的间接替代品,正确装置后,你能够像之前应用 OpenJDK 一样的形式应用 Amazon Corretto 来调用和运行 Java 应用程序。当然,OpenJDK 中不可用的性能,如 Java 航行记录器 (JFR)等,Amazon Corretto 也无奈反对。

Amazon Corretto 版本在大多数操作系统上都可用,包含反对 Docker 映像部署。Amazon Corretto 应用 Java 技术兼容性工具包(TCK)进行认证,以确保其合乎 Java SE 规范。

2 Amazon Corretto的内部二进制发行版

按道理说,咱们只对外部公布 Amazon Corretto 就很有意义了,为什么亚马逊要对外公布一个二进制版呢?

有开发者向咱们提出:因为许可证老本的变动,他们正在思考将所有 Java 软件重写为不同的语言,比方 Python、C# 等,但咱们实际上是不心愿这种事件产生的,不仅是因为这会给开发者带来不必要的迁徙老本,更重要的是这有可能演变为整个 Java 社区的劫难。因而,咱们决定对外公布一个公开的 Amazon Corretto 二进制发行版。

亚马逊曾经在 Amazon Linux 上公布 OpenJDK 很长一段时间了,因而,公布 Amazon Correto 对于咱们来说并非难事。通过与开发者们的交换,咱们决定进一步的推动这个事件的产生,并与更多的开发者们分享 Amazon Corretto,而不是将其限度为只能在 Amazon Linux 镜像上应用、只能在亚马逊云科技服务里应用。这样一来,开发者可能借助亚马逊在数千项服务中的教训取得三到十二个月的先发劣势,并且,他们喜爱 Amazon Corretto 在本人的平台上提供对新 Java 技术的晚期拜访,包含性能调优、向后移植和测试。

很多开发者通知咱们,他们在亚马逊云科技上运行一些工作负载,还有一些在本地运行,一些工作负载在其余云上运行。他们把打包好的 Java 的软件,装置在第三方平台上。这些开发者放心针对多个不同的二进制散发版会呈现兼容性的问题,他们要求咱们提供一个可能提供良好兼容性的 Java 发行版。

现在,Amazon Corretto 可在所有次要操作系统上应用,并且为生产环境提供无老本的长期反对。你能够在任意云、本地、桌面上运行它,也能够将其与你的软件捆绑在一起。

3 在 OpenJDK 中进行合作

亚马逊和社区一起保护 OpenJDK 的 LTS 版本,包含 8、11 和 17 版本。并且参加到 Java 社区的 JCP 成员组织和执行委员会,一起制订 Java 下一步的倒退方向,促成 Java 更好的演进。

亚马逊也会为 OpenJDK 奉献新的性能,比方对 ARM 架构的反对,包含 Amazon Graviton2 和 Graviton3 处理器。

此外,Amazon Corretto 团队向 Shenandoah GC 公布分代模式的预览版。这是咱们与 Red Hat 单干做出重大 GC 奉献的后果:在传统的单代 Shenandoah 中增加了分代模式。Java 的次要长处之一是 Java 虚拟机 (JVM) 主动解决内存治理。许多翻新源于致力减小 JVM 对应用程序吞吐量和响应工夫的影响。

4 一直增长的奉献

比照 JDK 11(上图上)和 JDK 17(上图下)中亚马逊的奉献比例,能够看出亚马逊对 Java 的奉献在显著增长。

5 OpenJDK 版本和奉献

上图也更好的展现了这个趋势,2020 年,亚马逊向 OpenJDK 提交了 176 个奉献;2021 年提交了 381 个奉献;到 2022 年仅一季度就提交了 110 个奉献。能够看到亚马逊对 OpenJDK 的奉献是呈上升趋势,而且咱们也在对 Java LTS 版本提供反对。目前亚马逊曾经决定反对 JDK 8 到 2026 年,对于非 LTS 版本,亚马逊会在下一版本的 30 天内进行降级来确保开发者可能取得更好、更便捷、更平安的应用体验。

6 JDK 11 到 19 的新增性能 (局部)

上图是 OpenJDK 11 到 OpenJDK 19 的局部新增性能,能够看到新增性能的覆盖范围很广,亚马逊和亚马逊云科技也在其中做出了十分重要的奉献。

7 Amazon SDK for Java

这是实用于 Java 的 Amazon 开发工具包,通过提供一组统一且 Java 开发者相熟的库来简化亚马逊云科技服务的应用。它反对 API 生命周期注意事项,例如凭据治理、重试、数据封送解决和序列化。实用于 Java 的 Amazon 开发工具包还反对更高级别的形象,以简化开发。

实用于 Java 的 Amazon 开发工具包 2.0 是对 1.0 的重写,具备一些杰出的新性能。与 1.0 版本一样,它使你可能轻松应用亚马逊云服务,也包含非阻塞 I/O、主动分页、HTTP/2 和可插拔 HTTP 层等性能以进一步自定义你的应用程序。你能够在几分钟内开始应用 Maven 或任何反对 MavenCentral 的项目管理工具对 Java 我的项目进行构建、依赖治理。

8 相干工具

当然,亚马逊也理解到很多开发者喜爱应用 IDE 来开发。亚马逊云科技也和泛滥支流 IDE 进行集成,来帮忙咱们开发者进行疾速的 Java 开发。

9 Amazon CDK for Java

Amazon CDK 是一个开源软件开发框架,用于应用相熟的编程语言对云应用程序资源进行建模和预置。你能够应用不同的编程语言(如 Python、JavaScript、TypeScript、Java 或 C#)来执行此操作。

相比以前的工具,应用 CDK 能够让你的上手速度变快很多,因为你能够应用相熟的语言和概念,类和办法,而无需进行上下文切换。你还领有编程语言的所有工具反对,例如主动补全、内联文档、测试、Linting 和调试器。最重要的是,你可能更快地实现基础架构和应用程序的形象和构建。咱们提供了许多正当的默认值,因而无需浏览大量文档,只需利用默认值疾速平安地开始即可。当然,许多默认值能够依据你的须要进行调整。

10 Java 框架

目前很多开发者都在应用不同的 Java 框架进行利用的开发和构建。包含 Web 利用、微服务以及持久性 API 等等。置信各位开发者都抉择了不同的框架减速开发。亚马逊云科技提供了一整套开发的生态体系服务来为此提供良好的反对。

11 实用于 Java 软件交付的开发者工具

咱们有端到端的解决方案来帮忙开发者进行协同工作。从 CI/CD 到整个零碎的可察看性,从基础设施即代码到开发/测试,再到开发与平安的集成,你能够应用专门的 Amazon 工具构建成熟的端到端 Java 开发实际。同时,咱们在某些畛域与顶级供应商进行了原生集成,为开发者提供一站式体验。

具体来说,你能够在构建阶段应用 Amazon Cloud 9 和 Java SDK,并利用 Amazon CodeCommit 对其进行版本控制。代码提交可应用相似 Git 的环境,能够与任何规范的 IDE(Eclipse 或 VS Code)集成。Amazon CodeArtifacts 是二进制文件的版本化存储库,如果你应用的是解决容器 /K8s,则能够应用 Amazon ECR 来推送和拉取映像。Amazon Codeguru 是咱们用于 SAST(动态代码剖析)的机器学习注入服务,可帮忙你进步代码品质和安全性。

开发者能够应用 Amazon CodeBuild 生成 Java 代码,并应用 Amazon CodeDeploy 将其部署到亚马逊云科技环境中。Amazon Codepipeline 为 CI/CD 流水线提供了残缺的集成。所有这些开发服务都与可察看性工具很好地集成。开发者能够应用 CloudWatch 来记录和揭示需要,应用 X-Ray 进行追踪,应用 Amazon Config 来评估、审核和评估亚马逊云科技服务资源的配置,利用开发经营专家来辨认生产代码中的异样。对于容器化工作负载,Prometheus 和 Grafana 的托管服务能够很好地满足可察看性需求。最重要的是,你能够应用咱们的基础设施级代码,CDK 或者 SAM for serverless 配置这些服务。

步骤1 – 应用 Amazon CodeCommit 构建代码库

Amazon CodeCommit 是一项平安、高度可扩大的托管型源代码管制服务,可帮忙团队更轻松地合作解决代码。应用 Amazon CodeCommit,你无需运行本人的源代码控制系统,也无需放心基础设施的扩大能力。你能够应用 Amazon CodeCommit 将来自代码的任何数据存储为二进制文件,而且它能够无缝兼容你现有的 Git 工具。

步骤2 – 应用 Amazon CodeBuild 编译和测试

在开发阶段之后,你通常会生成、编译和测试 Java 源代码。你能够利用齐全托管的服务 Amazon CodeBuild 来打包依赖项,并创立构建包并运行单元测试用例。应用 Amazon CodeBuild 能够进行依赖的打包,进行构建包的创立,并且运行相干的单元测试。应用该服务进行设置、修补、更新和治理之外, 也可进行主动扩大和膨胀,以满足你的代码的构建需要。

步骤3 – 应用 Amazon CodeDeploy 部署

在部署过程中,咱们寻找的是失败、不持续和/或回滚部署的任何理由。在这个过程中,咱们用到很多亚马逊外部团队遵循的最佳实际。

通常咱们会分为三步:首先部署是在 beta 环境中执行的,在该环境中执行各种激进的测试;如果一切正常,那么能够转移到 gamma 环境,这是一个相似生产的环境,运行残缺的端到端测试。最初,如果没有失败,你能够转移到生产环境,分批或分波执行部署并执行和监控以取得后果。

依照此做法,能够帮忙开发者疾速地在胜利时部署代码,在失败时回滚代码。你能够应用 CodeDeploy 来主动执行部署,最大限度地进步应用程序可用性。

12 Amazon CodePipeline 继续交付

CodePipeline 对生成和测试进行建模,并且能够依据你定义的公布过程模型,在每次产生代码更改时部署代码。这使你可能疾速牢靠地交付性能和更新。你能够通过将咱们针对风行的第三方服务(如 GitHub)的预构建插件或将你本人的自定义插件集成到公布过程的任何阶段来轻松构建端到端解决方案。

咱们心愿和开发者一起共建 Java 社区、Java 生态,在云上帮忙开发者更好地进行 Java 利用开发,晋升开发者的全方位技能。

欢送继续关注 Build On Cloud 微信公众号,理解更多面向开发者的技术分享和云开发动静!

作者
王宇博
亚马逊云科技大中华区开发者关系总监,致力于新一代信息技术与翻新在开发者中的布道推广,以及开发者社区和生态体系的建设。他此前负责亚马逊云科技高级产品经理多年,负责云原生、大数据和机器学习等相干产品的业务和市场拓展。在退出亚马逊云科技之前,他曾在多家跨国企业负责产品、技术和治理等岗位,具备近 20 年的 IT 行业教训与实际,同时在计算机视觉、模式识别等畛域也有多年的科研经验。

文章起源:https://dev.amazoncloud.cn/column/article/64007e63a50b6210656...