一、系统不可能100%可靠

系统不可能100%可靠,人都不可能100%健康,更何况我们人类创造的系统?所以,任何软件系统都不应该一味地追求 100%可靠。事实证明,可靠性超过一定值后,再提高可靠性对于一项服务来说,结果可能会更差而不是更好!极端的可靠性会带来成本的大幅提升:比如过分追求稳定性限制了新功能的开发速度和产品交付速度,并且很大程度地增加了投资成本和运维成本。

二、管理风险

不可靠的系统会影响产品的信誉,虽然系统不可能100%可靠,但我们也要减少系统出故障的几率。然而,经验表明,可靠性进一步提升的成本并不是线性增加的:可靠性的下一个改进可能比之前的改进成本增加100倍。基于以上矛盾点,SRE的做法是管理风险,目标是:我们会努力提高一项服务的可靠性,但不会超过该服务需要的可靠性。管理风险旨在寻求快速创新和系统可靠性的平衡,而不是简单地将可靠性最大化。

三、度量风险

SRE的做法是通过一个客观的指标来体现一个系统的可靠性(或者是风险)。对于大多数服务而言,最直接的能够代表风险承受能力的指标就是对于计划外停机时间的可接受水平。对于系统而言,这个指标通常是基于系统正常运行时间比例的计算得出的。

可用性=系统正常运行时间/(系统正常运行时间+停机时间)

使用这个公式,我们可以计算出一年内可接受的停机时间,从而可以使可用性达到预期目标。举例来说,一个可用性目标为99.99%的系统最多在一年中停机52.56分钟,就可以达到预计的可用性目标。当然,并不是所有的系统或者组件适用于这个公式,比如也可以通过请求成功率来定义服务可用性,具体如何度量还要结合实际情况灵活应对。

四、确定服务可靠性目标

如果 100% 不是一个正确的可靠性目标,那么多少才是呢?这其实并不是一个技术问题而是一个产品问题。要回答这个问题,必须考虑以下几个方面:

  • 基于用户的使用习惯,服务可靠性要达到什么程度用户才会满意?
  • 如果这项服务的可靠程度不够,用户是否有其他的替代选择?
  • 服务的可靠程度是否会影响用户对这项服务的使用模式?

为了建立起一个合理的可靠性目标,SRE必须与产品负责人一起努力,将一组商业目标转化为明确的可以实现的工程目标。在实践中,这种转化说起来容易做起来难,SAAS层软件和IAAS层基础设施转化的方式又各不相同。

五、错误预算

SRE和产品负责人必须对每个系统建立起一个合理的可靠性目标。一旦建立,“错误预算”就是“1-可靠性目标”。如果一个服务的可靠性目标是99.99%,那么错误预算就是0.01%,这意味着产品研发部门和SRE部门可以在这个范围内将这个预算用于新功能上线或者产品的创新等任何事情。

错误预算可以用于什么范畴呢?研发团队需要用这个预算上线新功能,吸引新用户。理想情况下,我们应该使用错误预算来最大化新功能上线的速度,同时保障服务质量。这个基本模型建立起来之后,许多常见的战术策略,例如灰度发布、AB测试等手段就全说得通了。这些战术性手段都是为了更合理地使用整个服务的错误预算。

SRE通过引进“错误预算”的概念,解决了研发团队和 SRE 团队之间的组织架构冲突。SRE 团队的目标不再是“零事故运行”,SRE团队和产品研发团队目标一致,都是在保障业务服务可靠性需求的同时尽可能地加快功能上线速度。这个改动虽小,意义却很大。一次“生产事故”不再是一件坏事,而仅仅是创新流程中一个不可避免的环节,两个团队通过协作共同管理它。

