SRE和DevOps不是一回事
很多人把SRE(Site Reliability Engineering)和DevOps混为一谈,觉得都是让开发管运维、运维写代码。但真正在线上出问题时,两者的处理方式、责任边界和做事逻辑其实差别挺大。
比如上周你公司的服务突然500错误,报警响成一片。这时候你是拉DevOps团队来查,还是叫SRE上?可能两边人都会来,但他们想的问题不一样。
DevOps更像一种协作文化
DevOps本身没有固定岗位,它强调的是开发和运维之间的打通。说白了,就是别再“开发写完代码甩锅运维,运维出了事怪开发不考虑生产环境”。
一个典型的DevOps实践是CI/CD流水线。比如你们用Jenkins或GitLab CI自动构建、测试、部署。开发提交代码,自动跑单元测试,通过后推到预发环境,再一键上线。这个过程减少了人为操作失误,也加快了发布频率。
stages:\n - build\n - test\n - deploy\n\nbuild-job:\n stage: build\n script: \n - npm install\n - npm run build这套流程谁来建?可能是运维出身的工程师,也可能是开发主动搭的。重点是“大家一起对结果负责”,而不是划清界限。
SRE是具体的工程实践岗位
Google搞出来的SRE,本质上是用软件工程的方法做运维。SRE不是兼职角色,而是实打实的岗位,有明确指标要扛。
比如SRE最常提的就是SLI/SLO/SLA。你们服务的可用性目标是多少?99.9%?那一年只能宕机8小时多一点。如果超了,SRE就得写事后报告(Postmortem),分析根因,定改进项。
再比如,SRE会设定“错误预算”。如果这个月还剩1%的容错空间,可以允许一次高风险发布;但如果已经快用完了,就得劝开发再等等。这种机制让稳定性变得可量化,而不是靠拍脑袋。
故障现场:两种思路的不同应对
假设某个API接口突然延迟飙升。DevOps团队可能第一反应是:“是不是最近改了配置?回滚试试。”他们关注的是如何快速恢复,流程是否顺畅。
SRE则会先看监控大盘:流量有没有突增?依赖的数据库连接池是不是满了?有没有慢查询?他们会用工具自动触发限流或降级,同时记录事件时间线,确保每个操作都可追溯。
等服务恢复后,SRE还会推动把这次故障变成自动化检测规则,比如在Prometheus里加一条告警:api_request_duration_seconds > 2 就触发通知。
工具链重叠,但目标不同
两者都会用Kubernetes、Prometheus、Ansible这些工具,但出发点不一样。DevOps用K8s是为了实现灵活部署和资源调度,提升交付效率;SRE用K8s更多是为了标准化运行环境,减少“雪崩服务器”带来的不确定性。
你可以理解为:DevOps关心“怎么更快地上线”,SRE关心“上线后别把我搞崩”。
现实中很多公司其实是“DevOps + SRE”混合模式。中小型团队没那么多人力专门设SRE岗位,就由DevOps工程师兼顾稳定性工作。但随着系统复杂度上升,尤其是涉及高并发、强一致性的场景,专职SRE的角色就会凸显出来。
说到底,DevOps是打破墙的文化运动,SRE是砌新墙的建筑工程。一个拆,一个建,最后都是为了让系统更稳、人少背锅。