Google SRE 读书笔记

2016-10-20  本文已影响0人  彩色蚂蚁

SRE方法论

确保长期关注研发

50% 以下的时间(google SRE 实际33%左右)用在运维,作为一个标准,保证开发,优化的精力。如果超出了,就要采取措施,比如临时转移运维压力回去给业务团队,增加资源等

错误预算

不追求100%的可靠性,确定一个可靠性目标,在错误预算的范围内,用于新功能上线或产品创新等任何事情(这里的关键是,最大化新功能上线的速度,同时保证服务质量,一次事故不再是坏事,而是开发流程中不可避免的环节)

监控

监控系统不应该依赖人来分析警报信息,而是应该自动分析,仅当需要用户执行某种操作时,才通知用户

Google SRE将大部分工作重心放在了“运维手册”的维护上,同时通过演练不断实践和培训团队成员

监控系统的4个黄金指标:延迟,流量,错误,饱和度(容量/负载)

注意长尾,监控指标的平均值可能无法有效反映/发现系统问题

变更管理

自动化的完成: 1. 渐进式发布,2. 迅速准确的检测到问题, 3. 安全快速的回退

所有的二进制文件,都支持用一个命令显示自身的构建时间,构建源代码版本,构建标识符等,很容易将二进制文件和构建过程对应起来

基于版本分支发布,而不是基于主分支发布,bug等cherry picking到发布分支,这样可以明确每个发布版本的内容,便于维护和跟踪

稳定性,可靠性相关

服务质量目标

全球Chubby服务计划内停机,服务质量大大高于SLO目标的时候,人为的进行可控的故障停机,进而敦促依赖于这个系统的其它系统更好的认知面对chubby的可能故障,而不是按自己的理解,假设chubby的可靠性。

SLI(服务质量指标)与SLO(服务质量目标)实践

failure injection : 通过日常化的向系统里注入可控的失败来监控系统的健壮性,主要是复杂的系统,变化频繁,牵连众多,需要一个机制来时刻检验它的稳定性。

负载均衡

后端主动要求停止发送请求(跛脚鸭状态),是一种可靠识别后端负载情况的方法,也容易透明的处理后端节点维护问题

加权轮询,给后端一个服务能力值,用轮询的方式按权重分发,根据后端的表现:如资源使用,响应延迟等等情况周期性的调整权重

应对过载:将重要性这个参数信息,作为了RPC请求的一级属性!每个RPC请求都会标识重要性,这样在服务质量保证方面给后端服务提供了更多信息来更合理的区别处理

处理连锁故障

要尽可能保证缓存层只是用来提高服务性能,而不是服务能正常工作的强制依赖,如果变成了强依赖,那么就要考虑改变这种依赖关系,比如可以过量配备该服务。

调用链永远向下,以避免循环依赖。

重试:系统故障时,无节制的重试可能导致系统故障进一步放大

上面的手段套到我们的实际系统中,想想看,哪些近期可以/应该 做到

请求延迟和截止时间:在RPC请求中,明确的传递服务截止时间机制

这个实现难度有些大,容易执行偏差,不过,在我们的一些大流量系统中,是要考虑这种方案来应对过载。

连锁故障的测试: 负载提高到测试到出现故障后,还要继续测试!!原因是:

我们的压力测试,应该考虑这个原则,而不是仅仅压上限,更多的是更好的发现问题点。

考虑降级方案!考虑降级方案!

数据安全

备份数据,关键不是备份,关键是数据是否能够恢复,关注恢复,这才是重点,而不仅仅是备份!

数据丢失的场景,最常见的原因是用户误操作和软件bug,最难处理的场景是bug造成的数据丢失是渐进的,而不是突然的大规模的损坏

第一层保护手段是软删除(或辅助“延迟删除”),第二道防线是备份及其相关的恢复方法, 第三层和最后一层是定期数据验证,及早发现问题!

杂项

简化

最小API,不提供非必要的API
所有没用的代码,都应该删除,而不是注释,或者功能开关之类,无用代码会干扰后续开发,或者留下定时炸弹,而版本管理工具,让恢复代码变得很容易

服务的容量管理

谷歌的服务通过BNS地址进行抽象,然后服务注册时会配置每个BNS的可用容量,用QPS为单位

基础设施的风险和服务需求管理,在多个不同的竞争性需求的约束条件下,分割服务,提供不同的服务质量,比如bigtable用高冗余集群服务低延迟要求的服务,用冗余度较低的集群服务更关注吞吐率而非低延迟的服务

事后总结

对需要写事后总结的场景制定标准

对事不对人的完成事后总结,

需要评审事后总结的完整程度

公开共享事后总结文档,便于大家学习和吸取经验

上一篇 下一篇

猜你喜欢

热点阅读