Concept · Organization
开发和运维别打架
你说 DevOps 是啥?很多人一上来就甩 Jenkins、Docker、K8s——其实那都是工具。DevOps 这词儿听着像个职位,其实不是。它是一套让开发和运维不再扯皮的协作方式,再配上一堆让代码从写出来到上线全自动的工具习惯。
从一个词的出生,到一套你能直接用的判别法
咱们先看这词儿是怎么蹦出来的(2009 比利时根特),再看在它出现之前开发和运维到底在为啥扯皮。然后到第三站——DevOps 到底改了什么——这一站直接回答你的原问题。最后一站把 CI/CD、SRE、DevOps 工程师这几个老被混在一起的词捋清楚。
这词儿打哪儿来:2009 年比利时根特
DevOps 这词儿不是哪个大公司发明的,是一个比利时的 IT 顾问气出来的。这人叫 Patrick Debois1。
2007 年前后,他做一个比利时政府的项目,被开发和运维两边来回拉扯——开发那边写完就甩过来,运维这边接到一堆没法部署的东西。他想,这事儿不应该这样。🟢 high
2008 年他跑去多伦多参加 Agile 大会,在大会的 BoF 环节(一种自由组队聊天的形式)开了个口子叫"敏捷的基础设施"(Agile Infrastructure)。结果就一个人来了——Andrew Schafer。两个人聊得很投,决定继续搞下去1。
真正引爆是 2009 年 6 月的 Velocity 大会。Flickr 的 John Allspaw 和 Paul Hammond 上去做了一个题目特别炸的演讲:10+ Deploys Per Day: Dev and Ops Cooperation at Flickr——一天部署 10 次以上,开发和运维要怎么协作。Debois 没去现场,在比利时远程看。看完之后旁边人怂恿他:你自己搞个会吧。2
他真就办了。2009 年 10 月 30 日,在比利时根特,第一届 DevOpsDays 开张。Debois 把会议名字砍短当成社交媒体的标签——#DevOps。这词儿从此就传开了。2
#DevOps 真正被叫开的时刻。你看这个起源故事说明一件事——DevOps 不是从某家公司的工具里长出来的,是从一线被反复扯皮的人那儿气出来的。所以它的核心一直是"两边怎么相处",而不是"装哪个工具"。后面所有讨论都不能离开这个根。
开发跟运维以前为啥老打架
要听懂 DevOps,你得先听懂它要解决的疼。这个疼有个专门的名字,叫"困惑之墙"(Wall of Confusion)——Andrew Schafer 和 Lee Thompson 提的3。
这堵墙是个比喻。开发坐墙这边,运维坐墙那边。开发写完代码,往墙上一甩——"喏,给你部署去"。运维接到一坨东西,环境跟开发那边不一样、依赖缺一堆、出事了不知道找谁。🟢 high
为啥会这样?因为两边的 KPI 是反着的。开发的奖金跟"上了多少新功能"挂钩,他天然求变。运维的奖金跟"系统稳不稳、出没出事"挂钩,他天然求稳。变和稳本来就矛盾——你今天加新东西,就有可能把昨天稳的东西搞坏。
| 这件事 | 开发怎么想 | 运维怎么想 |
|---|---|---|
| 主要 KPI | 上新功能、做需求 | 系统稳定、SLA 不破 |
| 对"变更"的态度 | 越多越好,业务在等 | 越少越好,每次变更都是风险 |
| 时间感 | 这周必须上 | 让我先评估两周 |
| 出事时第一反应 | 是不是环境配置不对 | 是不是代码写错了 |
| 周末怎么过 | 写新代码 | 凌晨被叫起来救火 |
这表你看完就懂为啥两边非打架不可——他们站的位置就让他们必须打。不是哪个人坏,是结构的问题。
2009 年那个引爆 DevOps 的 Flickr 演讲,副标题就是"Dev and Ops Cooperation"。Flickr 当时一天部署 10+ 次,在那会儿是工业奇迹(很多公司一个月部署一次都费劲)。能做到这一点的关键不是工具多牛,是开发和运维之间没有那堵墙——双方共用一套监控、共担一份责任、共用一套指标。2
DevOps 到底改了啥:CALMS 五件套
知道了疼在哪儿,DevOps 给的答案就好懂了。Jez Humble(《持续交付》《DevOps Handbook》的作者)总结了一个简单的检查表叫 CALMS4,五个字母对应五件要改的事。这是目前业界最常用的一套自检框架。🟢 high
C — Culture(文化,最关键的一条)
拆掉那堵墙。开发和运维一起背 KPI——线上挂了不是运维一个人的责任,发版慢也不是开发一个人的责任。这是 CALMS 里最难做、也最关键的一条。后面四条都是术,这一条是道。
A — Automation(自动化)
凡是能让机器干的事,别让人干。代码合并要自动跑测试(CI),测试通过要自动部署到测试环境(CD),基础设施要写成代码自动起(IaC)。不是为了快,是为了消除"人手一过就出错"的环节。
L — Lean(精益)
从精益生产借来的——小批量、小步快跑、不囤货。一次发 100 个改动,出事根本不知道是哪个改动搞的;一次发 1 个改动,出事一看就知道是它。所以宁愿一天发 10 次每次 1 个,也不要一周发 1 次每次 10 个。
M — Measurement(度量)
用数据说话,不靠"我觉得"。这块儿后来 Google 的 DORA 团队5给出了四个最常用的指标,行业里几乎人手一份:
- 部署频率(Deployment Frequency)——多久能发一次版?
- 变更前置时间(Lead Time for Changes)——一个改动从写完代码到上线要多久?
- 变更失败率(Change Failure Rate)——发上去的版本有多少出事?
- 故障恢复时间(Time to Restore / MTTR)——出事到修好要多久?
2024 年那份 DORA 报告里,精英组能做到一天部署多次、出事一小时内恢复、变更失败率 5% 上下5。你拿这四个数字往团队头上一套,团队是不是真在做 DevOps,一目了然。
S — Sharing(共享)
出事了不藏着、不甩锅。无指责复盘(blameless postmortem)、文档公开、知识不锁在某个人脑子里。这一条往往最被低估——一个团队 DevOps 做得好不好,看他们出事之后开会的氛围就知道。
"我们装了 Jenkins,所以我们在做 DevOps。"——错。你只做了 A(Automation)的一小块。CALMS 五件套你只占了 1/5,而且占的不是最重要那一条。Culture 不变,光装工具最后只是一个被 YAML 折磨到天天加班的运维换了个工位、改叫"DevOps 工程师"——结构问题原封不动。6
CI/CD、SRE、DevOps 工程师又是啥
说到这儿你大概率已经被几个相邻的词搞晕了:DevOps、CI/CD、SRE、DevOps 工程师——这一堆到底什么关系?这一节把它们一次性摆平。
| 名字 | 是什么 | 主要在干啥 |
|---|---|---|
| DevOps | 一套工作方式 + 文化 | 让开发和运维不扯皮、共担责任、整套交付自动化 |
| CI/CD | 一组具体的工程实践 | 代码合进来就自动跑测试(CI),通过就自动部署到环境(CD) |
| SRE | Google 发明的一种岗位 + 方法 | 用写代码的方式来管线上系统的稳定性(SLO / error budget) |
| DevOps 工程师 | 一个被滥用的岗位名 | 多数时候是搭 CI/CD、写 IaC、管 K8s 的人,名字争议很大 |
说人话的版本:
- DevOps 是个房子。整套文化和方法。
- CI/CD 是房子里的某根承重柱。DevOps 几乎所有团队都靠它撑着,但 CI/CD 只是 DevOps 里"自动化"这块的代表,不是 DevOps 的全部。
- SRE 是另一种盖这个房子的施工队。Google 2003 年内部就在搞了,2016 年出了那本《Site Reliability Engineering》才广为人知7。SRE 跟 DevOps 大方向一致(都要破墙),但 SRE 更具体——它告诉你 SLO 怎么定、error budget 怎么算、on-call 怎么排,是一套可执行的工程教条。"class SRE implements DevOps"——SRE 是 DevOps 这个抽象接口的一个具体实现。
- DevOps 工程师就有点尴尬了。理论上根本不该有这个岗位——DevOps 是文化,全员的事儿,怎么能让一个人或一个团队"负责 DevOps"?但现实是这个 title 满招聘网站都是6。实际工作就是:搭 Jenkins / GitHub Actions、写 Terraform、管 K8s、配监控告警。本质上是过去那个"运维"换了个洋气的名字。
有人会反驳:"DevOps 工程师就是个有用的岗位,不要那么咬文嚼字。"这话有道理——多数公司确实需要一个懂 CI/CD、IaC、容器、监控的专家来搭整套平台,叫啥不重要。本讲稿仍然倾向那个批评意见,是因为叫成"DevOps 工程师"之后,CALMS 里的 C(Culture)就被偷偷废掉了——其他开发觉得"DevOps 是 DevOps 团队的事",那堵墙原封不动,只是换了个位置:从开发/运维之间,挪到了开发/DevOps 团队之间。叫"平台工程师"或者"基础设施工程师",反而能避免这个误会。
所以一句话讲清 DevOps
DevOps 是 2009 年比利时一个被开发/运维扯皮气坏的顾问 Patrick Debois 起的头,核心是把"开发"和"运维"这两个原本对着干的工种,拧成一股劲儿。具体做法是 CALMS 五件套——文化上拆掉那堵墙、技术上把流程自动化、流量上小批量快跑、决策上用数据(DORA 四指标)、出事后无指责共享。
判断一个团队是不是真在做 DevOps,不要看他们装了什么工具。装了 Jenkins、Docker、K8s 一整套不代表在做 DevOps,只能说他们在做 Automation 的一小块。真正的判别法是:开发和运维(或者说"写代码的人"和"管线上的人")是不是共担一份责任、共看一套指标、出事是不是一起救火、复盘是不是无指责。如果是,哪怕只装了 git + GitHub Actions,也是在做 DevOps;如果不是,哪怕装了天下所有花哨工具,也只是给那堵墙刷了层新漆。
至于你身边那些"DevOps 工程师"——他们干的多数活儿是搭 CI/CD、写 IaC、管 K8s,本质是过去那个"运维"换了个名字,活更广更深一些。这个岗位有用,但它能冒出来这事儿恰恰说明很多公司的 DevOps 转型只做了一半——文化那一半没做,只把工具那一半外包给了几个人。
这些地方我说实话也没全把握
- CALMS 的细节业界有微调版本(有人把 L 解读成 Learning 而不是 Lean,有人把它扩成 CAMS 不带 S),讲稿用的是 Atlassian 和 Jez Humble 官方那一版。4
- SRE 和 DevOps 到底是"姐妹关系"还是"实现关系",业界没有完全统一的说法。Google 自己说 "class SRE implements DevOps",但这是 Google 视角;其它公司里两者经常是并列的两个团队、各干各的。
- 2024 年 DORA 报告出现一个反常现象——高绩效组里的"变更失败率"反而比中绩效组高5,这意味着这四个指标本身的解读可能正在变化。讲稿用的还是经典版本,但这块儿过两年可能要更新。
- "DevOps 工程师"是不是好岗位名是个吵了十年的口水仗,没标准答案。讲稿表达的是批评派的立场,但实务上多数公司就是这么叫的,强行改名收益也不大。
Sources
- The Origins of DevOps: What's in a Name? — https://devops.com/the-origins-of-devops-whats-in-a-name/
- The Incredible True Story of How DevOps Got Its Name (New Relic) — https://newrelic.com/blog/news/devops-name
- The Wall of Confusion — Essential DevOps Concepts — https://levelup.gitconnected.com/the-wall-of-confusion-623057a4dd26
- CALMS Framework — Atlassian — https://www.atlassian.com/devops/frameworks/calms-framework
- Highlights from the 2024 DORA State of DevOps Report — https://getdx.com/blog/2024-dora-report/
- The Myth of the "DevOps Engineer" Role — https://medium.com/@jeromedecinco/the-myth-of-the-devops-engineer-role-a-non-existing-job-title-e0c2628695de
- SRE vs DevOps: Understanding the Key Differences (PagerDuty) — https://www.pagerduty.com/resources/devops/learn/sre-vs-devops/