SRE的根基起码应该包括:SLO、监控、告警、减少琐事和简单化。

SLO(服务质量目标):用于描述服务可靠性的程度。

SRE的职责并不只是将“所有工作”都自动化,并保持“on-call”状态。

一.入门

系统成熟度级别划分:

1.一个处于开发中的绿地应用,目前还没做过任何生产部署。

2.一个生产系统,在出现问题时,你的监控可以给你发送一些告警。但是,你还没有正式的服务目标,没有错误预算的概念,不过你有的是:一个没有明确的目标,即正常运行时间为100%。

3.一个处于运行中的生产系统,你有一个小于100%的SLO目标。但是,相关团队并没有对他的重要性达成共识,也不知道该怎样利用它来持续改进,换言之,一个没有牙齿的SLO。

为了能够应用基于错误预算的可靠性工程方法,需要达到以下境界:

1.建立一组SLO,组织里的所有利益干系人都认可它适用于对应的产品

2.取得了负责确保该服务落实SLO目标的人员们的认可,他们认为在正常情况下SLO应该可以达成

3.该组织已经承诺,错误预算将会用于决策和优先级排序。这份承诺正式地(官方的)被记录在错误预算策略文档里

4.该组织具备一个持续优化SLO的流程

面向SLI的度量:

服务质量指标(SLI):是你所提供的服务质量的指标。

通常建议:将SLI视为两个数字的比率,良好事件数量/事件总数。例如:

成功的HTTP请求数/总HTTP请求数(成功率)

100ms内完成的gRPC调用数/gRPC调用总数

这种形式的SLI具有一些特别有用的属性。SLI的范围从0%~100%,0%表示无效,100%表示没有任何损失。SLO就是目标的百分比数值,错误预算是用100%-SLO。

首次尝试设定SLI和SLO的时候,也没必要强求一步到位,最重要的目标是能够落地,并且真的开始进行度量了,同时建立起一个有助于你持续改进的反馈循环。

从简单易行的方面下手:

1.挑选一个应用程序,为之定义SLO。如果你的产品包含了许多应用程序,其他的可以随后加入

2.清晰的识别出在各种情况下”用户“是谁。这些人的满意度是你将要优化的方向

3.识别出这些用户常见的与系统交互的方式,即常见任务和关键活动

4.绘制高阶系统架构图,画出那些关键组件、请求流、数据流和重要的依赖关系。将这些组件按下文的类型清单分门别类

组件类型:

1.请求驱动

一个发起互动的用户-发出某些类型的请求,并等待返回结果。

例如:用户通过浏览器与HTTP服务进行互动

2.流水线

一个处理系统-接收输入的信息记录,在完成了处理加工以后,将输出结果存放到其它位置。

例如:一个做优化的系统,定期从关系型数据库中读取数据,并将其写入分布式哈希表;一个视频处理服务,可将视频从一种格式转换为另一种格式

3.存储

一个接收数据(例如:字节、记录、文件、视频)的系统,以后数据可以被检索和取回

SLI从规范到实现:

1.对于第一波SLI,尽量选择那些花费最少工程工作量的东西。对于任何一个SLI都需要具备充足的信息:对于可用性,你需要成功/失败的状态等,通常监控仪表板中可能已经提供了某些信息。

2.为了改进SLO目标,需要有一个信息员,它能够提供用户对服务的满意度,它的范围可以更广:

a.对于故障事件,你可以从公共论坛、支持工单以及客服热线电话等信息源,进行手工统计,得出服务中断次数

b.尝试评估和分析在社交媒体上,用户们的情绪

c.在系统中加入定期的用户满意度调查程序

d.进行面对面的用户访谈调查和采样

3.改进SLO质量,对于手工统计的服务故障次数,如果有支持工单系统的话,也要将其纳入统计范围

4.基于SLO和错误预算的决策,在SLO无法正常达成的时候,应该采取的对策是什么(即错误预算即将耗尽的时候)?在错误预算耗尽时,在错误预算策略文档中应该包含相关措施的描述。策略中通常的描述是:停止特性发布,直到服务重新返回SLO,否则部分/全部技术人员将投入到修复可靠性相关的缺陷上。在极端条件下,在从高层获得批准后,还可以对外宣布团队进入紧急状态,所有的外部请求都会被延期,知道达到退出紧急状态的SLO目标之内了。这些行为包括:改善监控、改善测试、消除潜在的危险性依赖关系,或者通过系统重构消除那些已知的故障类型

最终:

如果服务运行犹如行云流水一般,那就只需要一些微小的监管。此时你就应该将服务移转入较少手动干预支持的等级。你可能只需要持续的对相关事件做出必要的响应,以及进行高阶监管,每天再也不需要对产品给与深入关注了,因此,你就可以专注到其他的更需要SRE支持的系统。

