让性能腾飞!亚马逊云科技的 Java 云端之旅

在上篇文章中,我们为大家介绍了亚马逊的 Java 生态及丰富的开发工具、框架。本文将分享亚马逊的 Java 架构、迁移途径,并分享一个具体实例,介绍如何使用机器学习来构建 Java 应用和提升 Java 性能。

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

Java 开发的平台之选

1 为 Java 应用提供多种开发和部署选择

  1. 计算:EC2、Lambda、ECS、EKS、Fargate
  2. 存储:S3、Elastic File Service
  3. 网络:Classic Load Balancer、Application Load Balancer、Network Load Balancer、Security Groups、Virtual Private Cloud
  4. 数据库:RDS、DynamoDB、Aurora、Neptune
  5. 管理:Auto Scaling、CloudFormation、Systems Manager、CloudWatch

众所周知,现在很多开发者基于云平台进行 Java 应用的开发和部署。亚马逊云科技提供了一整套完善的选项来帮助开发者更好的开发。例如计算领域的虚拟机、容器、无服务器,存储领域的对象存储和文件系统;网络领域不同层级的负载均衡和访问控制机制;数据库领域的各种关系型和非关系型数据库;以及全方位多角度的管理和监控。

2 执行环境

在 Java 的执行环境方面,开发者通常会选择三个主要的计算方式,包括虚拟服务器 (Amazon EC2)、容器 (Amazon ECS、EKS 和 Fargate)、无服务器计算 (Amazon Lambda)。无论是哪种方式,亚马逊都在不断添加新的能力来帮助开发者进行更好的 Java 构建。

3 无服务器应用

无服务器计算在近年来成为越来越多开发者的首选。Amazon Lambda 管理所有的基础设施,以将代码放在可用性高的容错型基础设施上运行,从而使开发者能够专注于构建有差别后端服务。使用 Lambda,开发者不必在补丁发布时更新底层操作系统 (OS),或随着使用量的增加而为调整大小或添加新服务器担心。Amazon Lambda 无缝部署代码、执行所有的管理、维护和安全补丁操作,并通过 Amazon CloudWatch 提供内置记录和监控。

使用 Amazon Lambda,不需要了解任何新语言、工具或框架。开发者可以使用任何第三方库,甚至是本机库。你还可以将任何代码(框架、软件开发工具包、库等)打包为 Lambda Layer,并在多个函数之间轻松进行管理和共享。Lambda 原生支持 Java,并提供 Runtime API,允许开发者使用任何其他编程语言来编写函数。

Lambda 函数是在完全托管的运行时环境中执行函数代码,因此每次应用程序扩展以创建新的执行环境时都会进行初始化。在 2022 年 re:Invent 大会上,新功能 Amazon Lambda SnapStart 正式发布。利用 SnapStart 可将 Lambda 函数冷启动持续时间降低至不到 200 毫秒,延迟率降低 90%,使得冷启动跟非冷启动(缓存命中)几乎没有区别。目前这项功能适用于使用 Corretto 运行时的 Java 函数,包括 Spring Boot、Quarkus、Micronaut 和其他 Java 框架的应用。

Java 应用迁移上云

开发者除了选择云平台直接进行 Java 开发之外,还有很多遗留的应用可能是在本地或者在其它环境中运行,而越来越多的开发者需要将这些 Java 应用迁移上云。而基于 Java 上云的现代化应用改造也是亚马逊逐步帮助企业和开发者迁移应用上云的重要途径。

 传统的 Java 企业应用架构

上图传统的三层应用架构,包括表示层、业务逻辑层、数据层,分别对应 Web 服务器、应用服务器、数据库服务器,也有传统的应用软件帮助开发者构建传统的三层架构,像 JavaBeans、Web Services 等等。

 现代三层应用架构

随着云服务架构的不断提升和不断演进,整体上讲,与传统的三层架构也有非常匹配的对应关系。虽然同样包括表示层、业务逻辑层和数据层,但是实现方式有非常明显的变化。

首先在三层之间,是通过 API 进行通信。其次在业务逻辑层通过事件的方式进行消息的传递,同时在系统架构中构建消息队列实现后端数据的通信和交互。另外数据层面,也有面向不同工作负载的关系型和非关系型数据库选项来契合前端的应用。

