“AI 技术+人才”如何成为企业增长新引擎?戳此了解>>> 了解详情
写点什么

送你一个编程教练可好?你应当了解的 Amazon CodeGuru

  • 2020-02-27
  • 本文字数:3484 字

    阅读完需:约 11 分钟

送你一个编程教练可好?你应当了解的 Amazon CodeGuru

前言

去年 12 月初,我在拉斯维加斯参加了一年一度的 AWS re:Invent 大会。会议上最激动人心的时刻当属主题演讲中发布的各具特色的新服务。这一届大会新服务的发布数量超过了 70 个。但是当我问到一个国内去参会的朋友对哪一个新服务最感兴趣的时候,他给我的答案却是:“除了 Amazon CodeGuru, 其它都记不得了。” 虽不能完全苟同,但我也觉得 CodeGuru 确实是最特别的一个。


究竟这个 CodeGuru 是什么?

作为一个 Java 程序员,我们难免会经常遇到这样的一些错误信息“Unclosed String Literal”,”Illegal Start of an Expression”, ”Incompatible Types“,“Cannot Return a Value From Method Whose Result Type Is Void”以及“Non-Static Variable … Cannot Be Referenced From a Static Context”等等。也许我们已经习惯了依赖 IntelliJ IDEA 、Eclipse 或者 NetBeans 来帮助我们完成代码在语法层面的检查。尽管 Java 作为一个强类型语言,静态分析的工具已经非常成熟,但是对于关键业务应用,或者复杂的代码还是需要人工介入以进行代码审核。但即使是资深的 Java 程序员受限于经验和能力的不足,也很难通过静态的方法将潜藏于代码中的问题逐一识别出来。随着敏捷开发思想的普及,以及微服务架构的成熟,代码中的缺陷带来的挑战引出了一个新的需求 – 能否有一款更智能、脱离静态语法分析的局限来实现高质量应用的代码分析工具?


这就需要引出今天的主角 Amazon CodeGuru。这里提到的 CodeGuru 是 AWS 的一款新服务,与 Windows 开发人员熟悉的 codeguru.com 完全不是一回事,切莫混淆。关于 CodeGuru 服务,借用官方文档的描述就是 –

col 1

__“ Amazon CodeGuru 是一种机器学习服务,可自动执行代码审查,并提供应用程序性能建议。它可以帮助您找到影响应用程序性能的最昂贵的代码行,并全天候帮助您排查问题,然后为您提供修复或改进代码的具体建议。”


可以说,这款服务是基于 Amazon 数十年软件开发的知识和经验积累而成的、利用现代机器学习的技术,用于自动代码审查和应用程序性能分析的工具。CodeGuru 的机器学习模型来源于 Amazon 自有的代码库进行训练所得。这些代码库包括大约数十万个 Amazon 内部的项目,以及 GitHub 上的 1 万多个开源项目。数万名 Amazon 开发人员凭借数十年的代码审查和应用程序分析经验为 CodeGuru 的训练提供了最有益的帮助。这个工具因其托管于 AWS 云计算之上,会随者越来越多的用户在生产环境中的使用反馈而不断的搜索优化、不断的发展。从功能上来看,它会自动检查代码以查找通常难以发现的缺陷,并提供了可行的建议来解决已发现的问题 ,并帮助在运行的应用程序中找到最有希望的优化方法。与人工的代码审核比较起来,CodeGuru 像不像一位任劳任怨的全时工作的老师傅!

col 1

“It’s like having a dedicated engineer on call 24/7”

Amazon CodeGuru 服务中有两个重要的组件,第一个组件是静态代码分析器,叫做 Amazon CodeGuru Reviewer;第二个组件是 Amazon CodeGuru Profiler,用于探查在 EC2、ECS、EKS 以及 Fargate 上运行的由 Java 开发的应用程序。

Amazon CodeGuru Review

CodeGuru 的功能之一是代码审核。 在这个环节中,它能够标记出来源代码中的严重的缺陷和可靠性的问题。 不同于以往的针对程序的质量分析工具,CodeGuru 的能力建立在机器学习之上。例如,CodeGuru Reviewer 使用规则挖掘和监督机器学习模型(结合使用逻辑回归和神经网络)进行训练。在训练期间,为了检测与最佳实践的偏差,它会挖掘 Amazon 代码库中包含 AWS API 调用的拉取请求。它会查看代码更改并针对文档数据进行交叉引用,同时也会并行挖掘文档数据。这将创建新的最佳实践模型,当 Reviewer 审查代码以提供建议时就将使使用这些模型。而针对于另外一个组件 CodeGuru Profiler,则是由 Amazon 性能优化工程师进行训练,用于分析 Amazon 内部使用的数万项服务。CodeGuru 的使用者可以决定是否接受 CodeGuru 提供的每项建议,使用者提供的反馈越多,它给出的建议就越好。这就是 CodeGuru 神奇能力的秘密!


