亚马逊是如何进行软件开发的呢?如果你确实对这个话题感兴趣,不妨邀请三五好友,订上几个披萨,然后一起坐下来观看这个对Ken Exner的精彩访问,他是AWS开发者工具部的部门经理。这里着重强调Ken来自工具部,是因为毕竟每一个行业的进步都需要更好的开发工具。

本访问强调了三个关键主题:细化团队、自动化和以客户为导向。

关键思路:

通过细胞分裂的方式来实现规模增长。团队以单个服务为单位分解成更小的团队。EC2一开始也只不过是七八个人的小团队。

上述引文很好地体现了这三个主题,实际上,它也是AWS能够笑傲公共云市场的关键因素。亚马逊根据客户需求,从开发底层不断分拆出新的团队,从而增长了其自身规模。

如果你想要参考一个实例,不妨收听一下重型网络433:深入AWS中转网关。这个讲座详细介绍了一个复杂的AWS功能(中转网关)是如何从客户需求发展而来的。

随着顾客需求的不断增大,AWS也在不断推出更多的产品,不知不觉AWS已经走在了公共云行业的前列。

下面是整个采访的一些总结:

  • 亚马逊喜欢细化团队。过去亚马逊内部只有一个统一的组织和软件架构(perl/mason/c++),但随着规模的扩大这个模式很难再发挥作用,于是他们将这个架构按照单独服务的形式进行了重构,整个组织也全部分拆成了小于十人的小团队。团队本身是完全独立的,他们提供一个端到端的服务,并且负责所有服务相关的工作:与客户接触、开发、测试以及后续的技术支持等。

  • 亚马逊钟爱自动化。亚马逊开发部门几乎自动化了所有事情:构建、发布以及部署。每一次提交的变更都自动推送到生产环境,这一开始很令大家担心,但其实无非就是把手工做的工作自动化了而已,使其每次都以相同的方式执行。为确保证生产环境正常进行,我们在自动化过程中增加了很多不同的测试:集成测试、基于浏览器和网络的测试以及负载测试等;我们也监测了自动化的整个过程。结果表明,通过自动化我们可以更频繁更及时地推出更新,从而可以做到更多的、质量更好的发布。

  • 亚马逊实现了滚动式部署。部署一直是一个很打击人的事情,不论是预生产还是在生产部署,我们需要找出每一次失败的原因。对此,亚马逊内部实现了滚动式部署。首先将服务部署一个AZ中的一台机器上,如果部署失败,则回滚本次操作;部署成功,则部署到另一个AZ,进而扩展到更多的AZ,更多的地区;一旦发现问题,则回滚到前一个可正常工作的版本。

  • 亚马逊推崇安全为先的开发模式。开发人员需要像安全工程师一样思考,这是亚马逊文化的一部分。工程师同时也必须是开发人员、操作人员、架构师、测试人员和安全专家,为此亚马逊为开发者提供了学习所有技能的机会。罗伯特·海莱应该很喜欢这种模式,毕竟他主张人类应该掌握尽可能多的技能。在亚马逊DevOps也称作DevSecsOps,因为安全已经完全融入到了整个全栈开发流程。

  • 开发人员需要为新项目架构和安全模型负责。安全模型由安全工程师进行审查。每个开发人员都需要负责自己代码的安全隐患,因为他们离问题最近,所以也最有可能发现问题;正式开发中,代码提交会被审查,同事在提交之前也需要静态分析并给予反馈;构建过程中,也存在自动静态分析;最终发布流程,会有更多的检查,也会有金丝雀监视器对部署进行全方位测试。

  • 检查无处不在,整个生产环节处处都有检查。亚马逊为此制定了各种不同的政策。如果我们可以检查一个流程,那么我们就可以确定它是否遵循了最佳实践。而如果我们能够描述这个最佳实践,那大家就可以针对流程的方方面面制定规则。作为一个组织领导者,我们可以为团队制定规则,例如每个新提交必须达到70%的单元测试代码覆盖率才能部署。我们也有针对整个AWS部门的规则,例如不能同时部署到所有区域(特殊情况下可以,详情见相关信息)。我们需要使用规则来阻止那些错误的做法。规则在团队级别执行、也可以在部门或公司级别。这种检查能够避免大家犯一些常见的错误。亚马逊通过多年的实践经验积累,已经建立了一个非常有效的工作流程,避免了开发上的很多弯路,开发人员不必再走试错和汲取教训这一艰辛之路了。通过对这个最佳实践的自动化实现,亚马逊保证了每次都能最优地完成全部工作流程。

  • 团队中的开发人员对架构负责,而不再由架构师来完成。一旦团队有了一个架构,就由架构师或首席工程师对其评估。首席工程师的职责是审查和培训,而不是设计架构。安全方面也是如此,安全工程师的角色不是设计安全模型,而是审查开发人员创建的安全模型。测试也是如此。亚马逊花费了很多时间在内部培训上,因为他们希望开发人员能够主导一切。

  • 亚马逊需要领导者时刻做好表率作用。我们知道在亚马逊运营很重要,这是因为我们看到领导者的确很重视它。要想员工认真对待某件事情,领导者就必须先认真对待。例如,每个团队都必须在周会上展示他们当前的工作安排,每一个细节都需要给出解释。

  • 最好的计划方式来自底层开发。直接开发产品的团队也最接近客户。他们知道客户的需求,因此应该由他们告诉亚马逊该做什么。亚马逊每年需要提交两个文档OP1和OP2(即Operating Plan运营计划)。每个开发组都需要提交一份关于下一年计划的6页文档。在计划书中,团队需要列明所需要的常规资源和新增加资源,并注明资源用途。这6页商业计划书将会自下而上呈现给公司各级组织。经理们会从所有团队计划书中归纳出一份新的6页文档,并上报给他们的管理层。最终报告会一直上交到贝佐斯手中(CEO),在做出最终决策后,资源下发给各个团队。

  • 管理层需要发挥监督作用。尽管最接近客户的团队往往能够提供最好的创意,但这些创意需要管理层的仲裁和判断。

  • 每个团队都有目标考核。公司会根据团队计划分配相应资源,整个过程会被跟踪管理。每个团队都被认为是一个创业公司,而管理层则是董事会,他们通过审查和衡量目标进度来管理所有团队。

  • 团队可以有专家。这些专家可以有不同的技能组合,像一个Web开发、SE(系统工程师)、PM(项目管理)、文档编写者甚至是营销人员。

  • 每个团队都是独立的,这也增加了沟通和达成共识的难度。由于很难及时沟通,亚马逊通常会存在两个甚至多个相同的产品计划,但这总比没有计划要好,毕竟这仍在可控风险内,可以随后加以修正,但最好不要拖延计划执行。团队一致性上则通过内部重构来解决,公司会创建另一个团队和服务来处理这些额外的责任。

  • 你可以说服任何一个团队去协助你的计划,前提是你能够说服他们。在年度规划过程中,公司性决策则是由上向下驱动。例如,如果公司要进入一个新的区域,每个团队必须为此做好计划。

