前言

面试的时候经常问到的一个点就是怎么保障线上的稳定性。这里就按照我的经历结合看过的一些书总结一下。

SRE 的定义

SRE 本身就是要用软件工程的方法论来解决运维领域的问题。我觉得作为一个职场人,很多时候我们不能把自己局限在自己职位的视角,要以更多的角度去看问题,才能更好的解决问题。我对自己的定位就一个软件工程从业者。就 SRE 来说,要能从整个软件生命周期来看待运维所面临的问题。
下面就来说说保障稳定性,主要从以下的方面入手:

软件生命周期管理

  • SRE 在项目初期就参与进去,在设计阶段就应该把高可用,可扩张性等非功能性需求考虑进去
  • 产品的不同阶段对可用性要求不同,不能一概而论,我们工作的首要目标是辅助业务成功

CICD

问题越早发现,解决的成本就越低

  • 做好 CI,并且严格执行,比如单元测试通过率,代码重复率等必须明确标准
  • 将部署和发布解耦,比如金丝雀,灰度,蓝绿等
  • 功能开关

请求的全生命周期

也可以称之为端到端的请求监控

  • 客户端打点的监控
  • 后端全链路的服务治理
    • 服务分级,不能太多,google 之前是 4 级,最近看的是 6 级,不是越多越好
    • 防止连锁故障
      • 限流,降级
      • 超时,重试
      • 各级缓存,区分容量缓存和延迟缓存

标准化

因为我做的运维工作大部分是从 0 到 1 或者从 1 到 10 的这种,所以对标准化的体会很深。标准先行,是一个很重要的原则,标准定义的对不对、好不好其实不太重要,关键是一定要有,并且要能落地,符合这两点就可以开始做了。然后要尽量符合精益的原则,有问题可以用改。

监控和告警

这里说几个点吧

  • 过度追求 100% 的可用性是没有实际价值的,要定义一个产品、研发等所有利益干系人都认可的 SLO
  • 告警要分级,我比较推崇 Google SRE workbook 中的做法。这里面把告警分了三级
  • 所有的告警都应该有人跟进,做得好的话,对应的告警要有工作手册

还有就是监控分为:

  • 基础设施监控,CPU,内存等
  • 应用监控,流量,延迟,负载,错误四个黄金指标
  • 业务监控

变更管理

  • 管控规范流程定义,所有变更可监控、可灰度、可回滚
  • 所有变更可追溯、可评审
  • 变更自动化

自动化

我觉得对自动化总结的比较好的就是,事情做第一遍的时候手动就搞了,第二遍的时候就开始发现重复性了,要开始想怎么自动化,第三次就要做的时候就要把这个事情自动化掉。

简单性

简单性,架构的稳定性一定是对简单性不断追求的结果。软件工程的第一要务就是控制其复杂度。

事后总结

无指责的回顾会议

SRE 的道

上面说的都是具体方法,也就是术的部分,有句话我印象比较深刻“有道无术,术尚可求也。有术无道,止于术。”就是做事情的时候不要只是去做,而是要明白我们这么做背后的原则,下面是我觉得比较重要的道:

  • 任何一个运维对象的添加,我们都应该谨慎
  • 胆大心细,做事情要敢做并且要思考全面
  • 取势明道优术,要弄清楚具体的背景,方案要能落地
  • 尽量给别人解决问题,不要给别人添加问题
  • 优先做重要的事情,识别出紧急但不重要的事情,想明白怎么做 20% 的事情,解决 80% 的问题。

链接

TOP 互联网公司都在用,为什么 SRE 比传统运维更抢手?
Google SRE books