史上最能“拜客户教”的公司,是如何做到持续交付的?(第2趴)|DevOps案例研究...

内容来源:DevOps案例深度研究 –Amazon持续交付之道战队(本文只展示部分PPT及研究成果,更多细节请关注案例分享会,及本公众号。)

本案例内容贡献者:单冰 (Topic Leader)、 赵栋、梁兴龙、李杰、毛艳清、牛恒

本次案例解读:王立杰

640?wx_fmt=jpeg

(图片来源于网络)

上一篇文章《DevOps案例研究|史上最能“拜客户教”的公司,是如何做到持续交付的?(第1趴)》,通过介绍Amazon实行DevOps的背景,为大家解答了为啥Amazon被称为史上最“拜客户教”的公司,以及它如何在这种理念指导之下,通过DevOps提升研发效能,从而支持业务增长。

640?wx_fmt=png

注:整个案例研究分成如下几个部分,本文为该系列文章的第二篇,后续内容会在本公众号持续发布,请大家关注“DevOps”公众号!避免错过后面的精彩内容。

640?wx_fmt=png

了解了实行DevOps的背景,那么,Amazon这家史上最能“拜客户教”的公司,具体是如何做到持续交付的呢?本文将为大家拆解Amazon持续交付的具体实践。

640?wx_fmt=png

Amazon的DevOps也是端到端的闭环过程即先有构建(Build)->测试(Test)->发布(Release)的交付流水线,再从客户经历监控(Monitor)->下次计划(Plan)的反馈闭环。

640?wx_fmt=png

在整个打造闭环的过程中,Amazon一共经历了四个方面的变革。

一、组织变革

640?wx_fmt=png



1.1 “两个披萨”团队

任何时候、任何大的变革,都需要先从“人”的层面进行。这涉及到组织文化的重构、组织价值观与行为的梳理。Amazon也不例外。640?wx_fmt=pngAmazon的“两个披萨”团队在业界流传已久,“两个披萨”团队是指在Amazon内部划分团队的规则:购买两个最大号的披萨,如果能够让你的团队吃饱,那就可以保留这么多人;如果不能吃饱,说明你的团队人数太多,需要拆分。这个说法其实也是在提倡敏捷小团队,典型的敏捷团队是5-9人,也差不多两个披萨可以吃饱。

1.2 一流的人才

团队组建成功,要想充分激发起团队的主动性、能动性,必然离不开授权与激励,因此Amazon提倡充分授权,即“完全所有权;完全问责制;一致的激励措施”,一句话概括就是权责利的奖罚分明。当然,开发与运维的协同必不可少,毕竟这是狭义DevOps的基本范畴。这里需要强调一点:Amazon对人才的要求极高。贝索斯认为:雇佣最优秀和最聪明的员工是公司走向成功的保证。Amazon一直坚持招人的高标准,坚决不会为了满足各业务部门的人力资源需求而放低招聘标准。每次招募员工时,无论男性还是女性,都要求一个比一个水平高,只有这样,才能使整个人才储备的标准提高。随着Amazon的不断壮大,贝索斯对员工的要求更高了,并在会上不断重申要求员工要用心工作、努力工作和超时工作。同时,贝索斯不能容忍愚蠢的行为,即使是偶尔为之也无法容忍。2009年2月,Kindle2发售前夜的大会彩排现场,由于出现了一些计算失误,贝索斯怒斥了通讯部门的员工,“我不知道你们是不是没有用高标准要求自己,还是你们只是不知道自己在做什么。”在这样的高标准要求之下,那些不满以及不适合Amazon的员工都被贝索斯坚定地解雇了,取而代之的是拥有新观念和更多经验的人。当然,留下来的老员工都得到了丰厚的回报。

1.3 充分授权

有了一流的人才,还需要对员工充分授权。为了强化沃尔玛创始人山姆-沃尔顿“崇尚行动”的理念,贝索斯创造出了“放手去做”(just do it)这一奖项,Amazon非常支持员工发挥主动精神去取得显著业绩,尤其是在其主要工作职责之外取得的成绩,并认为即使员工因此出现了很大的失误,也应该获得褒奖,因为他们承担了很大的风险,并在此过程中展现了足智多谋的一面。另外,贝索斯认为等级制度对变化不利,他在会议和演讲上表示,要把Amazon的经营重点放在权力下放和独立决策上,并且一以贯之地执行。

二、架构变革

640?wx_fmt=png



2.1 变革背景

在2001年,Amazon网站仍然是一个大的单体应用,由数百万行C++代码组成。几千个开发者同时开发一个大的版本,开发完成,再由一个工程师团队手工进行应用上线。如下图所示:

640?wx_fmt=png

