SRE Google 运维解密,是 SRE 领域的启蒙之作,讲述了 Google 的 SRE 实践,SRE 就是从 Google 流传出来的。本文是读书笔记,第一篇,概述 SRE 方法论。帮大家把书读薄,当然,也加入了一些我的个人理解,希望对你有帮助。

为何需要 SRE

传统的 sysadmin 的方式,偏手工运维,机器越多所需运维工程师越多,对于 Google 的体量(毛估估现在大概有几百万台机器)和增长速度,成本(人工成本、管理成本等)不可承受。

因为目标不同、技术背景不同、对可靠性理解不同,传统运维和产品研发团队之间,很容易形成巨大的鸿沟,有时会上升到部门之间的信任和尊重层面。比如拿变更举例,研发部门想要:“随时随地发布新功能,没有任何阻拦”,传统的运维团队想要的则是:“一旦一个东西在生产环境中正常工作了,就不要再做任何改动”。这样的两个团队,是没法很好的合作的,尤其是在 Google 的体量和增速下,得改。解法就是 SRE。

Google SRE 概述

Google SRE 的创始人是 Benjamin Treynor Sloss,研发出身,2003 年加入 Google,被任命领导一个 7 人小组(现在,SRE 团队已经上千人了),负责“生产环境维护”。Google 当时的增速是非常快的,如果按照传统的玩法,招人的速度完全无法匹配机器增速,怎么做这个“生产环境维护”的工作呢?

Benjamin Treynor 是资深研发,自然就会考虑用软件工程的手段来解决遇到的各类问题,所以 Google SRE 首先,得具备研发技能,用研发技能来解决各类生产维护重复工作。他们具备如下特质:

  • 对重复性、手工性的操作有天然的排斥感
  • 有足够的技术能力快速开发出软件系统以替代手工操作

但是,做过运维的人都知道,总有一些日常运维的工作无法避免,有时根本没时间写代码,比如处理工单、手工操作,尤其是在基础设施平台工程不完备的情况下。这可咋整?

Google 提出了 50% 的原则,即日常运维的时间不能超过 50%,即需要至少拿出一半以上的时间来做工程研发,釜底抽薪,用工程手段解决手工操作。那有的时候,日常运维工作繁重,超过了 50% 时间分配原则,怎么办?把相关工作交给产品研发团队的 leader,让他来帮忙消化掉一部分工作。研发 leader 一看,运维侧的工作好多啊,是不是我们的软件不够鲁棒、很多应该自动处理的逻辑没有自动处理,就会去改进,形成正向循环。当然,这个机制需要公司管理层强力推动。如果遇到一个研发团队说,运维的活你们运维干不完,干不完可以招人啊,管理层也不作为,就完了。

DevOps 还是 SRE

Benjamin Treynor 认为,SRE 是 DevOps 模型在 Google 的具体实践,带有一些特别的扩展

SRE 技能组成

实际的人员组织来看, SRE 团队分两类人,一类就是纯研发,一类是具备八九成研发能力,同时还懂一些 UNIX 知识、网络知识。如果国内运维团队想要转型为 SRE 组织,就这个技能要求就很难达成(其实除了 Google,其他国外的公司也很难做到)。咋办?

国内的组织的做法:一个人能力有限,弄个团队来顶上,团队里既有只懂研发的人,又有只懂网络的人,又有只懂操作系统的人,应该就可以了吧。个人的看法是,这个做法基本是对的,但是不完全够。因为虽然是一个团队,但是不同的小组或个人的知识仍然是无法完全共享的,这使得在做工程决策、实践的时候,没法做到像 Google SRE 那样如臂指使。

稍微改进一下的做法是:团队里仍然要招聘一两个 SRE 专家,姑且称为 SRE COE,既懂开发又懂运维的那种,统筹所有工作,然后那些单方面的技能人才,辅助 SRE COE 来完成工作,相对会更靠谱一些。

SRE 方法论

SRE 团队的职责:可用性改进,廷迟优化,性能优化,效率优化,变更管理,监控,紧急事务处理以及容量规划与管理。要转型的团队注意了,用软件工程的手段达成以上目标,就说明你们团队转型成功了:)

在保障服务 SLO 的前提下最大化迭代速度

变更是万恶之源,生产环境中的故障,大概有 70% 都是变更引起的。屁股决定脑袋,运维团队就希望尽量别有变更,研发团队要上线新 feature,那就需要频繁变更,咋整?Google 提出了 “错误预算” 的理念。

产品首先得确定 SLO,比如某个服务的季度 SLO 目标是 99.99%,那不可用的 Quota 预算就是 0.01%,每个月按照 30 天来算,一个季度 90 天,允许的不可用分钟数是:

