作者 | 悟鹏
来源|阿里巴巴云原生公众号

前言

在技术工作中,对于产品/基础技术研发和 SRE 两种角色,通常会有基于「是否侧重编码」的理解。对于产品研发转做 SRE ,经常会产生是否要「脱离编码工作」的看法,或者认为是否要「偏离对产品/基础技术的推进」。

基于过往的技术研发和稳定性保障的经验,分享下个人对 SRE 的理解,探讨「面向产品/基础技术的研发」和「稳定性保障」两种角色之间的协作关系,更好地为业务服务。

SRE 概述

最早讨论 SRE 来源于 Google 这本书《Site Reliability Engineering: How Google Runs Production Systems》。由 Google SRE 关键成员分享他们是如何对软件进行生命周期的整体性关注,以及为什么这样做能够帮助 Google 成功地构建、部署、监控和运维世界上现存最大的软件系统。

书的豆瓣链接:https://book.douban.com/subject/26875239/

最早讨论 SRE 来源于 Google 这本书《Site Reliability Engineering: How Google Runs Production Systems》。由 Google SRE 关键成员分享他们是如何对软件进行生命周期的整体性关注,以及为什么这样做能够帮助 Google 成功地构建、部署、监控和运维世界上现存最大的软件系统。

Site reliability engineering (SRE) is a discipline that incorporates aspects of software engineering and applies them to infrastructure and operations problems. The main goals are to create scalable and highly reliable software systems.

其中有句形象描述 SRE 工作的描述:

SRE is “what happens when a software engineer is tasked with what used to be called operations.”

即 SRE 的目标是构建可扩展和高可用的软件系统,通过软件工程的方法解决基础设施和操作相关的问题。

在 Google SRE 书中,对 SRE 日常工作状态有个准确的描述:至多 50% 的时间精力处理操作相关事宜,50% 以上的精力通过软件工程保障基础设施的稳定性和可扩展性。

基于上述描述,我对 SRE 的理解是:

  • 职责:保障基础设施的稳定性和可扩展性。
  • 核心:解决问题。
  • 方法:通过操作类事务积累问题经验,通过编码等方式提升问题的解决效率。

软件生命周期

Google SRE 一书中,对软件工程从生命周期角度有一个很形象的描述:

软件工程有的时候和养孩子类似:虽然生育的过程是痛苦和困难的,但是养育孩子成人的过程才是真正需要花费绝大部分精力的地方。

一个软件系统的 40%~90% 的花销其实是花在开发建设完成之后不断维护过程中的。

项目生命周期中,设计和构建软件系统的时间精力占比,通常是少于系统上线之后的维护管理。为了更好地维护系统可靠运行,需要考虑两种类型的角色:

  • 专注于设计和构建软件系统。
  • 专注于整个软件系统生命周期管理,包括从其设计到部署,历经不断改进,最后顺利下线。

第一类角色对应产品/基础技术研发,第二类角色对应 SRE,二者的共同目标均是为了达成项目目标,协同服务好业务。

稳定性保障价值

针对稳定性的影响,直接参与处理客户问题的同学会更有体感:

  • 通过问题发生时客户直接反馈的影响程度、紧急程度,感受到稳定性给客户带来的焦虑。
  • 通过问题处理结束后客户的反馈,感受到客户对稳定性保障的感谢或愤怒。
  • 通过事后在营收状况、客户规模变化,感受到稳定性对业务营收的影响。
  • 通过产品规划的的延期,感受到稳定性对产品迭代的影响。

稳定性保障的价值由此凸显:

  • 保障客户的产品体验,满足客户对约定的可靠性诉求。
  • 加速业务迭代,满足业务对稳定性诉求,业务注意力集中在更快速推出满足客户需求的功能。

SRE 如何保障稳定性

稳定性问题通常会有这些特征:

  • 人为导致,依赖专家经验
  • 一系列因素综合导致
  • 不可避免
  • 100% 保障没有必要

线上稳定性问题,人为操作不当导致的比例很高,集中在 发布 和 线上运维 两个环节,均是高频操作。对于复杂系统,这两个环节对专家经验有较强的依赖。

发生的稳定性问题通常具有系统性的特征,即非单个功能组件缺陷导致,而是由一系列因素综合作用导致,如缺少监控告警导致不能及时感知,缺少日志不能有助于快速定位问题,缺少良好的问题排查流程导致依赖个人能力,缺少良好的协调沟通极致导致问题处理时长增加、客户影响程度加剧等。

