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. 来电科技:基于Flink+Hologres的实时数仓演进之路

    简介: 本文将会讲述共享充电宝开创企业来电科技如何基于Flink+Hologres构建统一数据服务加速的实时数仓 作者:陈健新,来电科技数据仓库开发工程师,目前专注于负责来电科技大数据平台离线和实时架 ...

  2. Cloudera Manager 术语和架构

    ​简介: 本文介绍了Cloudera Manager 的常见术语和架构 Cloudera Manager 术语 为了有效地使用Cloudera Manager,您应该首先了解其术语. 术语之间的关系如 ...

  3. 凭证管理揭秘:Cookie-Session 与 JWT 方案的对决

    概述 在上一篇文章我们聊完了授权的过程,在服务器对客户端完成授权之后,服务器会给客户端颁发对应的凭证,客户端持有该凭证访问服务端,服务器便能知道你是谁,你有什么权限等信息.这一章我们具体聊聊常见的凭证 ...

  4. [GPT] 用 document.querySelector('.xxx') 选择下级的第二个 div 要怎么写

      要选择类名为 .xxx 的元素下的第二个子<div>元素,可以将 querySelectorAll()方法与CSS选择器一起使用. 以下是一个示例: const secondChild ...

  5. [PHP] Laravel-admin 模型表格-列的显示-链接: 关联关系的跳转链接

    link 将字段显示为一个链接. // link方法不传参数时,链接的`href`和`text`都是当前列的值 $grid->column('homepage')->link(); // ...

  6. dotnet 读 WPF 源代码笔记 简单聊聊文本布局换行逻辑

    在 WPF 里面,带了基础的文本库功能,如 TextBlock 等.文本库排版的重点是在文本的分行逻辑,也就是换行逻辑,如何计算当前的文本字符串到达哪个字符就需要换到下一行的逻辑就是文本布局的重点模块 ...

  7. centos7虚拟机部署netcore3.1服务供局域网访问

    如果买了亚马逊.腾讯.阿里等服务器,基本上几分钟就可以跑aspnetcore,外网访问分分钟.但是便宜点的服务器访问速度就没那么理想.这时候就需要考虑零成本的虚拟机部署了,当然这个基本都是局域网做测试 ...

  8. 如何通过前后端交互的方式制作Excel报表

    前言 Excel拥有在办公领域最广泛的受众群体,以其强大的数据处理和可视化功能,成了无可替代的工具.它不仅可以呈现数据清晰明了,还能进行数据分析.图表制作和数据透视等操作,为用户提供了全面的数据展示和 ...

  9. go实现发送邮件验证码

    目录 开启SMTP服务: 发邮件测试 业务实现 开启SMTP服务: QQ邮箱参考下面连接: QQ邮箱如何开通SMTP服务 https://jingyan.baidu.com/article/00a07 ...

  10. linux用户与用户组管理

    linux用户与用户组管理 目录 linux用户与用户组管理 1.linux用户管理 1.1 用户基础 1.2 /etc/passwd:用户信息文件 1.3 /etc/shadow:用户密码信息文件 ...