3.SRE.操作手册:基础篇的更多相关文章

  1. Git操作(基础篇)

    Git操作(基础篇) Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目.Git的读音为/gɪt/.Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常 ...

  2. C# 操作Excel基础篇(读取Excel、写入Excel)

    注意事项:Excel的数据表中最多只能储存65535行数据,超出后,需要将数据分割开来进行储存.同时对于Excel中的乱码象限,是由于编码的错误方式导致引起的! 一.读取Excel数据表,获得Data ...

  3. python学习笔记三 文件操作(基础篇)

    文件操作 打开文件 open(name[,mode[,buffering]])   open函数使用一个文件名作为强制参数,然后返回一个文件对象.[python 3.5 把file()删除掉]   w ...

  4. vue详细操作目录-基础篇

    目录结构:-lib-main.js -lib-vue.js index.html 每个网页第一个均为HTML页面,第二个为js文件(主要文件) 1.vue的安装以及语法介绍 2.v-for指令 3.v ...

  5. Python+request 使用pymysql连接数据库mysql的操作,基础篇《十一》

    笔记记录: (1)pymysql中所有的有关更新数据(insert,update,delete)的操作都需要commit,否则无法将数据提交到数据库,既然有了commit(),就一定有对应的rollb ...

  6. GitHub 使用手册 - 基础篇

    缘起 Git已经成为程序员必备技能之一,而GitHub做为做流行的Git仓库托管平台,其不仅提供Git仓库托管,还是一个非常棒的技术人员社交平台,可以通过开源的项目进行协作.交流,是现在优秀的工程师必 ...

  7. VBA 字符串操作(基础篇)

    转自:http://blog.csdn.net/jyh_jack/article/details/2315345 mid(字符串,从第几个开始,长度) 在[字符串]中[从第几个开始]取出[长度个字符串 ...

  8. 小刻也能看懂的Unraid系统使用手册:基础篇

    小刻也能看懂的Unraid系统使用手册 基础篇 Unraid系统简介 Unraid 的本体其实是 Linux,它主要安装在 NAS 和 All in One 服务器上,经常可以在 Linus 的视频里 ...

  9. 前端开发工程师 - 03.DOM编程艺术 - 第1章.基础篇(上)

    第1章.基础篇(上) Abstract:文档树.节点操作.属性操作.样式操作.事件 DOM (Document Object Model) - 文档对象模型 以对象的方式来表示对应的html,它有一系 ...

随机推荐

  1. git中的文件操作

    现在我们的机器上有了一个 真实项目 的 Git 仓库,并从这个仓库中检出了所有文件的 工作副本. 通常,你会对这些文件做些修改,每当完成了一个阶段的目标,想要将记录下它时,就将它提交到仓库. git中 ...

  2. ActiveX 是什么,和IE什么关系

    在推出25年多以后,IE浏览器终于要退役了. 据外媒报道,微软决定自2022年6月15日起,让IE浏览器彻底退出互联网舞台,并全面改用Microsoft Edge浏览器. 关于IE的历史可以参考这篇文 ...

  3. web服务器-nginx配置文件

    web服务器-nginx配置文件 一 nginx配置文件 #启动子进程程序的默认用户 #user nobody #一个主进程和多个工作进程.工作进程是单进程的,且不需要特殊授权即可运行:这里定义的是工 ...

  4. EasyUI 之datagrid 使用 【DataGrid属性解释】

    可选的参数 DataGrid 属性 覆写了 $.fn.datagrid.defaults. 参数名 类型 描述 默认值 title string Datagrid面板的标题 null iconCls ...

  5. Android中的Coroutine协程原理详解

    前言 协程是一个并发方案.也是一种思想. 传统意义上的协程是单线程的,面对io密集型任务他的内存消耗更少,进而效率高.但是面对计算密集型的任务不如多线程并行运算效率高. 不同的语言对于协程都有不同的实 ...

  6. Java Arrays.asList(0,1,2,3,4,5,6,7,8,9).parallelStream().forEach 进行循环获取HttpServletRequest的为Null的解决方案

    Arrays.asList(0,1,2,3,4,5,6,7,8,9).parallelStream().forEach() parallelStream是并行执行流的每个元素,也就是多线程执行,这样就 ...

  7. SpringMVC怎么样设定重定向和转发的?

    (1)转发:在返回值前面加"forward:",譬如"forward:user.do?name=method4" (2)重定向:在返回值前面加"red ...

  8. jvm-learning-运行时数据区-整体

    在jdk8之后之前的方法区有叫做元数据. 每个JVM只有一个Runtime实例,即为运行时环境,相当于内存结构种的运行时数据区 线程 线程是一个程序里的运行单元,JVM允许一个应用有多个线程并行的执行 ...

  9. 会话缓存(Session Cache)?

    最常用的一种使用 Redis 的情景是会话缓存(session cache).用 Redis 缓存会 话比其他存储(如 Memcached)的优势在于:Redis 提供持久化.当维护一个不 是严格要求 ...

  10. Linux 环境下如何查找哪个线程使用 CPU 最长?

    1.获取项目的 pid,jps 或者 ps -ef | grep java,这个前面有讲过 2.top -H -p pid,顺序不能改变