通过事件、消息队列等技术形成了现代化三层架构。那么如何将传统三层应用架构向现代化三层架构迁移呢?亚马逊云科技已经为大家提供了方便快捷的迁移方案。通过 App2Container,可以将已有的应用进行容器化,并且迁移上云。在 A2C 产品中,其核心首先是容器化现有应用,其次支持不同的部署源,比如一些本地环境,像 EC2 或者 VM 等等,把他们的应用以容器的方式在云端部署。通过将 Java 应用进行容器化处理,部署的目标是基于亚马逊的容器服务,包括 ECS、EKS、ECR 等等。结合开发者工具进行整体的开发生命周期管理,使得整个云端容器化部署更加便捷,也使得传统 Java 应用向云端迁移获得更加良好的效果。

 App2Container – 容器化现有应用并将其迁移上云

通过机器学习加速 Java 开发

机器学习一直是近年来开发者非常关注的话题,我们也在探索如何通过机器学习帮助开发者尤其是 Java 开发者进行更快更好的高质量开发,这也是亚马逊云科技一直以来着力解决的问题,希望能够为开发者提供便利。

 Java 应用开发之旅

上图是典型的 Java 应用开发之旅。包括代码编写、代码审核、安全和操作审核、观测和漏洞缓解。通常上述四个阶段构成了典型的 Java 应用开发之旅。其实也适用于其它语言的开发过程。

在这个过程中,我们也发现了一系列挑战,大量消耗开发者的时间和精力:

  • 如何帮助开发者识别有问题的代码,尤其是编译通过,但运行结果不符合预期的情况下,如何找到有问题的代码,其实是非常耗费精力的过程;
  • 在行业内部或者标准化的环境中有些代码分析工具,缺乏高质量的代码分析环境,也缺乏很好的实践的集成,使得开发者在使用这些工具时感到费时费力。
  • 如何发现并修复昂贵的代码行,这同样值得关注。

而亚马逊云科技一直致力于解决上述问题,在 Java 开发的后三个阶段,已经引入了机器学习的审核和观测机制,包括 Amazon CodeGuru 和 Amazon DevOps Guru,帮助开发者进行代码审核、安全操作审核,以及观测和漏洞缓解。通过这两个人工智能驱动的代码服务,可以极大地提高开发者的效率,来帮助开发者更好地发现代码中的问题,提升代码的性能。

 ML 辅助的审核和观测

 Amazon CodeGuru

Amazon CodeGuru 是基于机器学习的代码审核和性能建议服务。它本身分为两个部分,第一个部分叫做 CodeGuru Reviewer (静态代码分析器),第二部分叫做 CodeGuru Profile (代码的性能分析器),通过这两大功能可以帮助开发者进行具有智能建议的内置代码审查、检测和优化昂贵的代码行以及识别延迟和性能改进。

 Amazon CodeGuru Reviewer

Amazon CodeGuru Reviewer 主要用于代码审核,通过亚马逊云科技的最佳实践,来帮助开发者更加正确地使用 Amazon API。同时可以检测很多潜在的问题,比如如何构建并发机制、如何审核避免资源泄漏、避免敏感信息泄露,以及通过数据挖掘的方法来发现缺陷代码,从而提升代码质量。

 Amazon CodeGuru Reviewer 代码审核效果

上图为 Amazon CodeGuru Reviewer 代码审核效果。整个 Reviewer 分为四个层级,包括代码、建议、修复、开发者反馈。后端通过机器学习的审核机制,可以推荐相关的修改建议,开发者可以根据修改建议对代码进行针对性地修复来提升代码质量。

而对于 Amazon CodeGuru Profiler,它是性能分析可视化,在整个性能分析可视化过程中也包括四个部分:Why、What、How、Where。通过性能分析可视化,生成非常直观的火焰图,其中会针对开发者的代码进行机器学习性能改进分析。

其实还有一个有趣的问题,就是如何使用机器学习来编写代码。其目的不是为了取代开发者,而是帮助开发者进行更快和更好的构建。

在 2022 re:MARS 上,亚马逊云科技推出了全新的服务:Amazon CodeWhisperer,它是机器学习驱动的编码伴侣。