很明显,这种单体架构的开发效率之低和协作成本之高可想而知。
  • 所有人修改的代码都是一个应用代码,代码冲突不断 
  • 构建时间长,任何小修改都必须重新构建整个项目,这个过程往往很长。 
  • 稳定性问题一个小问题,都可能导致整个应用挂掉。 
  • 代码高度耦合,新人的学习成本太高,不容易融入团队。 
  • 不易扩展无法满足高并发的业务需求,在必须规模化时,很快达到其极限。
这样的单体架构已经严重影响到业务的增长。为了彻底解决这一问题,贝索斯2002年发了一封信,要求必须改变,如果谁不改,就开除谁。这个背景我们在上篇文章有提到,点击复习?【DevOps案例研究|史上最能“拜客户教”的公司,是如何做到持续交付的?(第1趴)】这个突破口就是“架构变革”,整个网站需要从单体应用转变为面向服务的架构,也就是SOA。每个服务只需要单一用途,让每个开发团队都可处理一个独立的可交付的代码单元;要简单,不要复杂;各个业务的组成都是通过API实现连接和数据交换,从而实现去耦合。

2.2 变革成效

640?wx_fmt=png

在完成这样的架构变革后,收效显著

1) 发布效率提升

在Amazon初始架构中,任何一个bug修复,都需要更改应用程序中某些C++ ,单个修复完,还要等待其他人完成对应用程序其他模块的更改,并对整个应用程序进行测试之后才能发布。切换到微服务体系架构后,开发团队可以只对其负责的微服务进行更改,可以独立发布,只要保证质量即可。

2) 错误隔离

在微服务体系架构中,每个团队都在独立的代码基础上工作,不仅团队间的代码冲突减少,而且错误被隔离到单个微服务中。

3) 技术多样性

以前,所有的代码都是C++代码,整体开发团队被限制在一个通用的技术堆栈和过程中。采用微服务后,允许独立的团队为给定的服务选择正确的流程和技术,采用Java或者Python等框架都可以。这样,就可以吸引更多有才华的工程师,让他们采用各种新技术。

4) 新人融入快

新工程师可以安全地在一个小型的微服务上进行编码。对于一个工程师来说,没有必要仅仅为了修复一个bug而去学习一大堆代码库,学习曲线降低。

5) 团队拥有更大的自主权

采用微服务的最大变化可能是文化。为了提高敏捷性和效率,微服务开发团队做出以前无法控制的决策,比如发布日期、质量策略。这一点跟前面的组织变革,正好相辅相成。

三、工具变革

640?wx_fmt=png



3.1 APOLLO

一个云应用程序可能拥有数百个单独的微服务,每个微服务可能由多个实例组成(为了可用性和可伸缩性),这就带来微服务规模的增长;而每个微服务将由各自的开发团队独立更新。快速增长的微服务数量和更新的频率要求一个完全自动化的部署工作流程和基础设施。Amazon内部的APOLLO工具,在这种场景下应运而生。APOLLO主要对环境进行管理,比如某一个服务上线需要用到哪些package group、依赖有哪些、参数要设置哪些、机器要多少台等。按最小的服务单元每次也会涉及到在几十台主机上做部署。

640?wx_fmt=png

APOLLO可以自动化整个部署工作流程,这也是目前大多数类似工具的通用功能。
  • 从代码到客户的全自动化。通常,一旦开发人员将代码提交源代码库,就会有一个按钮流程,自动获取最新的源代码,并将其打包到部署工件中,如容器,然后将整个工件部署到准生产或生产环境中。这被称为持续交付。
  • 弹性缩放。微服务本质上是相当短暂的部署新版本、退出旧版本,并根据利用率添加或删除新实例。Amazon采用的是Elastic Compute Cloud,支持弹性扩展地部署基础设施。

3.2 Build tools

Amazon崇尚每个人有更小更明确的任务,“you build it, you run it.” 落到工具层面,这主要得益于一个叫Build tools的组,他们把Platform和Internal tools做到了功能性和易用性在业界内数一数二。

640?wx_fmt=png

这个组做的主要工具有5类: 

1)Brazil Build

对package进行分发和建立,每次build至少涉及上百个package,可以在几分钟甚至几十秒内完成build并保证不出错。

2)Apollo Deployment

对环境进行管理,比如某一个service上线需要用到哪些package group、依赖有哪些、参数要设置哪些、机器要多少台等。按最小的service单元每次也会涉及到在几十台host上做deployment。

3)Code base

所有代码存放在中央代码库,可以按reference、method、keyword之类搜索所有相关代码。

4)Monitoring System

对service进行监控、告警、故障分析等。

5)Pipeline

