DevOps系列:SRE

系列目录

《DevOps系列:开篇》

《DevOps系列:概述》

《DevOps系列:CMDB》

《DevOps系列:CI/CD》

《DevOps系列:监控》

《DevOps系列:SRE》


困局

计算机软件系统离开人通常是无法自主运行的,那要如何去运维一个日趋复杂的大型分布式计算机系统呢?

Dev/Ops分离团队模型

雇佣系统管理员(sysadmin)运维复杂的计算机系统是行业内一直以来的普遍做法,系统管理员的工作主要在于应对系统中产生的各种需要人工干预的事件,以及来自业务部门的变更需求。但随着系统变得复杂,组件越来越多,流量不断上升,相关的事件和变更需求也会越来越多,就需要招聘更多的系统管理员。系统管理员的日常工作和研发工程师的相差甚远,通常归属于两个不同的部门,开发部(Dev)和运维部(Ops)。也就是Dev/Ops分离团队模型。

但是这个模型存在两个无法避免的问题。

  1. 直接成本。随着系统复杂度的增加,部署规模的扩大,团队的大小基本与系统负载成线性相关,共同成长。
  2. 间接成本。即研发团队和运维团队之间的沟通成本。研发团队想要"随时随地发布新功能,没有任何阻拦",运维团队想要”一旦一个东西在生产环境中正常工作了,就不要再进行任何改动“。本质来说,两个团队的目标是互相矛盾的。

解决之道

DevOps

DevOps(开发 Development 与运维 Operations 的组合词)是一种文化、一场运动或实践,强调在自动化软件交付流程及基础设施变更过程中,软件开发人员与其他信息技术(IT)专业人员彼此之间的协作与沟通。它旨在建立一种文化与环境,使构建、测试、软件发布得以快速、频繁以及更加稳定地进行。

SRE

SRE可以理解为DevOps的一种实践,SRE基本是在进行由运维团队完成的工作,但是雇佣具有软件专业知识的工程师,通过创造软件系统的方式来维护系统运行并替代传统模型中的人工操作。本质上,SRE是在用软件工程的思维和方法论,通过设计、构建自动化工具来完成以前由系统管理员人工操作完成的任务。

SRE方法论

1. 确保长期关注研发工作

SRE团队应将运维工作限制在50%以内,并将剩余时间投入到研发项目上

2. 在保障SLO的前提下最大化迭代速度

错误预算,任何产品都不是,也不应该做到100%可靠,部门建立起一个合理的可靠性目标,错误预算等于”1-可靠性目标“,通过错误预算来最大化新功能上线的速度,同时保障服务质量。

3. 监控系统

监控系统是SRE团队监控服务质量和可用性的一个主要手段。一个监控系统应该只有三类输出:

  1. 紧急警报(alert),意味着收到警报的用户需要立即执行某种操作
  2. 工单(ticket),意味着接受工单的用户应该执行某种操作,但是并发立即执行。
  3. 日志(logging),平时没有人需要关注日志信息,但是日志信息依然被收集起来以备调试和事后分析时使用
4. 应急事件处理

可靠性是MTTF(平均失败时间)和MTTR(平均恢复时间)的函数。评价一个团队将系统恢复到正常情况的最有效的指标,就是MTTR。

任何需要人工操作的事情都只会延长恢复时间。但有时候人工介入不可避免时,可以通过事先预案并且将最佳方法记录到”运维手册“上来降低MTTR。

5. 变更管理

变更管理的最佳实践是使用自动化来完成以下几个项目:

  1. 采用渐进式发布机制
  2. 迅速而准确地检测到问题的发生
  3. 当问题发生时,安全迅速的回滚
6. 需要预测和容量规划

需要预测和容量规划是保障一个业务有足够的容量和冗余度去服务预测中的未来需要。

容量规划有几个必需步骤:

  1. 必须有一个准确的自然增长需求预测模型,需求预测的时间应该超过资源获取的时间
  2. 规划中必须有准确的非自然增长的需求来源的统计
  3. 必须有周期性压力测试,以便准确地将系统原始资源信息与业务容量对应起来。
7. 效率与性能

高效地利用各种资源是任何赢利性服务都要关心的,一个服务的利用率指标通常依赖于这个服务的工作方式以及对容量的配置与部署上。如果能通过密切关注一个服务的容量配置策略,进而改进其资源利用率,可以有效地降低系统的总成本。


成为SRE

技能要求

– TCP/IP网络模型 (OSI模型)

– Unix/Linux 系统

– Unix/Linux 系统管理

– 数据结构与算法

– 编程语言

– SQL和数据库管理

– 人员管理

– 项目管理

能力等级

0 – 对于相关的技术领域还不熟悉。

1 – 可以读懂这个领域的基础知识。

2 – 可以实现一些小的改动,清楚基本的原理,并能够在简单的指导下自己找到更多的细节。

3 – 基本精通这个技术领域,完全不需要别人的帮助。

4 – 对这个技术领域非常的熟悉和舒适,可以应对和完成所有的日常工作。

​ 4 – 1 对于软件领域 – 有能力开发中等规模的程序,能够熟练和掌握并使用所有的语言特性,而不是需要翻书,并且能够找到所有的冷知识。

​ 4 – 2 对于系统领域 – 掌握网络和系统管理的很多基础知识,并能够掌握一些内核知识以运维一个小型的网络系统,包括恢复、调试和能解决一些不常见的故障。

5 – 对于该技术领域有非常底层的了解和深入的技能。

6 – 能够从零开发大规模的程序和系统,掌握底层和内在原理,能够设计和部署大规模的分布式系统架构。

7 – 理解并能利用高级技术,以及相关的内在原理,并可以从根本上自动化大量的系统管理和运维工作。

8 – 对于一些边角和晦涩的技术、协议和系统工作原理有很深入的理解和经验。能够设计,部署并负责非常关键以及规模很大的基础设施,并能够构建相应的自动化设施。

9 – 能够在该技术领域出一本经典的书。并和标准委员会的人一起工作制定相关的技术标准和方法。

10 – 在该领域写过一本书,被业内尊为专家,并是该技术的发明人。

Roadmap


参考

Google SRE 运维解密

Google SRE Workbook

Roadmap