1.2 DevOps和SRE对比

说到SRE,不得不提到另一个运维思路DevOps。其实相比DevOps,SRE的概念稍微早一些。SRE是Ben Treynor在2003年提出的,而DevOps则是由Andrew Shafer 和 Patrick Debois在2008年提出的。相比DevOps在业界的火爆,SRE却很少有运维团队提及,但是随着Google(谷歌)对SRE的全新阐释,SRE重新得到了重视。其实SRE和DevOps的运维理念在很多方面都比较接近,都用到了自动化、监控等技术和手段,目标都是提升产品开发到发布的速度。

1.2.1 DevOps的发展

前面提到了运维领域的工作高度分化,开发和运维在技术堆栈层面的不同,导致开发(Dev)团队和运维(Ops)团队的沟通出现了一定的壁垒。这种沟通协作上的隔阂,随着业务规模的扩大,慢慢地开始影响整个业务团队的工作效率。为了解决这样的问题,DevOps应运而生。

DevOps理念的出现就是为了解决开发团队和运维团队之间的沟通问题,通过去掉两个团队之间的沟通壁垒,实现开发团队和运维团队的融合,进而提升整体的产品迭代速度。

从软件工程演化上来说,DevOps理念有其一定的技术背景。浏览器技术尤其是Chrome的研发,催化了Node.js这样的新技术。部分写HTML网页前端服务的工程师突然发现也可以直接写网页后端服务了,仿佛一夜之间大量的工程师开始用 Node.js 实现从网页前端服务到网页后端服务的功能,并且最终引入了全栈工程师的概念。另外云计算等技术浪潮,从技术上消灭了一大批运维操作需求,也大大降低了开发工程师对运维的需求。

全栈工程师大大地降低了互联网创业公司的人力成本,一时间 Stack Overflow 等技术论坛上关于全栈工程师的话题成了热门,GitHub 上大量的Node.js项目上线。无论是在开发成本还是在社区活跃度方面,Node.js都占有优势,所以迅速成为程序员的新宠。很多公司发现了这种变化带来的好处(可以让一个工程师干多个工程师的工作),很多创业公司在创建初期发现只需要少数几个全栈工程师就可以顶过去10个左右的开发工程师,在这个背景下DevOps理念获得了很多人的喜爱。

1.2.2 SRE的发展

SRE当前落地最好的例子在Google,业界其实对DevOps和SRE的落地有很多困惑。有些团队选择了DevOps,有些团队则选择了SRE。那么SRE和DevOps到底有哪些区别呢?

在很多方面SRE和DevOps有其相似性,又有独立的一面,它们各自有侧重点。

1.减少团队间隙

DevOps聚焦于减少团队的间隙,让所有团队对齐做事流程或做事方式,让所有团队都对接到一个Group,拥有同一个愿景。

SRE聚焦于让所有团队能坐到一起沟通,在全局上统一工具和技术,统一做事方式。

2.接受异常/故障

SRE和DevOps都认为线上异常/故障是无法避免的。DevOps接受这样的情况,认为线上异常/故障可以让团队学习和成长。SRE希望的是平衡每次变更的异常/故障,确保不要发生太多的错误和失败(即使这个故障可以让团队获得成长)。所以和DevOps相比,SRE引入了SLI/SLO的概念。

3.快速迭代

SRE和DevOps的目标都是让产品以更快的速度发布到线上,希望通过高频、小变动的发布,不断地将新产品特性部署到线上环境。DevOps聚焦于变更的逐渐性和可控性,SRE则强调尽可能地减少变更导致的故障。

4.利用自动化的工具和平台

SRE和DevOps都投入了资源聚焦于运维自动化的实现,都在努力开发自动化的工具和平台。希望通过自动化的工具和平台来提升运维效率。

5.监控所有

当线上拥有大量自动化工具和平台的时候,线上的变更频率加快了,整体的工作依赖于所有的监控数据。SRE和DevOps都需要大量的监控数据来确保这些自动化工具和平台的运作是符合预期的。在这个方面SRE 认为线上操作是一个软件问题,这让它们形成了特定的监控逻辑,让监控聚焦于可用性、在线时间、不可用时间等方面。SRE确保所有人都聚焦于如何衡量可用率,推动对可用率问题有针对性地执行改进动作。这个推动涉及开发团队、SRE、项目经理等各个角色。

对于线上运维场景来说,SRE 注重业务的 SLI/SLO,DevOps 则注重业务的失败率和成功率。从业务期望效果上来说,SRE和DevOps虽然注重点不一样,但最终的目标是一致的,都是为了让业务有更好的体验,从而赢得更多的用户,创造更多的价值。为了更好地解释两者的区别,我们从开发和运维这两个独立的领域讲起。从开发和运维出现的第一天开始,开发和运维之间一直有一道空隙,而且随着时间和团队规模的变化,这条空隙慢慢地变成一道巨大的鸿沟,直到有一天两者的矛盾开始对线上业务的稳定性产生巨大的影响。为了解决这个问题,大家纷纷开始想办法去优化这个鸿沟。开发、运维、DevOps、SRE关系图如图1-1所示。

图1-1 开发、运维、DevOps、SRE关系图

从实际工作场景看,如果我们将开发和运维分成两个区域,那么开发和运维中间的空白可以认为是一个巨大的鸿沟。DevOps可以认为是开发团队主动思变去填开发和运维之间的鸿沟,直白地说就是开发团队可以兼做运维。SRE反过来是运维团队突破自身的局限,从用户角度去思考、去贴近开发团队,直白地说就是运维团队懂开发团队的心,让开发团队只聚焦于业务本身。

从日常的工作层面看什么是DevOps和SRE呢?DevOps就是开发团队自己在线上进行版本发布和维护。SRE则是运维团队除做Operator的事情以外,还要投入精力去做一些和线上稳定性相关的平台或工具。稳定性不仅指基础架构稳定,还指线上的所有环境稳定,也包括代码质量、机器性能及安全问题。