一、系统不可能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. Java+Redis 通过Lua 完成库存扣减,创建消息队列,异步处理消息--实战

    需要完成功能 借助redis Stream 数据结构实现消息队列,异步完成订单创建,其中涉及到了缓存(击穿,穿透,雪崩),锁(Redisson),并发处理,异步处理,Lua脚本 IDE:IDEA 20 ...

  2. Mathematica制作和使用程序包

    步骤 这里拿你制作并且使用一个程序包lost为例子 新建一个空白.wl文档,输入代码如下 BeginPackage[ "MyPkg`"] MainFunction::usage = ...

  3. MATLAB信号处理常用函数(转载)

    https://shimo.im/docs/YyRXY8cQdqY8RJvc/ <MATLAB信号处理工具箱>,可复制链接后用石墨文档 App 或小程序打开 嗯这个肯定是随便看看,有个印象 ...

  4. 超全!Python图形界面框架PyQt5使用指南!

    使用Python开发图形界面的软件其实并不多,相对于GUI界面,可能Web方式的应用更受人欢迎.但对于像我一样对其他编程语言比如C#或WPF并不熟悉的人来说,未必不是一个好的工具. 常见GUI框架 P ...

  5. VUE百度地图API调用(手机端、PC端、微信通用)

    百度地图API-示例中心: https://lbsyun.baidu.com/jsdemo.htm#aCreateMap 1.引入百度地图(此处用到的是V2.0版本) 1> 建立一个js文件,例 ...

  6. 5.mapper出错原因

    1.总结:前个星期mapper出错,很大原因是自己的项目结构创建有问题,大项目下应该是spring init那种项目结构形式,但是在创建多模块的时候应该是使用moudle形式的项目结构: 所以自己在运 ...

  7. day13:迭代器&高阶函数(map,reduce,filter,sorted)

    迭代器 1.迭代器的定义: 能被next调用,并不断返回下一个值的对象,叫做迭代器(对象) 2.迭代器的概念: 迭代器指的是迭代取值的工具,迭代是一个重复的过程, 每次重复都是基于上一次的结果而继续的 ...

  8. django中使用celery,模拟商品秒杀。

    Celery是Python开发的简单.灵活可靠的.处理大量消息的分布式任务调度模块 安装: pip install celery # 安装celery库 pip install redis # cel ...

  9. Django笔记二十三之case、when操作条件表达式搜索、更新等操作

    本文首发于公众号:Hunter后端 原文链接:Django笔记二十三之条件表达式搜索.更新等操作 这一篇笔记将介绍条件表达式,就是如何在 model 的使用中根据不同的条件筛选数据返回. 这个操作类似 ...

  10. MyBatisPlus解决逻辑删除与唯一索引的兼容问题

    需求背景 比如有张用户表,在插入或者更新数据的时候,我们需要 用户名称(username),不能重复. 我们首先考虑的是给该字段创建唯一索引 create unique index uni_usern ...