史上最能“拜客户教”的公司,是如何做到持续交付的?(第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,一经查实,立即删除!

相关文章

C 简单瞎搞题(牛客练习赛22)(bitset优化dp)

Bitset优化Dp 题目链接 一般DP做法 显然后面的数是与前面的数字相关的,所以我们有dp数组,dp[i][j]dp[i][j]dp[i][j]选取了jjj个数,iii是否可以被创造出来,如果可以其值为1,否则为0。 所以我们显然有如下的状态转移…

AtCoder Regular Contest 125

传送门 A−DialUpA-Dial UpA−DialUp 贪心贪心贪心 首先当bbb有aaa没有的元素的时候显然无解,否则我们可以找到离a1a_1a1​最近的一个!a1!a_1!a1​,让后交替着来构造bbb即可。 int n,m; int a[N],b[N];int main() { // ios::sync_with_stdio(false); /…

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

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

Codeforces Round #742 (Div. 2) F. One-Four Overload 构造 + 二分图染色

传送门 文章目录题意:思路:题意: 给你一个n∗mn*mn∗m的矩形,包含...和XXX,你有两种颜色,你需要给...染色使得每个XXX上下左右相邻的...其两种颜色个数相同,输出一种合法方案。 1≤n,m≤5001\l…

同余最短路(P3403 跳楼机)

同余最短路 前置 给定m个数,这m个数可以重复取,问最大的这m个数不能拼成的数,或者给定一定范围,范围里有多少个数是这m个数可以拼成的,对于这种问题我们可以考虑同余最短路的算法。 P3403 跳楼机 同余最短路介绍 …

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

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

Codeforces Round #538 (Div. 2) F. Please, another Queries on Array? 线段树 + 欧拉函数

传送门 文章目录题意:思路:题意: 给你一个序列aaa,你需要实现两种操作: (1)(1)(1) 将[l,r][l,r][l,r]的aia_iai​都乘rrr。 (2)(2)(2) 求ϕ(∏ilrai)mod1e97\phi(\prod_{il}^ra_i)\bmod 1e97ϕ(∏ilr​ai​)mod1e97 1…

P2662 牛场围栏(同余最短路)

P2662 牛场围栏 思路 假设我们已经知道同余最短路是什么了,这里就不再过多赘述。 我们要尽可能地得到更多地课建成地边,那么我们必然要选一个basebasebase相对小的,因此我们可以对所有的棍子排个序,然后取a[1]−ma[1] - ma[1]−…

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

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

P3804 【模板】后缀自动机 (SAM)

传送门 文章目录题意:思路:题意: 给你一个字符串sss,让你求sss中出现次数不为111的子串出现次数乘上该字串长度最大值。 ∣s∣≤1e6|s|\le 1e6∣s∣≤1e6 思路: 没学明白,不多bbbbbb,把树建出…

Grpc Proto To Nuget Package 插件使用说明

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

HDU 6071 Lazy Running(同余最短路的应用)

Lazy Running 思路 还是利用同余的思想,假设存在一条长度为kkk的路,那么也一定存在一条kbasek basekbase的路base2∗min(d1,d2)base 2 * min(d1, d2)base2∗min(d1,d2)。 dis[i][j]xdis[i][j] xdis[i][j]x表示的是,从2−>i2 -> i2…

P2408 不同子串个数 SAM

传送门 文章目录题意:思路:题意: 求sss中本质不同的字串个数。 1≤∣s∣≤1e51\le |s|\le 1e51≤∣s∣≤1e5 思路: 显然, 个数就是∑(len[i]−len[fa[i]])\sum (len[i]-len[fa[i]])∑(len[i]−len[fa[i]])。 //#pr…

.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…

数列分块入门 (1 ~ 7)

分块 6277. 数列分块入门 1 分块思想 我们把每m个元素分成一块,所以我们总共的块数就是n/mn / mn/m块,一般情况下我们取mnm \sqrt{n}mn​.对于区间加操作,我们可以先暴力左右两边,然后对于中间的整块的部分的加减,…

UVA719 Glass Beads 最小表示 / 后缀自动机

传送门 题意: 求sss的最小表示。 ∣s∣≤1e4|s|\le 1e4∣s∣≤1e4 思路: 可以选择直接套最小表示法的板子,但也可以将sss复制,即ssssssssssss,对ssssss建samsamsam,让后贪心的找一个长度为nnn的字典序最…

你必须知道的Docker数据卷

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

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

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

Harbour.Space Scholarship Contest 2021-2022 E. Permutation Shift 思维 + 剪枝

传送门 文章目录题意:思路:题意: 给你一个初始排列[1,2,3,...,n][1,2,3,...,n][1,2,3,...,n],你可以选择一个kkk,将这个排列循环右移kkk次,让后最多交换mmm次任意的两个位置之间的数,将其变成给…

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

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