DevOps 拆的不是工具,是一堵墙:开发只管把功能写出来,运维只管让系统别出事——两边的目标天然对立;而云环境把墙的两边都变快了,于是协调的方式也必须跟着变,衡量的方式就是那四个数字:部署频率、变更前置时间、变更失败率、故障恢复时间。
前几节讲的都是技术(虚拟化、容器、编排、IaC)。这一节讲人的分工——因为技术换完之后,原来那套【谁负责什么】的分法就不成立了。
它是前面几节的收口:容器(4-6)让【交付的东西】变成一个整体,编排(4-7)让【部署】变成一个声明,IaC(4-8)让【环境】变成一份代码——三件事合起来,开发能做的事就延伸到了运维的地盘上。那原来的分工怎么办?这就是 DevOps 要回答的问题。
一、那堵墙是怎么砌起来的
先说清楚问题的来源,否则 DevOps 会显得像一句口号。
传统分工的逻辑是按阶段切:
| 角色 | 负责什么 | 考核什么 | 会怎么想 |
|---|---|---|---|
| 开发 | 写功能、加特性 | 交付了多少功能 | 希望改动越快上线越好 |
| 运维 | 让系统稳定 | 出了几次故障 | 希望改动越少上线越好 |
看最后两列:两边都在做自己该做的事,但诉求正好相反。开发要【多改】,运维要【少改】——于是必然出现这些现象:
- 开发把包丢过去就完事,出事说【我这儿是好的】
- 运维不愿意上,要求走很长的审批,一批攒着一起上
- 一批攒得越大,出事越难定位,于是要求更长的审批——恶性循环
关键洞察:变更批次越大,单次风险越高,而风险越高就越不敢多做变更——这个循环让整个组织慢下来。DevOps 要打破的就是这个循环。
二、四个数字:衡量的方式变了
既然要打破循环,就得有个衡量标准。业界用的是同一套四个指标(DORA):
| 指标 | 衡量什么 | 要变大还是变小 |
|---|---|---|
| 部署频率 | 多久发一次 | 越大越好 |
| 变更前置时间 | 从提交代码到上线多久 | 越小越好 |
| 变更失败率 | 多少次发布里有一次出事 | 越小越好 |
| 故障恢复时间 | 出事之后多久恢复 | 越小越好 |
前两个衡量【快】,后两个衡量【稳】。四个必须一起看——只看频率会误判,因为如果失败率同时上升,那不是进步,是在用稳定性换数字。
三、动手 Demo:四个数字的十年之变
看到什么算成功:
==================================================================================================
【Demo 9】DevOps:四个数字把【开发】和【运维】的墙拆掉
==================================================================================================
衡量 DevOps 做得好不好,业界用同一套四个指标(DORA):
部署频率、变更前置时间、变更失败率、故障恢复时间
指标 传统模式 DevOps 之后
--------------------------------------------------------------------------------------------
部署频率 每季度 1 次 按需,一天多次
变更前置时间 1~6 个月 1 天以内
变更失败率 30% 5%
故障恢复时间 1 天 1 小时以内
--------------------------------------------------------------------------------------------
换算成一年:
传统模式:4 次部署 × 30% 失败 = 1.2 次出故障
DevOps:250 次部署 × 5% 失败 = 12.5 次出故障
部署次数多了 62.5 倍,出故障的次数只多了 10.4 倍
换成【每 100 次部署里出几次事】:30 次 → 5 次
这才是 DevOps 真正的意思:不是【多上线】,是【每次上线小到出事也不怕】。
改动越小,出问题时影响面越小、定位越快、回滚越容易。
支撑它的三件工具:持续集成(合并即自动测)、持续交付(测过即可发)、
以及 4-6 讲的容器(保证各环节环境完全一致)。
读结果:
- 中间那两行是本节最值得琢磨的地方:一年部署 250 次,出故障 12.5 次——总数确实比传统模式多。所以 DevOps 从来不是【保证不出事】,而是换了一个衡量口径:从【一年出几次事】改成【每次发布出事的概率】。从 30% 降到 5%,这才是真正的进步。
- 最后一行:这个口径换算出来就是【每 100 次发布里,从 30 次出事变成 5 次】。而更重要的是:因为每次改动更小,这 5 次里大部分是小问题,恢复时间也从 1 天降到 1 小时以内。
30 秒实验
打开任意一个开源项目的页面(比如 GitHub 上随便找一个活跃项目),点开它的:
- Commits(提交记录)——看最近一周提交了多少次。
- Releases(发布记录)——看多久发一个版本。
做完这个你会看到两个数字,它们的比值就是【变更前置时间】的粗略近似——提交很频繁、发布也不慢的项目,说明它的发布成本很低;提交很多、发布停留在几个月前的项目,说明它的发布成本很高,高到大家不愿意发。这个比值比任何问卷都更能说明一个团队的交付能力。
常见误区
-
错误:DevOps 是一个岗位,招一个 DevOps 工程师就行了。——纠正:DevOps 是一套协作方式,不是一个人的职责。它要解决的是【开发和运维的目标对立】,这只有两边共同承担同一组指标才能解决——如果设一个岗位叫 DevOps,等于把两头的事又交给了一个人,墙还在,只是换了个人站在墙上。所以判断一个组织是不是真在做 DevOps,看的是【开发要不要值班】这类问题,而不是【有没有这个岗位】。
-
错误:部署频率越高,风险越大。——纠正:恰好相反,风险来自【批次大小】而不是【次数】。一次发布改 300 个文件,和一次发布改 3 个文件,出事概率不是 100 倍的关系,而是【能不能查得清】的关系。高频小批量的发布,每一次的改动范围都在人能理解的尺度内,出事能定位、能回滚。所以【发布多】本身不是风险,【每次都很大】才是风险。
-
错误:有了流水线(自动化)就是 DevOps 了。——纠正:自动化是手段,不是目的。流水线能把【构建、测试、发布】自动跑完,但如果开发仍然不关心线上表现、运维仍然在上线前卡审批,那堵墙一点没动,只是把手工活换成了自动活。判断标准是这一个:线上出问题时,开发和运维是不是在一起看?是,那墙拆了;不是,工具堆得再多也没用。
-
错误:这四个指标只能用来考核团队。——纠正:它是用来发现自己卡在哪儿的。四个数字各有各的诊断价值:部署频率低说明发布链路太长;前置时间长说明测试或审批环节堵;失败率高说明测试覆盖或代码质量有问题;恢复时间长说明监控和回滚没做好。拿它去排名或者考核个人,会立刻引发【数字好看优先】的行为——这正是这些指标最常见的误用。
自测三问(点开对答案)
1. 【变更批次越大越不敢改】这个循环,怎么用一句话说清它的坏处? —— **它让整个组织学习的速度变慢**。每一次大批量发布,如果成功,你不知道是哪些改动起了作用(因为一起上的);如果失败,你也不知道是哪一处的问题(因为排查面太大)。**于是经验无法积累**——同样的坑会踩很多次,因为每次踩完都归因不到具体原因。DevOps 的价值之一是把批次切小,**让每一次发布都成为一次可解释的实验。** 2. 为什么这四个指标必须一起看,不能只看一两个? —— 因为**它们之间存在此消彼长的关系,单看任何一个都能被做假**。只看部署频率,可以靠降低门槛把数字刷上去(失败率一起涨);只看失败率,可以靠少发布、多加审批把数字压下来(前置时间一起涨)。**四个一起看,就没有便宜的作弊路径**——想四个都好,只能真的把交付链路做扎实。**这就是为什么它被当作行业标准口径。** 3. 云换到云上之后,为什么【协调方式】也必须跟着换? —— 因为**原来那套靠【慢】来控风险的做法失效了**。物理时代,一次变更要排队、要审批、要停机窗口——**这些慢下来的环节,本身就是风险控制手段**。而在云上,环境可以随时重建、可以灰度、可以秒级回滚,**这些新的手段比【审批排队】精确得多**。所以不是【云逼着大家做 DevOps】,而是**云提供了更好的风险控制方式,用旧方式管理就白白浪费了这些能力**。- 口径变了,框架还在。最新的年度调研已经不再用【精英/高/中/低】四档给团队分等级,而是换成按多种特征聚类出的若干种团队画像——因为同样四个数字背后可能是完全不同的处境(有的团队是流程拖累,有的是系统本身难改)。但四个指标本身仍是通用语言。
- 最值得注意的新变化是 AI 介入。调查显示绝大多数开发者已经在日常工作中使用 AI 辅助,对文档和代码质量有正向作用,但同时【交付稳定性】出现下降——每个合并请求引发的事故数在上升。
- 给我们的启示仍是一条:这些工具提高的是【产出的速度】,而上面那四个数字衡量的是【交付的质量】。两者不是一回事——产出快了而稳定性下降,说明缺的是后面的验证与回滚能力,不是更快的生成能力。
- ☐ 下一节(4-10 微服务是什么:微服务、API)
相关笔记
- 寻求不会变化的IT基础架构 —— 上一篇:改代码、重建,而不是登录修改
- 虚拟化技术② 容器型 —— 镜像消除了环境不一致
- 云计算改变了IT行业的世界 —— IT 角色的客户与交付方式怎么变
- 系统关联操作中发生的变化 —— 从系统集成商到托管服务商
- ☁️ 云计算 · 索引 —— 全课路线图