90 * 24 * 60 * 0.01% = 12.96 分钟 ≈ 13 分钟

只要服务的季度不可用时长低于 13 分钟,随便折腾,但是一旦超过了 13 分钟,说明 Quota 用光了,就不能随意上线了,非得要上线,行么?也行,VP 审核通过吧。那意思就是:你看这个研发团队,上线老是出问题,不可信赖,现在又要上线了,SRE 是不准备放行了,VP 大佬来决策吧,VP 大佬也非要允许上,那就上。

咋样,这个方法听着不错吧。贵司可以试试。这里要注意,服务要想减少故障时长,是需要有良好的基础设施保障的,比如研发上线发现问题,想回滚,结果部署系统不可靠,这找谁说理去。所以,错误预算这个方法可以用,但是不同的公司,SLO 的阈值得谨慎制定,没有金刚钻不揽瓷器活,基础设施很烂,SLO 就定低点吧。

SLO 谁来定?

SLO 应该是业务来定,但是 SRE 要提供一些信息,告诉业务达成什么样的 SLO 要付出什么样的成本,业务有了这些信息了,再来确定制定什么样的 SLO。比如某个业务不盈利,就是个实验性质的业务,SLO 低一点很正常,具体要看业务本身的决策,所以 SLO 的制定需要业务拍板。

监控系统

核心要学习的是:每个需要通知到人的告警,必须对应 Runbook,即预案手册。如果一个告警发出来,没有人响应,没有相应的动作执行,这个告警就是无效的。Runbook 链接一般配置在告警规则里,比如 Grafana、Nightingale、Datadog 的告警规则配置,都支持这么干。告警规则的 Runbook 预置率是一个很好的告警治理指标。

有些告警可以不用立即处理,但是至少得创建个工单留待后续处理。

应急事件处理

提前准备好 Runbook,即预案手册,比即兴发挥,效果好 3 倍。

变更管理

要自动化!要自动化!要自动化!自动化完成以下项目:

  • 采用渐进式发布机制
  • 有良好的监控系统,可以快速发现问题
  • 当问题发生时,可以安全回滚

需求预测和容量规划

要考虑的点包括:

  • 自然增量:随着用户自然增长带来的增量
  • 非自然增量:比如市场活动
  • 周期性压测:这点很关键,这点很关键,这点很关键,通过压测才知道你的系统瓶颈在哪个微服务,才能把系统原始资源和业务容量对应起来

资源部署

扩容需要部署资源,变更也需要,这就是 Borg 的作用,其他公司可以采用类似 Kubernetes 的方案。不管使用什么方案,能够快速、正确的完成部署,最大化资源使用,就可以了。

效率与性能

SRE 也需要关注服务性能,提升了性能,其实就是提高了资源利用效率,同样的硬件可以支撑更大量的客户。NetFlix 有专门的 Performance 工程师,Google 的话 SRE 一并干了这个事情。

小结

SRE 团队的职责:可用性改进,廷迟优化,性能优化,效率优化,变更管理,监控,紧急事务处理以及容量规划与管理。我们要用软件工程的思维来解决这些问题,完活。留个问题:

SRE 要不要修改业务代码?

比如增加一些监控埋点,或者优化一个算法提升软件性能,或者换了一个更合理的存储?欢迎大家留言讨论 :)