当看到一个公司高层在解释其公司的软件开发流程时,我总觉得很奇怪。作为一个从业多年的个人开发者,我发现管理层其实并不需要知道工作是如何实现的。让我惊讶的是,根据下面reddit的讨论思路,很多来自亚马逊的员工也同意我这个观点。

相关信息

  • Reddit
  • 网站可靠工程师

Mjr00:需要更正一下,我们可以在一天内部署到所有地区,但这只限于尽快修复一个关键bug的情况,另外这也需要副总裁的批准,因此这只发生在极少数情况下。然而,真正有趣的不是修复bug而是修复后的事:你需要挖掘所有日志和数据来解释发生了什么、为什么发生、为什么没有被更早地检测到,以及如何确保以后不再发生等。然后你要准备一份报告,又被称为\u0026quot;错误更正\u0026quot;(COE),如果够幸运,这份文件只会被你的主管审查和批准;但如果运气不好,你很有可能要在工程组会上把这份报告展示给Charlie Bell和Andy Jassy,他们可是会把它撕成碎片的,更糟糕的是这一切会被所有参会人看到,甚至在网上直播。

英文原文地址:http://highscalability.com/blog/2019/3/4/how-is-software-developed-at-amazon.html

亚马逊是如何进行软件开发的相关推荐

  1. 亚马逊与 Uber,软件开发的方式有何不同?

    不同的企业文化之下,作为软件工程师,工作存在什么样的差异?作者 | Divij Vaidya 译者 | 弯月,责编 | 屠敏出品 | CSDN(ID:CSDNnews)以下为译文:背景介绍 我是一名软 ...

  2. 亚马逊手机端测评软件/PC端测评软件各有什么优缺点?

    亚马逊手机端测评软件/PC端测评软件各有什么优缺点? 亚马逊测评氛围手机端测评和web端测评.之前用的更多的还是手机端测评,因为这比较符合真实用户的操作习惯,但是随着亚马逊网页端的不断优化,不少欧美国 ...

  3. 亚马逊多店铺管理软件需要有什么功能?

    亚马逊多店铺管理软件是什么?亚马逊多店铺管理软件能干什么?亚马逊多店铺管理软件能达到什么目的?小编今天就会结合上述问题总和分析亚马逊多店铺管理软件. 知道亚马逊多店铺管理软件的亚马逊卖家,恭喜你,拥有 ...

  4. 亚马逊跨境电商美国站店铺产品运营是什么?亚马逊美国站店铺产品开发主要做什么?

    创始人杰夫·贝佐斯给亚马逊的定位是"地球上最以客户为中心的企业",起初许多人觉得可笑和荒诞,如今再看亚马逊,真的是将寻求杰出的用户体会贯彻到极致的,事实上的渠道客户满意度也极高. ...

  5. Matter将带来统一的视频投射方式——由亚马逊领导的电视视频投射标准将挑战Apple AirPlay和Google Cast

    智能家居新标准Matter做出了不少雄心勃勃的承诺,其重点是达成智能家居的互操作,使苹果.三星.谷歌和亚马逊生态能够互通,很是了不起.但它也能解决联网家庭中的其他痛点,比如电视控制.   新标准中包括 ...

  6. 亚马逊MWS开发套路演示

    MWS是商城网络服务的缩写,具体介绍看这里http://docs.developer.amazonservices.com/zh_CN/dev_guide/DG_IfNew.html.MWS就是一组A ...

  7. 服务的实例已在运行中_亚马逊首次把macOS引入云服务

    亚马逊 (Amazon) 有史以来第一次将 macOS 引入其 AWS 云服务.新的 Mac mini 实例将在亚马逊弹性计算服务 (EC2) 上提供,允许开发者为 iPhone.iPad.Mac 和 ...

  8. 亚马逊深度学习库_汽车Linux,8位社交,与Amazon的深度学习以及更多新闻

    亚马逊深度学习库 在本周的开源新闻摘要中,我们将介绍汽车Linux,社交8位,具有神经网络的深度学习等等! 2016年5月7日至14日的开源新闻摘要 汽车用Linux等于大型汽车制造商的快速创新 Li ...

  9. B站就机房服务器故障道歉;罗永浩否认将启动自动驾驶项目;​亚马逊收购 Facebook 卫星互联网团队|极客头条...

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...

