写点什么

送你一个编程教练可好?你应当了解的 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:591044

评论

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

微服务编程范式

看山

微服务 范式 签约计划第二季

第二周学习总结

Vincent

极客时间 极客大学 作业

架构师训练营第十一周总结

张明森

开源流数据公司 StreamNative 推出 Pulsar 云服务,推进企业“流优先”进程

Apache Pulsar

Apache Pulsar 消息系统 消息中间件

第11周作业

赵龙

沟通是一门艺术

石云升

情绪控制 沟通艺术

一起学MySQL性能优化

xcbeyond

MySQL 性能优化 MySQL性能优化

Apache 软件基金会顶级项目 Pulsar 达成新里程碑:全球贡献者超 300 位!

Apache Pulsar

Apache Apache Pulsar 消息系统 消息中间件

区块链数字钱包定制开发,数字货币钱包开发费用

13530558032

云算力挖矿平台APP,一站式云算力挖矿系统开发

13530558032

一次开零售店的经历(2)

石云升

零售店

薪水真的不是工作的全部

escray

学习 面试

一次开零售店的经历(1)

石云升

零售店

第11周学习总结

赵龙

有益思考一则:框架性思维

石君

学习 方法论

架构师第十一周作业及总结

傻傻的帅

跨过语言银河,构筑智能鹊桥:百度NLP的十年、今夕与未来

脑极体

ArCall 升级丨新增多项功能,可支持多人在线语音

anyRTC开发者

音视频 WebRTC 直播 RTC

安全系列之——主流Hash散列算法介绍和使用

诸葛小猿

hash 散列函数 md5 sha1 murmurhash

银行热衷拿区块链专利 背后有何意图

CECBC

区块链 银行

架构师训练营 -- 第11周作业

stardust20

游戏夜读 | 什么才值得纪念?

game1night

Spring系列篇:Spring容器基本使用及原理

简爱W

week11 作业

Geek_196d0f

悬挂引用是如何被Rust消灭的?

袁承兴

rust 内存模型 指针 引用 泛型

智能化转型将加速数字经济变革

CECBC

人工智能 数字经济

架构师训练营第十一周作业

张明森

微服务的基建工作

看山

微服务 基础设施 签约计划第二季

第二周作业

Vincent

极客时间 作业

论商品促销代码的优雅性

架构师修行之路

架构师训练营第11周作业

Bruce Xiong

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