SRE方法论之拥抱风险的更多相关文章

  1. Google SRE 读书笔记 扒一扒SRE用的那些工具

    写在前面 最近花了一点时间阅读了<SRE Goolge运维解密>这本书,对于书的内容大家可以看看豆瓣上的介绍.总体而言,这本书是首次比较系统的披露Google内部SRE运作的一些指导思想. ...

  2. 虎牙直播运维负责人张观石 | SRE实践指南

    虎牙直播运维负责人张观石 本文是根据虎牙直播运维负责人张观石10月20日在msup携手魅族.Flyme.百度云主办的第十三期魅族开放日<虎牙直播平台SRE实践>演讲中的分享内容整理而成. ...

  3. 《Google SRE》读后感

    注:这是去年国庆时的一篇读书笔记,最近线上故障频繁,重新读了下这篇读书笔记,觉得<Google SRE>非常棒,遂从简书再搬家到博客园,希望大家受益.我的简书地址:daoqidelv 国庆 ...

  4. SRE之道:创造软件系统来维护系统运行

    引言:本文作者Ben Treynor Sloss,Google 运维团队的高级副总裁,SRE 名称的发明者,在这里提供了他对SRE 的定义.  本文选自<SRE:Google运维解密>. ...

  5. 【项目管理】 项目管理术语总结 (PMP培训笔记)

    1. 项目管理简介 (1) 项目管理定义 项目管理定义 : 将 知识, 技能, 工具 与 技术 应用与项目活动, 以满足项目的要求; (2) 现代项目管理 现代项目管理与传统项目管理区别 : -- 传 ...

  6. 【项目管理】 PMBOK 基础概念 (引论 PMBOK 笔记)

    好紧张, 3月28考试, 全力学 PMP ~~ 一. 项目 1. 项目的定义 项目 : 项目是为创造 独特 的 产品, 服务 或 成果 而进行的 临时性 工作; -- 独特 : 独特性是项目的特征, ...

  7. 「DevOps 转型与实践」沙龙回顾第一讲

    9 月 19 日,CODING 和中国 DevOps 社区联合举办的深圳第九届 Meetup 在腾讯大厦 2 楼多功能圆满结束.本次沙龙以 「DevOps 转型与实践」 为主题,4 位来自互联网.金融 ...

  8. 快速理解DevOps概念和意义-兼谈SRE

    最近几年,由于负责的范围的变化.工作逐渐从某个IT领域或者部门,开始关注到整个IT体系的运转和管理.中间也遇到不少困难,同时也有机会去从更高的层面去学习和实践IT治理.文章主要是总结一下我对DevOp ...

  9. DevOps和SRE的区别

    目录 一.误区 二.DevOps 和 SRE 定义 三.两者产生背景和历史 四.两者的职能不同 五.工作内容不同 六.DevOps 和 SRE 关系 七.附录:技能点 DevOps SRE 一.误区 ...

  10. 国产方法论之 ReDoIt -- 惟思捷

    最近上了PMP课程,感觉受益匪浅,思路有被打开. 很同意一个观点“国人很擅长做事,但是不擅长总结出解决问题的通用框架和方法论”. 为了能提高中小企业生产力我最近成了一个小的软件咨询公司取名“惟思捷”, ...

随机推荐

  1. VUE+.NET应用系统的国际化-多语言词条服务

    上篇文章我们介绍了 VUE+.NET应用系统的国际化-整体设计思路 系统国际化改造整体设计思路如下: 提供一个工具,识别前后端代码中的中文,形成多语言词条,按语言.界面.模块统一管理多有的多语言词条 ...

  2. Axios的js文件的下载教程+相关应用

    下载教程来啦! 1.进入GitHub网站,网址在这里:http://github.com 2.去搜索框搜索Axios,得到如下界面: 3.然后选择这里: 会出现如下界面: 4.点击右方的绿色按钮&qu ...

  3. badapple最后一步,讲黑白图转为字符图,然后输出就行了。

    from PIL import Image import os char_s = list(" .,-'`:!1+*abcdefghijklmnopqrstuvwxyz<>()\ ...

  4. 利用 Rainbond 云原生平台简化 Kubernetes 业务问题排查

    Kubernetes 已经成为了云原生时代基础设施的事实标准,越来越多的应用系统在 Kubernetes 环境中运行.Kubernetes 已经依靠其强大的自动化运维能力解决了业务系统的大多数运行维护 ...

  5. Java对象结构详解【MarkWord 与锁的实现原理】

    Java对象存储在堆(Heap)内存.那么一个 Java对象到底包含什么呢?概括起来分为对象头.对象体和对齐字节.如下图所示:

  6. Skywalking 链路追踪

    Skywalking 根据官方的解释,Skywalking是一个可观测性平台(Observability Analysis Platform简称 OAP)和应用性能管理系统(Application P ...

  7. 领域驱动设计DDD应用与最佳实践

    领域驱动设计(Domain Driven Design,简称:DDD)设计思想和方法论早在2005年时候就被提出来,但是一直没有重视和推荐使用,直到2015年之后微服务流行之后,再次被人重视和推荐使用 ...

  8. [C++STL教程]1.vector容器是什么?实用教程来啦!超简单易懂,拿来就用

    C++与传统的C语言有一个很大的区别,就是新增了标准模板库 STL(Standard Template Library),它是 C++ 标准库的一部分,不需要单独安装,只需要 #include 对应的 ...

  9. Kali中python问题

    Kali中python问题 1.查看python有哪些版本 update-alternatives --display python 2.如果没有,可以去/usr/bin查看kali自带哪些版本 查看 ...

  10. es6数组相关操作

    1. 获取两个数组中某个属性值相等的项 let a=[{name:1},{name:4},{name:3}] let b=[{name:5},{name:4},{name:2}] let index ...