最新文章

  1. linux修改ssh端口和禁止root远程登陆设置
  2. zcmu2014(公式推导+二分)
  3. 为游戏开发者总结的20个 Unity 建议和技巧
  4. Python连接MySQL及一系列相关操作
  5. vue时间过滤器filter
  6. CCActionEase想说爱你也不难(上)
  7. 原来TOGAF标准第10版是个活力生态圈
  8. R可视化绘图二-ggplot2
  9. 全局鼠标手势linux,Firefox通过用户脚本和热键进行的全局鼠标手势(Win7 / Linux + FF 68 esr)...
  10. Blast2GO使用方法详解(命令界面)
  11. 魔兽争霸3技术分析资源汇总
  12. three.js 法线贴图
  13. Linux程序动态库的加载
  14. 调用批处理bat文件
  15. php添加背景图及设置格式,PHP添加PNG图片背景透明水印操作类定义与用法示例
  16. bzoj 4864: [BeiJing 2017 Wc]神秘物质 splay
  17. dfs暴力模拟 Moo(洛谷 P1885)
  18. 文本意图识别方案整理
  19. 文件服务器怎么关机,服务器怎么关机和重启
  20. 中国企业差旅费用管理解决方案行业市场供需与战略研究报告

热门文章

  1. 深度学习、人工智能领域顶级书籍推荐
  2. 管理的实践-彼得.德鲁克
  3. 震惊!EfficientDet终于开源了!
  4. 人工智能改变未来教育的5大方式
  5. 如何从0到1打造一款AI产品?
  6. 思科将在网络中融入人工智能和机器学习
  7. 2018年强化学习领域十篇重要论文(附源码)
  8. 谷歌新研究对神经网络数据并行性提出质疑
  9. 探索强化学习算法背后的思想起源!
  10. COS 访谈第 19 期:张志华教授