SRE运维解密读书笔记

108 阅读5分钟

书籍介绍

这本书主要介绍SRE运维中一些指导思想和实践方法论。主要分为4个部分:

  • 概览部分:介绍SRE方法论、以及从SRE视角看待生产环境。
  • 指导思想:介绍风险应对、服务质量、琐事、监控、系统演进、发布工程、简单化等方向思想
  • 具体实践:涉及监控、on-call、故障排除、响应以及紧急事故管理等等。
  • 管理:主要介绍如何培训、沟通、团队建设等方面的问题。

第一部分 概览

第二部分 指导思想

第7章 Google 的自动化系统的演进

原文链接:sre.google/sre-book/au…

这章的标题可能有点误导,感觉这章的内容重点是放在自动化上面,而不是演进

自动化的价值

提到自动化,首先进入我脑海的就是无人系统,比如自动驾驶、机械自动化等等。在运维角度的自动化也是类似的作用:如命令执行的自动化,批量将一个脚本(修改)分发到许多机器中,将一个变更应用到多个实例中。在原文中称这个为"一致性":

一致性地执行范围明确、步骤已知地程序——是自动化地首要价值。

自动化地目的当然就是解放人力、让人尽可能得少参与到其中。自然而然带来的一个价值就是成本的降低以及效率的提高。在原文中为"行动速度更快"和"节省时间".
此外,如果无法做到故障的处理,自动化肯定也无从谈起,因为一旦出错就需要人工介入的话怎么算得上是自动化呢?因此自动化的另一个必然的价值就是"自我修复能力".这相比于人工而言,机器的修复的速度必然也是更快的。 此外还需要一个自动化平台,对自动化进行统一管理。

总结文中的价值如下:(当然可能也有许多价值,这些也只是作者举得几个例子)

  • 一致性
  • 平台性
  • 修复速度更快
  • 行动速度更快
  • 节省时间

自动化对Google SRE的价值

这章主要介绍了Google为什么坚定得选择了自动化,以及选择自动化的背景。此外还指出,并不是实际情况下任何组件都是需要进行自动化的。比如某些Demo和一些快速原型并不需要长久运行,这些生命周期短暂的应用也并没有应对自动化做出相应的设计。

自动化的应用案例

运维行业中对自动化的定义: 通过编写代码来解决各种各样的问题。

Google SRE中的自动化,除了上面运维行业的定义之外,更加侧重于:

自动化管理系统的生命周期,而非系统内部的数据,比如部署新的集群服务。

自动化的演进路径:

  • 没有自动化
  • 外部维护的系统特定的自动化系统
  • 外部维护的通用的自动化系统
  • 内部维护的系统特定的自动化
  • 不需要任何自动化的系统

让自己脱离了工作: 自动化所有的东西

讲了Google将Mysql迁移到Borg上面的过程,考虑到Mysql的高可用性而开发了自动故障转移,利用容器化技术,提高了硬件的利用率、自动化程度,以及Mysql集群(主从架构)的高可用性。

舒缓疼痛:将自动化应用到集群上线中

集群上线的难点:

一些服务有超过一百个不同的组件子系统,每一个都具有复杂的网状依赖。某个子系统的配置失败,或者是没有按照其他集群来配置一个系统或组件,将造成潜在的故障发生。 为了加速集群的交付,会大量通过SSH执行Shell脚本来应对繁琐的包分发和服务初始化问题,但这些这些格式自由的Shell脚本会逐渐形成技术债务。

  • 不一致问题解决方案
    • 使用Prodtest(生产测试)检测不一致情况【单元测试】
    • 幂等地解决不一致情况【修复程序周期性得执行,而不会对集群配置造成损害】

专业化的倾向:

自动化代码和单元测试代码一样,当维护团队不再关心它与覆盖的代码仓库同步的时候就会逐渐失效。

从SSH到Admin服务器: SRE从在自己的主目录里维护Shell脚本迁移到了构建评审过的RPC服务器与细粒度的ACL上。做了最小权限的SRE,以及完整的审计过程。

后面关于Borg的内容其实就是K8S的前身,不介绍了。

第三部分 具体实践

第10章 基于时间序列数据进行有效报警

监控是运营一个可靠的稳定服务不可缺少的部分

  • 早期的监控(探针模型):使用脚本进行测试,检查回复信息)和图形化展示。
  • 现代的监控: 自动收集时间序列数据,再通过时间序列操作语言转化为图表和报警信息。