无处不在 | 亚马逊云科技的 Java 生态

news2025/1/18 5:55:39

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/64007e63a50b6210656fa667?sc_medium=regulartraffic&sc_campaign=crossplatform&sc_channel=CSDN

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/678205.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

企业如何通过精细化管理实现高质量增长?

增量经济时代,各行各业都有比较充足的发展机会,即使采取相似的发展模式、提供同质化的产品和服务,也都会获得收益和增长。当前,我国开始步入存量经济时代,增量空间正逐步被压缩,这将对区域格局、产业组织结…

【NLP】PageRank、TextRank算法的原理解析

一、说明 PageRank是经典的网页热度评分算法,在自然语言的热词提取也有同样的意义(TextRank);本文详细叙述该算法的原理,配合部分代码演示其原理。 二、PageRank算法的启发因素 2.1 算法兴起 PageRank (PR) 是…

HDLBits笔记6:Circuits.Combinational Logic.Multiplexers + Arithmetic Circuits

Multiplexers 2-to-1 multiplexer module top_module( input a, b, sel,output out ); assign out sel ? b : a; endmodule2-to-1 bus multiplexer module top_module( input [99:0] a, b,input sel,output [99:0] out );assign out sel ? b : a; endmodule9-to-1 multi…

逍遥自在学C语言 | 多级指针探秘

前言 多级指针在C语言中是一种特殊的指针类型,它可以指向其他指针的指针。 通过多级指针,我们可以间接地访问或修改存储在内存中的数据。 在本文中,我们将讨论多级指针的概念、使用方法、使用场景以及常见错误及其避免方法。 一、人物简介…

软件项目管理 第六章 软件项目的进度管理 课后习题参考答案——主编:李冰、张桥珍、刘玉娥

第六章 软件项目的进度管理 课后习题参考答案 1.选择题 (1)快速跟进是指(A)。 A.采用并行执行任务,加速项目进展 B.用一个任务取代另外的任务 C.如有可能,减少任务数量 D.减轻项目风险 (2)赶工一个任务时,…

相机畸变概述

上节说到了相机模型,那么这节说说相机的畸变 如果有手机爱好者,听到很多测评进行测评的时候,都会提到一个词,广角防畸变,啥意思,举个栗子 来看下信号塔,是不是已经开始歪了,这就是0.6倍,超广角模式下的畸变(其实一倍也畸变,小声BB) 为啥会畸变呢,仔细看镜头,镜头是曲面的,光…

CDN和DNS

目录 宽带,窄带,带宽区别和联系如何计算带宽带宽和网速的区别和联系 CDNCDN的原理CDN的好处CDN和通信行业DNS和CDN的区别与联系用户访问未使用CDN缓存网站的过程为使用了CDN缓存后的网站的访问过程变为 CDN加速服务 DNSDNS对好处公共 DNS114 DNS阿里DNS百…

Mac安装配置Visual Studio Code(vscode)以及Java环境详细教程(初学者必看)

原本博主今天想继续给大家出Java接下来的教程,但是就在昨天我在配置vscode的时候遇到了一些问题,Windows系统的小伙伴配置起来肯定很方便,但是在Mac的小伙伴却显得十分无奈,所以我想给大家出一篇Mac的Visual Studio Code配置以及Java环境搭建教程! 博客主页:Jovy.的…

C#中调用MATLAB的函数形式的m文件

问题介绍 需要在C#编写的winform中调用matlab写的函数类型的m文件,并在winform中读取m文件的返回值。 之前也写过类似的博客,请参考:C#中调用MATLAB执行MATLAB代码 本篇文章算是之前文章的更新版本吧。 步骤 1 创建C#的winform项目 在桌面…

STM32单片机(九)USART串口----第一节:USART串口协议

❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要…

【博弈论笔记】第二章 完全信息静态博弈

文章目录 第二章 完全信息静态博弈2.1 基本分析思路和方法2.1.1 上策均衡2.1.2 严格下策反复消去法2.1.3 划线法2.1.4 箭头法 2.2 纳什均衡2.2.1 纳什均衡的诞生2.2.2 纳什均衡的定义2.2.3 纳什与严格下策反复消去法2.2.4 一致预测性质 2.3 无限策略博弈和反应函数(…

性能测试的具体流程

以下是一个基本的性能测试过程,旨在帮助了解性能测试的具体流程和步骤。 1. 确定性能测试目标及指标 首先,需要确定性能测试的目标和指标,包括响应时间、吞吐量、并发用户数等方面。这些指标应该根据业务需求和用户场景进行设定&#xff0c…

Unity-Android常见的那些骚操作

老规矩,先安装unity,再安装安卓平台,安装AndroidStudio ,安装JDK,安装SDK 配置JDK 环境,在Unity里面引用SDK 和 JDK Unity中的Android Build Support下载 在Unity中的File>Building Settings>Android>Open Download Pag…

VMware Ubuntu忘记密码修改密码

目录 一、重启 二、重置密码 三、补充 一觉醒来,刚想去虚拟机爽一下Linux却发现忘记了密码? 没关系,这里有详细的步骤帮你修改密码! 一、重启 重启虚拟机,在进度条未读完前,长按shift进入GRUB系统引导…

56 KVM工具使用指南-安装 LibcarePlus

文章目录 56 KVM工具使用指南-安装 LibcarePlus56.1 安装软件依赖56.2 安装 LibcarePlus56.3 查看安装是否成功 56 KVM工具使用指南-安装 LibcarePlus 56.1 安装软件依赖 LibcarePlus 运行依赖于 libunwind、 elfutils 和 binutils,在配置了 yum 源的 openEuler 系…

SpringSecurity中授权时fastjson序列化问题

最近在复习Spring Security&#xff0c;复习的鉴权的时候出现问题。26.封装权限信息_哔哩哔哩_bilibili 如果是从B站中看到&#xff0c;直接说问题可能出现的原因&#xff1a;可能是private List<String> authorities;中的权限信息命名不规范&#xff0c;去掉get&#x…

Python基础篇(十一):装饰器

装饰器 前言1. 装饰器的定义2. 装饰器的应用3. 装饰器的语法4. func(*args, **kwargs) 前言 装饰器是Python中一种强大的函数或类修饰机制&#xff0c;用于在不修改原始函数或类代码的情况下&#xff0c;对其进行功能扩展或修改。装饰器基于函数式编程的概念&#xff0c;通过将…

【计算机网络详解】——知识点复习(期末不挂科版)

配套视频&#xff1a;湖科大教书匠 配套教材&#xff1a;计算机网络&#xff08;第8版&#xff09; 谢希仁 根据学习通要求“掌握”的部分总结的&#xff0c;有亿点点长 &#xff0c;时间来不及就掌握画 ☆ 的就好啦 目录 &#x1f552; 1. 概述&#x1f558; 1.1 三种数据交换…

[英语单词] gated; cycle gated

gate *[geit] n. 门, 牌楼, 大门, 通道, 闸 vt. 装门于 门的原始作用就显示出来了&#xff0c;就是为了在主人自由进出的同时&#xff0c;保护私有财产的安全。 如果加了-ed&#xff0c;就代表使用了动词性&#xff0c;相当于给谁谁加了一个门&#xff0c;限制其行为的自由度。…

SpringBoot 如何使用 ACL 进行访问控制

SpringBoot 如何使用 ACL 进行访问控制 在现代 Web 开发中&#xff0c;访问控制是一个非常重要的问题。访问控制可以帮助我们保护敏感信息、防止恶意攻击、维护系统安全等。Spring Security 是一个非常流行的安全框架&#xff0c;它提供了一系列的认证和授权功能&#xff0c;可…