这项服务可以从纯英文的注释中生成代码,也可以生成完整的函数。通过它还可以生成即用型代码。作为扩展,CodeWhisperer 可用于主流 IDE 中。下图为使用机器学习生成 Java 代码的典型示例。

 CodeWhisperer

对于 CodeWhisperer,除了 Java 之外,还支持众多的语言。在 IDE 方面,也支持集成目前主流的 IDE,包括 JetBrains、VS Code、Visual Studio 等等。同时也集成了亚马逊云科技的一流的 API。帮助开发者既能够利用云服务的高效快捷,又能够在熟悉的环境中进行开发。

更多资源

  • 亚马逊 Java 开发博客

  • 加入亚马逊 Java 的 GitHub 论坛

  • 亚马逊代码示例   

  • 亚马逊 Java 开发者中心

以上就是亚马逊云科技关于 Java 语言架构、迁移以及如何使用机器学习来构建 Java 应用和提升 Java 性能的相关介绍。

欢迎开发者和我们互动,一起共建 Java 社区、Java 生态,在云上更好地进行 Java 应用开发,提升全方位技能。

请持续关注 Build On Cloud 微信公众号,了解更多面向开发者的技术分享和云开发动态!

往期推荐

  • #架构模型最佳实践
  • #亚马逊的开源文化
  • #机器学习洞察

作者王宇博

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

 

 文章来源:https://dev.amazoncloud.cn/column/article/6409b6f1056d1b2cc4cbfde8?sc_medium=regulartraffic&sc_campaign=crossplatform&sc_channel=CSDN

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

怎么高效的通过爬虫获取数据

导语:在当今数字化时代中,获取数据已成为许多企业和个人的重要需求。在快速获取数据时,通过爬虫技术迅速获取网络数据已成为一项重要的技能和技术。然而,在应用爬虫技术前,需要注意一些重要的问题。本文总结了从数据来…

leetcode1.两数之和

个人主页:平行线也会相交 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【LeetCode】 🍓希望我们一起努力、成长,共同进步。 题目链接 给定一个整数数组 nums 和一个整数目标值 target&am…

读写锁原理解读

目录 回顾什么是读写锁 t1 w.lock,t2 r.lock t3 r.lock,t4 w.lock t1 w.unlock t2 r.unlock,t3 r.unlock 写锁上锁流程 写锁释放流程 读锁上锁流程 读锁释放流程 回顾什么是读写锁 读写锁是一对互斥锁,分为读锁和写锁。…

《kafka 核心技术与实战》课程学习笔记(八)

无消息丢失配置怎么实现? Kafka 只对“已提交”的消息(committed message)做有限度的持久化保证。 第一个核心要素是“已提交的消息”。 当 Kafka 的若干个 Broker 成功地接收到一条消息并写入到日志文件后,它们会告诉生产者程序…

知识图谱项目——红色文化之张学良人物知识图谱(Neo4j+vue+flask+mysql实现)

张学良人物简史知识图谱_说明文档 本项目为人工智能专业大三知识图谱课程期末作业。意在完成一个以张学良为背景的红色文化类知识图谱。文末放上本项目的代码地址。 文章目录 张学良人物简史知识图谱_说明文档:rocket:前端:rocket:后端:rocket:中间件:rocket:数据库:rocket:服…

Linux常用命令——free命令

在线Linux命令查询工具 free 显示内存的使用情况 补充说明 free命令可以显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用的内存缓冲区。 语法 free(选项)选项 -b # 以Byte为单位显示内存使用情况; -k # 以KB为单位显示内存使用情况…

【云原生】二进制部署k8s集群(中)搭建node节点

连接上文 在上文已经成功部署了etcd分布式数据库、master01节点, 本文将承接上文的内容,继续部署Kubernetes集群中的 worker node 节点和 CNI 网络插件 1. 部署 Worker Node 组件 1.1 work node 组件部署前需了解的节点注册机制 kubelet 采用 TLS Bo…

设计模式-05.01-行为型-观察者模板

观察者模式【常用】 我们常把 23 种经典的设计模式分为三类:创建型、结构型、行为型。前面我们已经学习了创建型和结构型,从今天起,我们开始学习行为型设计模式。我们知道,创建型设计模式主要解决“对象的创建”问题,…