对于使用 AWS API 的开发人员,它会检测与使用 AWS API 和开发工具包的最佳实践的偏差,标记可能导致出现生产问题的常见问题,例如检测分页缺失或批处理操作的错误处理。它会检测并发性问题(例如原子性违规和使用非线程安全的类),即使经验丰富的程序员也很难发现这些问题。它会检测资源何时未正确关闭,并因此而引发延迟问题和中断。它还会识别正确的输入验证,未经审查的输入可能会导致注入攻击或拒绝服务等问题。

col 1

例如并发问题 –


col 1

例如分页问题 –


col 1

例如敏感信息泄漏问题 –


注:Amazon CodeGuru Reviewer 目前支持 GitHub 和 AWS CodeCommit 存储库中存储的 Java 代码。

总结一下,CodeGuru Reviewer 解决的核心领域包括了以下几项:


  • AWS 最佳实践:正确的使用 AWS API

  • 并发:并发结构的正确实现

  • 资源泄漏:正确的资源处理方式

  • 敏感信息泄漏:泄漏个人身份信息、账户信息等

  • 通过数据挖掘发现缺陷代码:通常难以发现的缺陷


CodeGuru Reviewer 的实际工作流程是怎样的?使用的第一步就是登录 AWS CodeGuru Reviewer 的管理控制台,然后可以关联 GitHub 或 AWS CodeCommit 上的现有代码的存储库。完成一次性设置后,CodeGuru Reviewer 会开始启动对代码的分析,并直接在拉取请求或代码存储库中提供代码改进建议。下面这张图解释了这个过程。


col 1

“CodeGuru Reviewer 可帮助我们捕捉潜伏在关键代码段中为时已久的争用状况。人工审查人员可能会漏掉此问题,因为它不在我所更改的代码范围之内…有此服务把关真是太棒了,不仅可提高我们的代码质量,而且无需设置或中断。”

– 负责 AWS 生成器工具的高级软件开发工程师 Mike Thompson

Amazon CodeGuru Profiler

CodeGuru Profiler 关注于解决应用程序性能带来的挑战和问题。如果我们的应用程序性能不好,可能会对关键业务产生重大影响,例如,它可能使我们的交易失败,使得客户蒙受损失,并且让用户有了糟糕的体验。这还会导致系统架构的成本居高不下,并且可能会深刻影响到企业的发展。应用程序性能不佳的原因归起来,大多与分布式应用的复杂性有关。对于许多开发人员来说,这是个巨大的挑战,显然并非人人都是分布式应用的专家。


CodeGuru Profiler 可以帮助开发人员重新考虑性能优化的问题。过查找最昂贵的代码行,基于其自身的训练来查找性能优化的方法,并给出关于如何修复代码的建议。它是为生产系统而构建的,设计的目标之一就是不会影响当前应用的性能。它可以连续地运行在生产环境中,并连续地进行性能的分析。目前,它仅支持用 Java 编写的应用程序。它的应用环境应该是这个样子的 –


使用 CodeGuru Profiler