问题是不可避免的,流量的突增、服务器/网络/存储的损坏、未覆盖的输入等,均会诱发问题的出现。

业务对外有 SLA,向客户承诺一定程度的稳定性,未达到时按照协议进行赔付,同时问题又不可不免,在满足内部 SLO 标准的前提下继续提升稳定性,会带来更高的实现成本,对业务的收益增量也会更小。

SRE 需要对问题特征有深入理解,系统性设计和实施解决方案,并抓住一段时间内的主要问题进行解决。一种可参考的整体解决方案如下:

落地过程中,可先从如下三个抓手系统解决:

  • 可控性
  • 可观测
  • 稳定性保障最佳实践

可控性方面,包括如下三个主要维度:

  • 发布管理

    • 重点解决发布导致的人为稳定性问题。
    • 包括发布前重要变更评审和发布中变更动作管理等。
  • 操作管理

    • 重点解决黑屏操作导致的人为稳定性问题。
    • 包括统一集群操作入口、集群操作权限管理、集群操作审计等。
  • 设计评审

    • 重点解决软件系统设计阶段应用稳定性保障最佳实践。
    • 包括集群方案评审和重要功能设计评审等。

可观测方面,包括如下几个重要维度:

  • 监控

    • 重点解决软件系统运行态的感知能力。
    • 包括监控收集/可视化系统的搭建和维护等。
  • 日志

    • 重点解决软件系统的问题可排查能力。
    • 包括日志收集/存储/查询/分析系统的搭建和维护等。
  • 巡检

    • 重点解决软件系统功能是否正常的主动探测能力。
    • 包括巡检服务的搭建、通用巡检逻辑的开发维护等。
  • 告警

    • 重点解决异常的及时触达需求。
    • 包括告警系统的搭建、告警配置管理、告警途径管理、告警分析等。

稳定性保障最佳实践,是从历史问题和业界实践方面抽象出意识、流程、规范、工具,在系统设计之初就融入其中,并在系统整个生命周期中加以使用,如通过模板固化最佳实践:

  • 项目质量验收标准
  • 项目安全生产标准
  • 项目发布前 checklist
  • 项目 TechReview 模板
  • 项目 Kick-off 模板
  • 项目管理规范
  • etc.

一个例子:

为了便于理解,可以再针对 check 项形成分级,便于交流和进行项目稳定性评估:

当最佳实践可以通过文档进行规范化,接下来就可以提供工具或服务将其低成本应用,使得稳定性保障最佳实践成为基础设施。SRE 需要在稳定性相关的方法论和实践方面不断迭代,自上而下设计,自下而上反馈,合理、可靠保障稳定性。

共赢,携手服务业务

  • 产品/基础技术研发:专注于设计和构建软件系统。
  • SRE:专注于整个软件系统生命周期管理,包括从其设计到部署,历经不断改进,最后顺利下线。

这两类角色是相互协作、相互服务的关系,拥有共同的目标:满足业务需求,更好服务业务。

SRE 通常会横向支撑多个项目,对线上问题的类型、解决实践有更为全面的理解和思考,基于此会形成最佳实践的理论、工具或服务,为研发提供理论、工具的支持,也可以在此基础上产品化稳定性保障解决方案,为更多的客户服务,创造更大的价值。产品/基础技术研发对业务需求、功能/技术细节有更深入的理解,一方面直接带来业务价值,一方面可通过实践为稳定性保障带来切合实际的需求,进一步和 SRE 共同保障稳定性。

两种类型的角色,需要朝着共同的目标并肩协作,与业务共同发展,实现共赢

小结

SRE 由于工作的性质,在横向方面会服务大量的业务,以实践积累对稳定性保障问题域的深入理解和稳定性保障重要性的深刻认知,在纵向方面会通过技术手段将稳定性保障最佳实践进行沉淀和应用;同时眼光又是与研发、业务一齐向前看,综合技术和管理创造价值。

以上是从个人角度对 SRE 及稳定性保障的理解,重点在于解决问题和创造更大的价值。

References

  • 豆瓣 SRE

  • wikipedia: Site reliability engineering

  • wikipedia: Controllability

  • wikipedia: Observability

  • site: google sre

