10 月 23 - 25 日,QCon 上海站即将召开,现在大会已开始正式报名,可以享受 8 折优惠 了解详情
写点什么

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

评论

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

阿里被转载上100W次的Java面试题教程!已助我拿下9家大厂offer

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

宇宙级计算机大佬吐血整理出2224页计算机系统文档(离线版)

Java~~~

Java 架构 面试 TCP 操作系统

封笔之作!阿里P8手写的Java高手是怎样练成的原理方法与实践笔记

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

【Google Cloud】「Contact Center AI」引领我们走向高度智能客服的时代

码界西柚

话题王者 8月日更 Contact Center AI Google Cloud

卧 底 人 类 高 质 量 A I 公 司

白洞计划

阿里五位大佬总结操作系统+程序员必知硬核知识离线版pdf火了

Java~~~

Java 架构 面试 操作系统 网络

GitHub惊现!全网首份开源的深入理解JVMG1GC的算法与实现手册

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

MySQL到ClickHouse的高速公路-MaterializeMySQL引擎

华为云数据库小助手

sql GaussDB dba 华为云数据库 DAS

别再找我给你重启程序啦!让你supervisor帮你搞定

Java 程序员 架构 后端

Vue进阶(八十五):vue-router Hash模式跳转及懒加载

No Silver Bullet

Vue 路由 8月日更

Github惊现神作,这份算法宝典让你横扫各大厂算法面试题

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

不愧是阿里内部“SpringCloudAlibaba学习笔记”这细节讲解,神了

Java 程序员 架构 微服务 计算机

良心!鹅厂强推的SpringCloud、Nginx高并发编程

Java~~~

Java nginx spring 架构 面试

牛皮了!华为世界顶级Linux大牛总结出了3788页进阶笔记

Java~~~

Java Linux 架构 面试 运维

阿里P8整理出SQL笔记:收获不止SOL优化抓住SQL的本质

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

五分钟搞定Docker安装ElasticSearch

咔咔

Docker 死磕Elasticsearch

2021预备秋招:Java面试必看的1000道面试解析,助你通过大厂面试

Java 程序员 架构 面试 后端

在GitHub发布秒获百万访问!就凭这份Java程序性能优化实战笔记?

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

八家知名大厂联合手写的Java面试手册刚上线!竟就到达巅峰?

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

千金难求!火遍GitHub的这份阿里Java面试汇总已上热搜

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

2W字!详解20道Redis经典面试题!(珍藏版)

Java redis 架构 后端 计算机

技术干货 | 应用性能提升 70%,探究 mPaaS 全链路压测的实现原理和实施路径

蚂蚁集团移动开发平台 mPaaS

压测 网关 移动开发 mPaaS

Python代码阅读(第22篇):从源字典映射出新字典

Felix

Python 编程 Code Programing 阅读代码

爆料!前华为微服务专家纯手打500页落地架构实战笔记,已开源

Java~~~

Java spring 架构 面试 微服务

Github上标星250k的阿里Java面试复盘手册,看完竟如此的无敌?

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

啥?阿里DBA团队总监把MySQL 性能调优 金字塔,写进了800页笔记?

Java~~~

Java MySQL 数据库 架构 面试

脱钩!打工人都觉得香的Java程序员306道面试秘笈,爆肝

Java~~~

Java spring 架构 面试 微服务

IM技术分享:万人群聊消息投递方案的思考和实践

JackJiang

即时通讯 IM 群聊

接口管理进阶-环境变量的使用

CodeNongXiaoW

大前端 测试 后端 接口文档 接口管理

阿里内部流传的JDK源码剖析手册!GitHub已获上千万的访问量

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

vivo全球商城时光机 - 大型促销活动保障利器

vivo互联网技术

电商平台 优惠券 亿级架构设计 促销系统

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