要开始使用 CodeGuru Profiler,需创建一个性能分析组,并为这个组命名;记得更新 Profiler 代理使用的 IAM 角色;为 Java 应用程序设置依赖项。最后通过添加 AWS 提供的几行代码来启动应用程序中的 Profiler 代理 到应用程序当中(如果有兴趣尝试,这里是一个样例的链接:https://github.com/aws-samples/aws-codeguru-profiler-sample-application)。CodeGuru Profiler 还为应用程序提供了可视化的展现。必不可少的,CodeGuru Profiler 还针对常见的性能问题提供了自动建议。


col 1col 2

col 1

按照 CodeGuru Profiler 的建议删除这些克隆值之后,CPU 使用率大幅降低 – _同步队列降低了 40%,异步队列降低了 67%_。

– 负责 Amazon.com 目录管理服务的高级软件开发工程师 Rajesh Konatham

结语

Amazon CodeGuru 已经被数百名 Amazon 开发人员使用了很多年。它已经帮助 Amazon 改进了许多应用程序。在 2017 年 Prime Day 的活动中,使用了 Amazon CodeGuru 之后 系统 CPU 的利用率提高了 325%,而成本却降低了 39%。这可真是个了不起的成果啊!我非常期待去使用它。



作者介绍:费良宏,AWS Principal Developer Advocate。在过去的 20 多年一直从事软件架构、程序开发以及技术推广等领域的工作。他经常在各类技术会议上发表演讲进行分享,他还是多个技术社区的热心参与者。他擅长 Web 领域应用、移动应用以及机器学习等的开发,也从事过多个大型软件项目的设计、开发与项目管理。目前他专注与云计算以及互联网等技术领域,致力于帮助中国的 开发者构建基于云计算的新一代的互联网应用。


本文转载自 AWS 技术博客。


原文链接:https://amazonaws-china.com/cn/blogs/china/how-about-sending-you-a-programming-coach-what-you-should-know-about-amazon-codeguru/


2020-02-27 16:59617

评论

发布
暂无评论
发现更多内容

Web开发小妙招:巧用ThreadLocal规避层层传值

华为云开发者联盟

Java 前端 web开发

java零基础入门-Scanner类

喵手

Java’ 7月月更

小程序能运行在自有App中,且实现直播和连麦?

Speedoooo

小程序 直播 移动开发 小程序容器 连麦

阿里云易立:云原生如何破解企业降本提效难题?

阿里巴巴中间件

阿里云 架构 云原生

【写给初发论文的人】撰写综述性科技论文常见问题

左手の明天

论文阅读 论文 论文写作 研究论文 论文撰写

TiFlash 源码阅读(四)TiFlash DDL 模块设计及实现分析

PingCAP

🚩🚩🚩建议收藏!!Flutter状态管理插件哪家强?请看岛上码农的排行榜!

岛上码农

flutter ios 安卓 移动端开发 7月月更

新一代云原生消息队列(一)

技术小生

云原生 消息队列 7月月更

云原生混部最后一道防线:节点水位线设计

阿里巴巴中间件

阿里云 云原生 中间件 混部

HAVE FUN | “飞船计划”活动最新进展

SOFAStack

微服务架构 开源软件 新手引导

从0开始创建小程序

小恺

7月月更

华为小米互“抄作业”

科技新知

“去虚向实”大潮下,百度智能云向实而生

科技新知

Flutter3.0了,小程序不止于移动应用跨端运行

Speedoooo

flutter 小程序 移动开发 小程序容器 跨端运行

枚举通用接口&枚举使用规范

靠谱的程序员

枚举 企业应用 企业级应用

用头像模仿天狗食月

急需上岸的小谢

7月月更

长安链学习笔记-证书研究之证书模式

长安链

IDC发布中国区块链BaaS市场份额报告,腾讯云稳居TOP2

科技热闻

企业数字化转型,低代码是“趋势”还是“陷阱”?

云智慧AIOps社区

大前端 低代码 云开发

张平安:加快云上数字创新,共建产业智慧生态

华为云开发者联盟

云计算 后端 SaaS 华为云

抖音或将推出独立种草社区平台:会不会成为第二个小红书

石头IT视角

阿里云中间件开源往事

阿里巴巴中间件

阿里云 开源 中间件

【刷题记录】2. 两数相加

WangNing

7月月更

Linux 下的传统 IPC 通信原理

北洋

Andriod 7月月更

企业中台建设新路径——低代码平台

力软低代码开发平台

解密函数计算异步任务能力之「任务的状态及生命周期管理」

阿里巴巴中间件

阿里云 中间件 异步 函数计算

1500万员工轻松管理,云原生数据库GaussDB让HR办公更高效

华为云开发者联盟

数据库 后端

leetcode 53. Maximum Subarray 最大子数组和(中等)

okokabcd

LeetCode 动态规划 数据结构与算法

MetaForce原力元宇宙开发搭建丨佛萨奇2.0系统开发

开发微hkkf5566

从解析HTML开始,破解页面渲染时间长难题

华为云开发者联盟

html 前端 web开发 网页

SchedulX V1.4.0及SaaS版发布,免费体验降本增效高级功能!

星汉未来

DevOps 运维 k8s IT FinOps

送你一个编程教练可好?你应当了解的 Amazon CodeGuru_行业深度_AWS_InfoQ精选文章