把build、test、deploy全部串起来,对整个流程进行监控。大部分操作如rebuild、代码回滚、停止deploy一键操作就可以完成。

640?wx_fmt=png

640?wx_fmt=png

Amazon的所有工具是全公司统一使用的,更新及时且统一,有一个非常大的组专门负责开发维护,在Amazon,随便一个开发通过Apollo只需一键就可以实现回滚。而大多数公司由于组织架构的原因,各个组之间的代码不是互相可见的,做这些工具也各自为战,你做一套我做一套,精力分散,加上code/API等不透明导致online infra做得非常渣,以至于想回滚一次得叫上PM、QA、Dev等人一起弄个大动作,这也导致很多公司想做每日部署几乎不可能,更别说分钟级部署了。 

四、流程变革

640?wx_fmt=png



人都是不可靠的,都会犯错误,但机器不会,只会忠实地执行。提高效率,避免错误的关键,就是要把一切能流程化的东西自动化。关于这部分,就不多做赘述了。

640?wx_fmt=png

总结

640?wx_fmt=png



正是上述四大变革提升了Amazon公司的整体DevOps能力:Amazon可以让一个Dev从功能的设计、开发、测试、发布、后续的监控由一个人完成。平均每十几秒就有一次发布,每天发布好几千次,让Amazon最终实现一年5000万次的部署。
如果你对搭建流水线感兴趣,想体验一下如何用工具实现真正的交付流水线,体验从修改代码再到一键上线的快感,体验如何从0到1打造一款产品,建议你来我们的DevOps黑客马拉松(识别文末图片中的二维码即可报名~)号外!号外!如果你想跟“无敌哥-王立杰”老师微信交流,请在公众号后台回复“无敌哥”,您将会得到“无敌哥-王立杰”老师的微信二维码,添加时注明理由。


拓展阅读:DevOps案例研究:知人善任——Google敏捷核心文化

DevOps案例研究:进取到让自己毛骨悚然,Netflix公司的简介和文化

DevOps案例研究|史上最能“拜客户教”的公司,是如何做到持续交付的?(第1趴)

DevOps案例研究:庖丁解牛,剖析Google持续交付之道

历久弥新 - 微软万亿市值背后的文化支撑(上)|DevOps案例研究

历久弥新 - 微软万亿市值背后的文化支撑(下)|DevOps案例研究


640?wx_fmt=gif

DevOps黑客马拉松 

9月7-8日 北京

专业大咖陪你一起进化

欢迎企业组队PK,企业团队报名有特惠

目前已经有两家企业组队!!

赶紧报名吧~⬇️⬇️⬇️

640?wx_fmt=jpeg


640?wx_fmt=jpeg


 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ASP.NET Core on K8S深入学习(3)Deployment

上一篇《部署过程解析与安装Dashboard》中我们了解K8S的部署过程,这一篇我们来了解一下K8S为我们提供的几种应用运行方式:Deployment、DaemonSet与Job,它们是Kubernetes最重要的核心功能提供者。考虑到篇幅和更新速度,我将其分为两…

8月语言排行:C#继续呈现增长态势

TIOBE 编程语言排行榜 8 月更新已公布,排名前十的分别是:Java, C, Python, C, C#, Visual Basic .NET, JavaScript, PHP, Objective-C 和 SQL。和上个月唯一的不同之处在于 Objective-C 和 SQL 的排名发生了交换。事实上,上周 Dice Insights …

面试必谈的哈希,.Net 程序员温故而知新

引言:作为资深老鸟,有事没事,出去面试;找准差距、定位价值。面试必谈哈希,Q1:什么是哈希?Q2:哈希为什么快?Q3:你是怎么理解哈希算法利用空间换取时间的?Q4:…

Grpc Proto To Nuget Package 插件使用说明

Grpc Proto To Nuget Package 是一个 VS 插件(支持 VS2019),目的是将基于 gRPC 的接口定义 .proto 文件一键转成 Nuget Package,然后发布到私有仓库上。下载最新 GrpcProtoToNugetPackageTemplate.zip ASP.NET 的项目模板&#xf…

.NET Core 3.0预览版7中的ASP.NET Core和Blazor更新

.NET Core 3.0 Preview 7现已推出,它包含一系列ASP.NET Core和Blazor的新更新。以下是此预览中的新功能列表:最新的Visual Studio预览包括.NET Core 3.0作为默认运行时Visual Studio中的顶级ASP.NET核心模板简化的网页模板组件的属性splattingTypeConver…

你必须知道的Docker数据卷

本篇已加入《.NET Core on K8S学习实践系列文章索引》(微信上暂无法访问,可以通过cnblogs博客园访问),可以点击查看更多容器化技术相关系列文章。本篇预计阅读时间为5分钟。01—Docker数据挂载到容器在Docker中,要想实…

