当您的升起时间探测器开始放大事件时, 在检查器内使用一个 kill switch 开关—— 一个特性旗, 在每一个勾选符上读取, 可以禁用噪音检查, 并停止源头的重试 。
当重试的暴风雨停留在一个单一的过程里 并且从不支持别人的依赖性时, 反向移动和颤抖。
两者都便宜地建造.
只有一个让你安静一个投票客户 而目标已经着了火 我运行了曲棍球和排队 基础设施, 所以大多数我的页面到达 要么"工作没有运行" 或"工作运行四次"。
健康检查是在同一个问题家庭里进行的:一个小的,频繁的,自动化的要求,当上游的事物改变形状时,这种要求会严重地倍增。
下面是一队传票员 将非事件变成真实事件后 我所处理的操作本 —— 故障模式, 开关属于哪里, 执行, 以及如何在你离开终端之前验证翻转。
是什么把投票客户的超时支票 变成重试风暴?
放大法相.
单次检查是每15或30秒一次的要求,没有人注意到; 一组检查,上面有层层的复刻器,是一个同步的负载发生器,指向任何你决定的足够重要,足以监测的东西。
数学很不友善 用40例,5秒间隔,每一次失败尝试3次复试,一个通常处理一连串健康交通的依赖突然看到一分一秒上千个请求——所有请求都是在它最不能吸收的准确时刻到达的.
重复在投票间隔上堆放,而不是取而代之,由于每个投票人同时看到同样的故障,他们都一起退后并一起返回.
Google SRE书在连锁故障下呼唤出这种形状,从中产生的负载图案看起来并不像有机交通:锯齿突起,完全对齐,生长到有东西卸载.
我处理过的最糟糕的一次 甚至没有真正的停产。
我们的检查员读取了 健康有效载荷的顶层, 一个常规的改变移动它 下, 和田我猜想有 回来作为一个空字符串。
与从未匹配的对比,所以舰队中的每一个探测器都认为服务是生病了.
我们排放的日志线说,没有其它的——没有字段名称,没有身体片段,没有状态代码. 38个计票员,间隔5分,每分3次复试,每分约1900个请求1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分1分 整个礼拜都很健康 我们花了大约25分钟才发现错误是数据形状,而不是系统状态,而大部分时间开始争论部署"中断了".
我仍然不知道为什么我们从来没有记录 原始尸体上一个剖面小姐;我们现在做到了。
开关就是用这个的 不是因为隐藏一个真正的失败,而是因为当自己的工具成为了盒子上最响亮的客户端时会剪去放大器.
把开关放在支票运行的地方,而不是它配置的地方 本能是禁用监控配置中的检查——评论检查,调出配置,前进.
中间事件,这是错的一层。
配置活在部署路径上,部署路径恰恰是您在排除故障时不愿锻炼的,因为它很慢,需要检讨,在您已经试图解释的事件期间,它是第二个变化源.
开关属于投票客户端,在每个勾选上评价,最后已知值被缓存于内存.
开关住的地方 时间 生效 Blast 半径 Usable Cident Config 文件 加上将分钟调到全小时服务 没有 Env var 加上滚动重启 分钟 一次部署 很少每个勾选一个间隔读取地标 一次检查 一组是 Circuit 断路器在客户端的毫秒中自动取出一个依赖性,不能瞄准 A 断路器和一面旗可以解决此中的不同部分 。
断开器对出错率的反应以毫秒为单位