SRE Google 运维解密读书笔记一:SRE 方法论概述的更多相关文章

  1. 读SRE Google运维解密有感(四)-聊聊问题排查

    前言 这是读“SRE Google运维解密”有感第四篇,之前的文章可访问www.addops.cn来查看.今天我们来聊聊“问题排查”这个话题,本人到目前为止还在参与一线运维的工作,遇到过很多“稀奇古怪 ...

  2. 读SRE Google运维解密有感(三)

    前言 这是读“SRE Google运维解密”有感第三篇,之前的文章可访问www.addops.cn来查看.我们今天来聊聊“on call”也就是运维值班制度, 本人到目前为止也还在参与一线运维的值班, ...

  3. 读SRE Google运维解密有感(二)

    前言 这是读“SRE Google运维解密”有感第二篇,第一篇参见 这本书最近又读了几章,结合自己的经历,有些地方真的能感同身受,有些地方也惊叹SRE充满辩证的思想,总之SRE是好一本好书,会给你很大 ...

  4. 读SRE Google运维解密有感(一)

    前言 这几天打算利用碎片时间读了一下"SRE Google运维解密"这本书,目前读了前几章,感觉收获颇多,结合自己的工作经历和书中的要点,写一些感悟和思考 SRE 有关SRE我就不 ...

  5. google运维解密

    1.运维团队与开发团队的矛盾: 运维追求业务的稳定.开发更关注新功能的添加与版本的快速迭代.但是由于业务更新,有很大可能导致故障.从本质上来说,两部门是矛盾的. deops应该是: 1.对重复性工作有 ...

  6. 《Redis开发与运维》读书笔记

    一.初始Redis 1.Redis特性与优点 速度快.redis所有数据都存放于内存:是用C语言实现,更加贴近硬件:使用了单线程架构,避免了多线程竞争问题 基于键值对的数据结构,支持的数据结构丰富.它 ...

  7. SRE_ Google运维解密

    # 第IV部分 管理 #系统可用性时间表 # 专用术语 SLO:服务等级目标 LCE(Land-Covered Earth):紧急检修登陆艇 # 紧急事故管理 一次流程管理良好的事故 # 东西早晚要坏 ...

  8. python自动化运维技术读书笔记

    import psutilprint(psutil.cpu_times(percpu=True)) #使用cpu_times方法获取CPU完整信息需要显示所有逻辑CPU信息 import psutil ...

  9. Day1 老男孩python自动化运维课程学习笔记

    2017年1月7日老男孩python自动化运维课程正式开课 第一天学习内容: 上午 1.python语言的基本介绍 python语言是一门解释型的语言,与1989年的圣诞节期间,吉多·范罗苏姆为了在阿 ...

  10. python的运维交流学习笔记

    #!/usr/bin/env | #!/usr/bin/python#coding:gbk #python 运维练习 #需求: #1.利用python实现自动监控服务器性能 #2.并将监控到的数据进行 ...

随机推荐

  1. EasyNLP集成K-BERT算法,借助知识图谱实现更优Finetune

    导读 知识图谱(Knowledge Graph)的概念⾸次出现2012年,由Google提出,它作为⼀种⼤规模语义⽹络, 准确地描述了实体以及实体之间的关系.知识图谱最早应⽤于搜索引擎,⽤于准备返回⽤ ...

  2. Go Mysql Driver 集成 Seata-Golang 解决分布式事务问题

    简介: 2020 年 4 月,我们开始尝试实现 go 语言的分布式事务框架 Seata-Golang.众所周知,Seata AT 模式以无业务代码侵入的特点,被广大开发者推崇.Java 版 Seata ...

  3. OceanBase再破纪录!核心成员陈萌萌:坚持HTAP就是坚持我们做数据库的初心

    简介: 2021年5月20日,据国际事务处理性能委员会(TPC,Transaction Processing Performance Council)官网披露,蚂蚁集团自主研发的分布式关系型数据库Oc ...

  4. 万物智联时代的终端智能「管家」 重磅升级:混合云IoT一体机

    ​简介: 「混合云IoT一体机」边缘部署.开箱即用.安全稳定.智管易用,通过定制软件和硬件相结合,预先定制.集成.测试和优化,实现快速部署和远程运维,并提升后续系统可用性和运维效率,是万物互联时代企业 ...

  5. dotnet 警惕使用 StackTrace 加获取方法标记 Attribute 特性在 Release 下被内联

    大家都知道,在 dotnet 里的 Debug 下和 Release 下的一个最大的不同是在 Release 下开启了代码优化.启用代码优化,将会对生成的 IL 代码进行优化,同时优化后的 IL 也会 ...

  6. LVGL 字体

    一.LVGL 内置字体 LVGL有几种不同大小的内置字体,可以通过 LV_FONT_MONTSERRAT_X 定义在 lv_conf.h 中启用. 普通字体 包含所有ASCII字符,度数符号(U + ...

  7. Oracle和达梦:根据外键名字查询表名

    根据外键名字查询表名 select * from user_cons_columns cl where cl.constraint_name = '外键名';

  8. navicat15安装以及破解

    一. 下载 链接:https://pan.baidu.com/s/173rqp-DZJ3Om_QNN0NxbEg 提取码:zop2 二. 安装 2.1 解压刚才的文件 2.2 安装navicat15. ...

  9. 「IT运维迷宫」那些让人头疼的常见问题与破局之道

    在数字化浪潮汹涌的今天,IT运维如同一座错综复杂的迷宫,稍有不慎便可能迷失方向.作为企业运营的幕后英雄,运维团队常常面临着各种突如其来的挑战.本文将带你深入探索IT运维中的那些常见"坑&qu ...

  10. Threading Programming Guide:Thread Management

    Thread Cost 创建线程是有开销的,这些开销主要包括空间上的开销以及时间上的开销:在kernel里面分配存储空间,用来存储线程相关的数据和属性:线程的栈空间:线程创建的时间.总结如下: Ite ...