牛客小白月赛11:Rinne Loves Data Structure

Rinne Loves Data Structure 思路 我们插入的位置大概分了四种: 第一种 显然我们找到比当前插入的值的pre,也就是比当前节点大的最小值。 第二种 我们只要找到当前节点的suc,也就是比当前节点小的,最大值。 第三种 我们只…

VS Code 1.37 发布!多达数十个图标迎来全新设计

今天(北京时间 2019 年 8 月 9 日),微软发布了 Visual Studio Code 1.37 版本。此版本主要更新的内容包括:Full product icon refresh - 多达数十个图标迎来全新的现代化设计Edit string arrays in the Settings UI - 在配置编辑器…

Serilog 自定义 Enricher 来增加记录的信息

Serilog 自定义 Enricher 来增加记录的信息IntroSerilog 是 .net 里面非常不错的记录日志的库,结构化日志记录,而且配置起来很方便,自定义扩展也很方便Serilog is a diagnostic logging library for .NET applications. It is easy to set up…

基于@media (prefers-color-scheme: [dark|light])的暗黑与亮色主题切换

今天有人反馈使用pdf.js的时候,发现pdf.js阅读器在自己的Mac Book电脑上显示的背景是暗黑色,而别人的电脑上却是白色: 根据这个问题,找到了pdf.js使用的view.css有段代码,类似这样: media (prefers-color-…

做「容量预估」可没有true和false

这里是Z哥的个人公众号每周五11:45 按时送达当然了,也会时不时加个餐~我的第「85」篇原创敬上随着20年来互联网的蓬勃发展,一个软件系统所要面对的访问压力上限被逐渐提高。虽然如此,但是那些体量达到亿级或者是千万级…

你不得不了解的10款服务器监控工具

监控Web服务器或Web主机的运行状况和正常运行非常重要。如果希望确保您的网站可用性在您的控制之中,那你就需要收集服务器各种性能数据以供分析和调整。以下是收集的常用大多数服务器监控组件解决方案。01Performance Co-PilotPerformance Co-Pilot,简称…

统一流控服务开源:基于.Net Core的流控服务

先前有一篇博文,梳理了流控服务的场景、业界做法和常用算法统一流控服务开源-1:场景&业界做法&算法篇最近完成了流控服务的开发,并在生产系统进行了大半年的验证,稳定可靠。今天整理一下核心设计和实现思路,开…

.NET Core 编写 Azure Function 并连接 GitHub 持续部署

点击上方蓝字关注“汪宇杰博客”导语Azure Function 是一个事件驱动型无服务器计算平台,可以解决复杂的业务流程问题,更加高效地进行开发。在本地构建和调试,而无需额外的设置,在云中大规模部署和操作,并使用触发器和绑…

「数据ETL」从数据民工到数据白领蜕变之旅(五)-使用dotNET脚本实现SSIS无限扩展...

在前面一文中,正式引出了SSIS专业数据ETL工具,笔者仅能作引路作用,未能使用文章的方式给大家写出更多的入门级的文章,希望读者们可以自行根据分享的学习资源自行完成入门及进阶的学习。同时也想给大家分享到SSIS的能力边界性&…

数据结构为什么那么难?

来源 | 异步 | 文末赠书2017年8月,本着让更多的人轻松学习算法的初心,我写作了第一本书《趣学算法》,该书在出版后受到广大读者一致好评,在一年内重印了10次,并输出了繁体版的版权。一位读者对我说,读这本书…

书籍推荐:《C#7.0本质论》

在dotNet平台中有多种开发语言可以使用,C#无疑是其中应用得最为广泛的。学习一门编程语言最好的方式就是找一本好书系统地学习,我读过的关于C#的书籍中,我认为下面三本最为经典:《C#本质论》:入门类,目前最…

gRPC的简单使用

前言八月初的时候,在公司内部做了一个主题为《gRPC的简单使用》的分享,其实就是和小伙伴们扯扯淡,现在抽空回忆一下,也算是一个小小的总结吧。现在市面上耳熟能详的RPC框架也很多,下面列举几个遇到比较多的。谷歌的gRP…

生命周期结束,Spring Boot 1.x退役

一年前 Spring 官方宣布 Spring Boot 1.x 生命周期将于今年 8 月 1 日结束,如今时间已到,在发布 Spring Boot 1.5.22 的同时,Spring 确认将不再为 1.x 系列发布维护版本。官方希望用户尽快迁移到 Spring Boot 2.x 上,为此还制作了…

Apollo 配置中心:分布式部署

Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。服务端…