新财年换了领导,管理风格也有一些区别。在团队内增加了一个 SRE 的职位。这一财年我将会承担一部分 SRE 的工作。
之前作为开发者,总的来说从开发的角度来思考系统的稳定性。现在需要从更高更全面的角度来思考和理解站点的稳定性。上网研究了一番,SRE 是 google 的一个职位同时 SRE 也是一套 google 总结出来的站点稳定性的方法论。所以找来了《SRE google 运维解密》。这本书成书比较早,里面有些章节介绍的技术栈可能过时。具体我也不了解 google 内部是否还在使用。但是方法论还是很合理、科学的。
一直以来我工作过的团队对于风险的态度都是,预防和杜绝。但是在这本书里面,google 对于风险的态度就变成了管理,合理使用,甚至利用风险来保证项目的迭代。
SER 是指 Site Reliability Engineer(站点可靠性工程师)。SRE 在 google 中有一套比较成熟的方法论包括如下:
SRE 只有 50% 的时间投入运维工作,如果超过就需要将任务分配至研发团队,形成良性循环,激励研发团队设计构建出不需要人工干预,自主运行的系统。 出现事故需要推动事后总结。
资源是变更和规划的产物
改善利用率,降低成本。 从三个因素推动效率提升
成书较早,参考价值不大(略)
可靠性的提升,投入并不是线性的
所以,可靠性的管理是通过风险的管理进行的。提升系统可靠性和服务故障的耐受水平同等重要。努力提升服务可靠性,但是不超过服务需要的可靠性。否则将会付出更多的成本。
按时间:
可用性= 正常时间/(正常时间+ 不可用时间)
四个九 一年宕机 52 分钟 合计次数
可用性 = 成功次数/总调用次数
对于分布式系统按时间是不合理的,总有部分系统在线,所以 google 倾向使用按次统计
错误预算的构建:
创新和可靠性的平衡点。
使用这个控制回路来调节发布的速度,有预算就快速迭代,如果频繁违反 SLO 或者错误预算被耗尽,就需要暂停发布,在测试和开发环节投入更多资源,提升系统可用性。
如果客观的故障发生比如光缆被挖断,影响了 SLO 需要扣减错误预算么?需要的,每个人都有义务保障服务正常运行。
利用错误预算机制,还能够找到定得过高的可用性指标。如果预算耗尽,团队无法发布,就可以考虑降低 SLO 来提升创新速度。
注:SLO 并非越高越好,稳定和创新通常是矛盾的。使用错误预算机制,闭环平衡稳定和创新的关系。
范围下限 <= SLI <= 范围上限
50% 琐事,50% 工程项目
工程工作,是新颖的,本质上需要主观判断的工作。战略性的。有创新性和创造性的。通过设计来解决问题,越通用越好。
监控可以在系统发生故障或者将要发生故障的时候通知我们。 处理报警会占用员工的时间,报警太频繁会造成“狼来了”效应
Google 倾向于使用简单和快速的监控,配合高效的工具进行分析。避免使用“魔方”系统-试图自动学习或者自动检查故障的系统。 监控系统的规则越简单越好。 监控系统信噪比应该很高,发出报警的组件应该简单可靠。
白盒监控应该要作为监控的主要手段。 黑盒监控是面向现象的-现在发生的,而非即将发生的。 白盒监控大量依赖对系统内部信息的检测。白盒监控可以检测到即将发生的问题和重试掩盖问题。白盒系统既可以面向原因也可以面向现象。
只使用平均值是不足以描述系统的。需要区分平均值的慢,或者长尾值的慢。可以对数据进行分组统计。
系统不断演变,软件经常重构,负载和性能目标也经常变化。所以监控系统的的设计和决策充分考虑长期目标。每一个报警都会占用优化系统的时间。花时间投入监控,换取未来系统的稳定是值得的。
短期和长期的可用性经常冲突。通过一些“暴力”因素,可以使一个摇摇欲坠系统保持一定的高可用性,这种方案不能长久,且依赖个人英雄主义。
短期接受稳定性的降级获得长期的可用性提升。
不要做事后诸葛亮
软件系统是本质上是动态和不稳定的
软件的简单是可靠性的前提。