SRE 是如何保障稳定性的

作者 | 悟鹏 

来源 | 阿里巴巴中间件

头图 | 下载于视觉中国

前言

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

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

SRE 概述

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

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

从 wikipedia: Site reliability engineering(https://en.wikipedia.org/wiki/Site_reliability_engineering) 中可了解到 SRE 的定义:

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."

即 :

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

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

  • 职责:保障基础设施的稳定性和可扩展性

  • 核心:解决问题

  • 方法:通过操作类事务积累问题经验,通过编码等方式提升问题的解决效率

软件生命周期

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

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

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

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

  • 专注于设计和构建软件系统

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

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

稳定性保障价值

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

  • 通过问题发生时客户直接反馈的影响程度、紧急程度,感受到稳定性给客户带来的焦虑

  • 通过问题处理结束后客户的反馈,感受到客户对稳定性保障的感谢或愤怒

  • 通过事后在营收状况、客户规模变化,感受到稳定性对业务营收的影响

  • 通过产品规划的的延期,感受到稳定性对产品迭代的影响

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

  • 保障客户的产品体验,满足客户对约定的可靠性诉求

  • 加速业务迭代,满足业务对稳定性诉求,业务注意力集中在更快速推出满足客户需求的功能

SRE 如何保障稳定性

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

  • 人为导致,依赖专家经验

  • 一系列因素综合导致

  • 不可避免

  • 100% 保障没有必要

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

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

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

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

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

一种可参考的整体解决方案如下:

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

  • 可控性

  • 可观测

  • 稳定性保障最佳实践

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

  • 发布管理

    • 重点解决发布导致的人为稳定性问题

    • 包括发布前重要变更评审和发布中变更动作管理等

  • 操作管理

    • 重点解决黑屏操作导致的人为稳定性问题

    • 包括统一集群操作入口、集群操作权限管理、集群操作审计等

  • 设计评审

    • 重点解决软件系统设计阶段应用稳定性保障最佳实践

    • 包括集群方案评审和重要功能设计评审等

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

  • 监控

    • 重点解决软件系统运行态的感知能力

    • 包括监控收集/可视化系统的搭建和维护等

  • 日志

    • 重点解决软件系统的问题可排查能力

    • 包括日志收集/存储/查询/分析系统的搭建和维护等

  • 巡检

    • 重点解决软件系统功能是否正常的主动探测能力

    • 包括巡检服务的搭建、通用巡检逻辑的开发维护等

  • 告警

    • 重点解决异常的及时触达需求

    • 包括告警系统的搭建、告警配置管理、告警途径管理、告警分析等

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

  • 项目质量验收标准

  • 项目安全生产标准

  • 项目发布前 checklist

  • 项目 TechReview 模板

  • 项目 Kick-off 模板

  • 项目管理规范

  • etc.

一个例子:

维度

评估项

可观测

  1. 是否提供了标准的 metrics API?

  2. 是否可以将日志持久化到日志系统?

  3. 是否配置了监控?

    1. 是否有对跌零因子的监控?

    2. 是否有服务降级的监控?

    3. 是否有限流的监控?

    4. 是否配置了对关键依赖方的可用性监控?

    5. 监控是否分级?

  1. 是否配置了告警?

    1. 是否有对跌零因子的告警?

    2. 是否有服务降级的告警?

    3. 是否有限流的告警?

    4. 是否配置了对关键依赖方的可用性告警?

    5. 告警是否分级?

  1. 是否可以配置巡检?

  2. 使用使用了 structured log 便于进行 log 的查询、分析?

可灰度

  1. 是否使用了具有灰度能力的 workload?

可回滚

  1. 是否使用了均有回滚能力的 workload?

  2. 组件是否进行了版本控制?

  3. 配置是否进行了版本控制?

可保护

  1. 是否有限流措施?

  2. 是否有降级措施?

  3. 是否配置了探针?

    1. 是否配置了 livenessProbe?

    2. 可被访问时,是否配置了 readinessProbe?

    3. 初始化耗时时,是否配置了 startupProbe?

  1. 是否有快速失败的能力?

    1. 是否有超时结束能力?

  1. 依赖方不可用时:

    1. 是否会持续对依赖方带来日常或更高压力?

    2. 是否会对上游带来反向压力?(如连接数、处理延时)

  1. 己方不可用时:

    1. 对上游的影响是否可控?

    2. 恢复时是否可以控制请求压力?

  1. 是否可以无损重建?

  2. 是否多副本部署?

  3. 是否配置了非亲和性?

  4. 是否跨 AZ 部署?

  5. 是否有处理预案

  6. 是否均有访问管理?

  7. 服务是否稳定性运行,是否会影响数据资产?

  8. 服务是否稳定性运行,是否会泄露敏感信息?

  9. 是否区分组件处于关键链路还是旁路?

  10. 是否有「爆炸半径」的整理?

  11. 是否有「跌零因子」的整理?

可控成本

  1. 是否配置了 limit resources?

  2. 变更是增加还是降低用户成本?

  3. 变更是增加还是降低平台成本?

易于运维

  1. 是否可以做到变更配置时无需重建实例?

  2. 是否有白屏化运维途径?

  3. 是否有「端到端管控链路」流程图

  4. 是否有「端到端数据链路」流程图

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

级别

标准

L0

  • 可观测、可灰度、可回滚 均不满足

L1

  • 可观测、可灰度、可回滚 满足 50% 以上要求

L2

  • 可观测、可灰度、可回滚 满足 90% 以上要求

L3

  • 可观测、可灰度、可回滚 满足 90% 以上要求

  • 可保护满足 50% 以上要求

L4

  • 可观测、可灰度、可回滚 满足 90% 以上要求

  • 可保护满足 90% 以上要求

  • 可控成本满足 50% 以上要求

L5

  • 可观测、可灰度、可回滚 满足 90% 以上要求

  • 可保护满足 90% 以上要求

  • 可控成本满足 90% 以上要求

当最佳实践可以通过文档进行规范化,接下来就可以提供工具或服务将其低成本应用,使得稳定性保障最佳实践成为基础设施。

SRE 需要在稳定性相关的方法论和实践方面不断迭代,自上而下设计,自下而上反馈,合理、可靠保障稳定性。

共赢,携手服务业务

再回顾下软件系统生命周期中的两类角色:

  • 产品/基础技术研发:专注于设计和构建软件系统

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

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

SRE 通常会横向支撑多个项目,对线上问题的类型、解决实践有更为全面的理解和思考,基于此会形成最佳实践的理论、工具或服务,为研发提供理论、工具的支持,也可以在此基础上产品化稳定性保障解决方案,为更多的客户服务,创造更大的价值。

产品/基础技术研发对业务需求、功能/技术细节有更深入的理解,一方面直接带来业务价值,一方面可通过实践为稳定性保障带来切合实际的需求,进一步和 SRE 共同保障稳定性。

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

小结

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

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

References

  • 豆瓣 SRE

    https://book.douban.com/subject/26875239/

  • wikipedia: Site reliability engineering

    https://en.wikipedia.org/wiki/Site_reliability_engineering

  • wikipedia: Controllability

    https://en.wikipedia.org/wiki/Controllability

  • wikipedia: Observability

    https://en.wikipedia.org/wiki/Observability

  • site: google sre

    https://sre.google/

福 利

CSDN给大家发压岁钱啦!

2月4日到2月11日每天上午11点

价值198元的芒果TV年卡,价值99元的CSDN月卡现金红包,CSDN电子书月卡等奖品大放送!百分百中奖

电脑端点击链接参与:

https://t.csdnimg.cn/gAkN

更多阅读推荐

  • 如何写出让 CPU 跑得更快的代码

  • 新春聊一下:技术架构与架构师角色的诸多思考

  • 在存储器的层次结构里,谁最快,谁最贵,谁最大?

  • 云原生时代的流水线框架 Argo

  • 阿里的 RocketMQ 如何让双十一峰值之下0故障

  • 从 Serverfull 到 Serverless,发生了什么

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/515588.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三步在阿里云上面搭建一套个性化推荐系统

背景信息 互联网时代个性化推荐已经渗透到人们生活的方方面面,例如常见的“猜你喜欢”、“相关商品”等。互联网能够对用户投其所好,向用户推荐他们最感兴趣的内容,实时精准地把握用户兴趣。目前很多成功的手机APP都引入了个性化推荐算法&am…

漫画通信:惊呆了,手机登录还可以这么玩!

原文链接 本文为云栖社区原创内容,未经允许不得转载。

备战春招:阿里一面,给了几条SQL,问需要执行几次树搜索操作?

作者 | 捡田螺的小男孩来源 | 捡田螺的小男孩有位朋友去阿里面试,他说面试官给了几条查询SQL,问:需要执行几次树搜索操作?我朋友当时是有点懵的,后来冷静思考,才发现就是考索引的几个基础知识点~~ 本文我们分九个索引知…

阿里高级技术专家:如何结构化地思考、做事、成长?

作者 | 承风 阿里巴巴高级前端技术专家 导读:建立结构化的思维,以结构化的模式驱动工作,以结构化的体系构建自身的能力,小到写 PPT、大到为业务提供更大价值,都是非常值得我们使用的模式。阿里巴巴数字供应链事业部高…

都在说云原生,它的技术图谱你真的了解吗?

来源 | K8sMeetup社区作者 | Catherine Paganini翻译 | Sarah(K8sMeetup)校对 | 木子(才云)如果你研究过云原生应用程序和相关技术,大概率你遇到过 CNCF 的云原生全景图。这张全景图技术之多规模之大无疑会让人感到震惊…

“玄姐”孙玄,特立独行的架构师

云栖号资讯:【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 简介: 曾任58集团技术委员会主席、转转首席架构师的孙玄,一头飘逸长发,江湖人称“玄姐”。…

后端数据库中返回date日期时 前端显示为一串数字

解决方法:加上JsonFormat注解 出参时自动转换为设定格式 问题解决 ! /*** 开始时间*/JsonFormat(pattern "yyyy-MM-dd HH:mm:ss", timezone "GMT8")private Date startTime;(也可以把数据库的格式变成字符串存入数据库…

从Android到Java:如何从不同视角解决问题?

云栖号资讯:【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 阿里妹导读:Android 转 Java 开发在技术栈上有哪些差异?思考和解决问题时又会有怎样的转变&#xff1…

为什么我直接在servlet里面直接输出message不乱码,而跳转到web页面就出现乱码,而且存到数据库的也是乱码,我尝试了网上的各种方法,还是不成功。。

为什么我直接在servlet里面直接输出message不乱码,而跳转到web页面就出现乱码,而且存到数据库的也是乱码,我尝试了网上的各种方法,还是不成功。。 public class HandleRegister extends HttpServlet { public void init(Servle…

CPU 是如何执行任务的?

作者 | 小林coding来源 | 小林coding头图 | 下载于视觉中国前言关于 CPU ,你清楚下面这几个问题吗?有了内存,为什么还需要 CPU Cache?CPU 是怎么读写数据的?如何让 CPU 能读取数据更快一些?CPU 伪共享是如何…

@DateTimeFormat和@JsonFormat注解

文章目录一、场景复现1. 准备实体vo2. 定义⼀个Controller3. 请求测试二、⼊参格式化2.1. 日期转换2.2. 请求测试三、 出参格式化3.1. 现象3.2. 改造3.4. 测试验证3.5. 时间少了8小时3.6. 解决方案3.7. 效果图一、场景复现 1. 准备实体vo 定义⼀个pojo,它有⼀个 j…

初学jsp课,一个基于jsp+javabean+servlet+sql server小型房源网站,实现了用户表,房源表,及留言板的增删查改。使用deamwear编译器

1 设计目的 《Web应用开发课程设计》是实践性教学环节之一,是《Web程序设计》课程的辅助教学课程。通过课程设计,使学生掌握Web网站的基本概念,结合实际的操作和设计,巩固课堂教学内容,使学生掌握软件开发的基本概念、…

使用AnalyticDB轻松实现以图搜图和人脸检索

1. 背景 以图搜图在生活中有着广泛的应用, 当我们在电视上看到有人穿着一件美丽的裙子或者帅气的球鞋也想拥有时, 我们可以拍张照片然后打开淘宝然后上传照片就可以快速的找到这个商品. 我们看到一张电影截图想知道出处的时候只要将图片粘贴到百度或者谷歌的图搜框中就可以找到…

年后跳槽季,如何在编程面试中大获成功?

【CSDN 编者按】作为技术人,在面向编程面试之前,应该如何进行相应的准备?作者 | Noj Vek 译者 | 弯月责编 | 屠敏出品 | CSDN(ID:CSDNnews)本文的作者经历过100多场面试,而且也担任过50多场面试…

HbuilderX中 华为手机 真机调试

文章目录一、场景浮现1. 真机运行2. 问题描述二、解决方案2.1. 终端设置2.2. 开启开发者模式2.3. 开启USB调试2.4. 连接模式选择2.5. 重新运行2.6. 选择设备2.7. 手机真机调试一、场景浮现 1. 真机运行 直接运行Hbuilder中的“运行”,无法显示对应设备 2. 问题描述…

一云多端,连接万物:智能接入网关2.0升级技术揭秘

一云多端,连接万物:全新发布SAG-APP和SAG-vCPE 阿里云提供了多种产品形态支持各种场景上云,SAG2.0发布了SAG-APP支持各种操作系统的终端接入上云,同时发布了SAG-vCPE支持3rd云资源通过虚拟机或容器环境接入阿里云,本次…

网上购物商城 html+css+MVC+sql server+idea编辑器实现。

最近又找到了jsp学习结束后时,最后做的一个网上购物商城小项目,总体分为用户和管理员两个模块,用户注册之后登录,进行商品浏览加购物车并购买评价,管理员负责商品的增删查改以及订单的发货等等,可以说功能比…

幕享手机投屏

前提:手机电脑连接同一个局域网或者无线网 https://letsview.cn/

通俗的讲,这就是容器CPU隔离的底层实现机制

来源 | 刘超的通俗云计算责编 | 寇雪芹头图 | 下载于视觉中国在真正的生产实践过程中,对于CPU的隔离要求比容器的默认策略要严格的多,因而需要对于Linux内核底层机制有所理解,才能很好的做CPU隔离,甚至在离线业务混合部署隔离等策…

OAM创始团队:揭秘OAMKubernetes实现核心原理

作者 | Andy Shi(阿里云高级技术专家)、天元(阿里云技术专家) 今年 5 月,阿里云和微软云共同宣布,Open Application Model (OAM) 社区携手知名混合云管理项目 Crossplane 社区&…