读书笔记(SRE:Google运维解密):第22章 处理连锁故障

本文探讨了连锁故障的原因,如服务器过载、资源耗尽和服务不可用,以及如何防止和管理这些故障。通过理解服务器的极限、提供降级结果、主动拒绝请求、进行容量规划和流量抛弃等策略,可以有效防止软件服务器过载。此外,文章强调了测试在预防连锁故障中的重要性,包括测试服务的极限、恢复行为和常见客户端行为。
  • 连锁故障是由于正反馈循环(positivefeedback)导致的不断扩大规模的故障。

连锁故障可能由于整个系统的一小部分出现故障而引发,进而导致系统其他部分也出现故障。例如,某个服务的一个实例由于过载出现故障,导致其他实例负载升高,从而导致这些实例像多米诺骨牌一样一个一个全部出现故障。

 

  • 连锁故障产生的原因

(a)服务器过载:直接由于服务器过载导致,或间接由于服务器过载引发的其他问题导致

例如,某个集群内部的过载可能会导致该服务实例崩溃;这时负载均衡器会将请求发送给其他集群,使那些集群的实例过载,从而造成整个服务过载故障。这些事件连锁发生的速度可能非常快(可能在分钟级范围),因为负载均衡器和任务编排系统的响应速度通常非常快。

(b)资源耗尽:某一种资源的耗尽可以导致高延迟、高错误率,或者低质量回复的发生。这些的确是在资源耗尽时应该出现的情况:在负载不断上升到过载时,服务器不可能一直保持完全正常。

不同种类的资源耗尽会对软件服务器产生不同的影响。

  • CPU:如果CPU资源不足以应对请求负载,一般来说所有的请求都会变慢。这个场景会造成一系列的副作用:
    (1) 正在处理的(in-flight)请求数量上升:这会影响其他所有的资源,包括内存、活跃线程数(在每个请求一个线程的编程模型下)、文件描述符,和后端服务器的资源(该资源的耗尽可能会带来其他连锁问题)。
    (2) 队列过长:意味着延迟上升(因为所有请求都要排队一段时间),同时队列会使用更多的内存。
    (3) 线程卡住
    (4) CPU死锁或者请求卡住
    (5) RPC超时:服务器过载时,对客户端RPC的回复会变慢,最终会超过客户端所设置的超时时间。这会导致服务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值