JavaWeb之tomcarHTTP

1 DOM4j Xml解析 1.1 JAXP  JDK内置,不需要导入第三方jar包,简单工具优先选择。  支持两种解析方式:DOM、SAX 1.1.1 JAXP—DOM 加载xml 生成一个DOM树。获得整个文档的描述对象Document 解析 api 获得工厂 DocumentBuilderFactory –》 …

Android adb shell命令捕获systemtrace

Android adb shell命令捕获systemtrace (1)抓取trace文件: adb shell perfetto -o /data/misc/perfetto-traces/trace_file.perfetto-trace -t 20s sched freq idle am wm gfx view binder_driver hal dalvik camera input res memory -t 时长,20s&a…

通过使用Mybatis插件来实现数据的分页功能

目录 背景一、SpringBoot的后端1、手动拼接SQL来实现2、使用Mybatis插件来实现 二、Vue-cli的前端:请求响应跟踪 三、在使用Mybatis插件进行多表查询(表数大于2)出现的问题1. SQL解决2.后端查询方式改变成嵌套查询 四、 分页总结 背景 分页: 如果一次性的查询全部数据, 响应时…

高级数据结构——平衡二叉树(AVL树)

目录 1. 底层结构 2. AVL数的概念 3. AVL树节点的定义 4. 基本框架 5. AVL树的插入 6. AVL树的旋转 6.1 左单旋 6.2 右单旋 6.3 左右双旋 6.4 右左双旋 7. AVL树的验证 8. AVL树的查找 9. AVL树的删除 10. AVL树的性能 11. 总代码 11.1 AVLTree 11.2 Test.c…

SuperMap GIS基础产品移动GIS FAQ集锦(3)

SuperMap GIS基础产品移动GIS FAQ集锦(3) 【iMobile】网络分析中设置权值字段,如何添加多个权值字段? 【解决办法】通过权值字段集合类(WeightFieldInfos)设置,该类是权值字段信息对象&#x…

【AI】Stable-Diffusion-WebUI使用指南

注:csdn对图片有审核,审核还很奇葩,线稿都能违规,为保证完整的阅读体验建议移步至个人博客阅读 最近AI绘画实现了真人照片级绘画水准,导致AI绘画大火,公司也让我研究研究,借此机会正好了解一下…

django旅游推荐系统-计算机毕设 附源码82884

django旅游推荐系统 摘 要 随着社会的快速发展和人们生活水平的不断提高,旅游已逐渐成为人们生活的重要组成部分,用户能够获取旅游信息的渠道也随信息技术的广泛应用而增加。大量未经过滤的信息在展示给用户的同时,也淹没了用户真正感兴趣的信…

配置NIS服务器及客户端

在服务端安装所需软件包 设置主机名和NIS域名 编辑 NIS服务器主配置文件 最下面编辑访问控制 建立测试用户 配置NFS,否则客户端切换用户时,用户没有家目录 安装NFS所需软件包 Nfs-utils 给两个共享目录权限,编辑NFS配制文件 共享两个目录 重…

【从零开始学习C++ | 第二十一篇】C++新增特性 (上)

目录 前言: 委托构造函数: 类内初始化: 空指针: 枚举类: 总结: 前言: C的学习难度大,内容繁多。因此我们要及时掌握C的各种特性,因此我们更新本篇文章,向…

【数据管理架构】什么是 OLTP?

OLTP(在线事务处理)支持在 ATM 和在线银行、收银机和电子商务以及我们每天与之交互的许多其他服务背后进行快速、准确的数据处理。 什么是 OLTP? OLTP 或在线事务处理允许大量人员(通常通过 Internet)实时执行大量数据…

【SpringCloud-5】gateway网关

网关是干啥用的就不用再说了。 sringcloud中的网关,第一代是zuul,但是性能比较差(1.x是阻塞式的,2.x是基于Netty的),然后有了第二代GateWay,基于Reactor模型 异步非阻塞。 springcloud网关就是一…

C++智能指针

RAII RAII(Resource Acquisition Is Initialization)是一种利用对象生命周期来控制程序资源的技术 不需要显示的释放资源对象的资源在其生命周期类保持有效 通常控制的资源:动态申请的内存、文件描述符、互斥量、网络连接等 在对象构造时…