这是阿里技术专家对 SRE 和稳定性保障的理解相关推荐

  1. 阿里技术专家对 SRE 的解读

    简介:产品/基础技术研发 和 SRE 这两类角色是相互协作.相互服务的关系,拥有共同的目标:满足业务需求,更好服务业务. 前言 在技术工作中,对于产品/基础技术研发和 SRE 两种角色,通常会有基于「 ...

  2. SRE 是如何保障稳定性的

    作者 | 悟鹏 来源 | 阿里巴巴中间件 头图 | 下载于视觉中国 前言 在技术工作中,对于产品/基础技术研发和 SRE 两种角色,通常会有基于「是否侧重编码」的理解.对于产品研发转做 SRE ,经常 ...

  3. 基于阿里云的 Node.js 稳定性实践

    前言 如果你看过 2018 Node.js 的用户报告,你会发现 Node.js 的使用有了进一步的增长,同时也出现了一些新的趋势. Node.js 的开发者更多的开始使用容器并积极的拥抱 Serve ...

  4. js提交出现post错误_阿里云的 Node.js 稳定性实践

    整理人:前端自习课 前言 如果你看过 2018 Node.js 的用户报告,你会发现 Node.js 的使用有了进一步的增长,同时也出现了一些新的趋势. Node.js 的开发者更多的开始使用容器并积 ...

  5. Kubernetes 稳定性保障手册:洞察+预案

    作者 | 悟鹏 来源 | 阿里巴巴云原生公众号 <Kubernetes 稳定性保障手册>系列文章: ​ Kubernetes 稳定性保障手册 – 极简版 Kubernetes 稳定性保障手 ...

  6. 【转】阿里技术专家详解DDD系列 第二讲 - 应用架构

    填坑.谢谢大家对这个系列的期待,持续更新,欢迎关注此账号. 第一篇内容附地址: 阿里巴巴淘系技术:阿里技术专家详解 DDD 系列 第一讲- Domain Primitive​zhuanlan.zhih ...

  7. 阿里技术专家光锥:亿级长连网关的云原生演进之路

    光锥 阿里巴巴新零售淘系技术 读完需要 20 分钟 速读仅需 5 分钟 AServer 接入网关承载整个阿里集团的入口流量,负责亿级用户的长链保活,支持上万路由策略转发,是连接上亿用户与后端几十万服务 ...

  8. 阿里技术专家都铎:一文搞懂技术债

    阿里巴巴技术质量 读完需要 6 分钟 速读仅需 2 分钟 阿里 QA 导读:先快速上线.没时间改.再缓一缓吧.以后再解决.先用临时方案处理--埋下的坑越来越多,不知道哪天哪位同学会踩上一颗雷. 特别赞 ...

  9. 阿里技术专家深入浅出470页Java虚拟机设计与实现文档总结

     阿里技术专家[深入浅出Java虚拟机设计与实现]文档总结 总览: 由于文档内容太多,篇幅限制.有需要完整文档的朋友+薇 mxr6073 无偿分享 详细章节展示:

最新文章

  1. 剑桥大学:机器学习模型部署都有哪些坑?
  2. 姚期智云栖大会首日演讲:为什么我说现在是金融科技的“新”黄金时代
  3. test zero --simulator choose
  4. Linux系统的文件句柄数量问题
  5. Git连载(9)使用Eclipse作为Git客户端
  6. Leetcode分类
  7. 二十、子程序设计(函数)
  8. java包的基本使用
  9. AOP下的权限控制实现
  10. docker redis 删除集群_基于Docker的Redis集群实践
  11. php 抽象 接口类 区别,PHP 抽象類和接口區別
  12. java中文件下载的思路(参考:孤傲苍狼)
  13. html中加音乐 全部过程,HTML中添加背景音乐
  14. 智能工厂信息化系统建设规划
  15. P1563 [NOIP2016 提高组] 玩具谜题
  16. 分析完百年飞机空难数据,我发现了这几条“保命”小秘诀
  17. java医疗保险系统_医疗保险管理系统设计 Java
  18. 使用cryptsetup加密硬盘
  19. 【福利倒计时】春风十里不如程序猿的专属福利,拿了这份,2018值了~
  20. FTP是什么?FTP工具怎么用呢?

热门文章

  1. SSD 通俗易懂介绍
  2. 25、Sql语句执行顺序
  3. 1.6 Java字节流的使用:字节输入/输出流、文件输入/输出流、字节数组输入/输出流
  4. 2021春季每日一题【week6 未完结】
  5. MySQL查询的进阶操作--连接查询
  6. ActiveMQ中Topic生产者
  7. jQuery的单引号双引号
  8. MySQL带EXISTS关键字的子查询
  9. golang mysql proxy_mixer: 一个用go实现的mysql proxy
  10. 史上最全SQL优化方案