知识卡片

应对不稳定外部系统的基础服务容错四件套

普通读书笔记卡

内容

账户、资金、报表这类基础服务往往强依赖外部系统,而外部系统的稳定性通常不受本系统控制,甚至经常出错,U系统在封装这层基础服务时给出了四项配套的容错手段:一是异步化,把原本同步调用的接口全部改成异步执行,并针对特定类型的错误设置自动重试,避免调用方被下游的延迟或抖动直接拖住;二是自动超时监控,对所有发出但未在约定时间内得到处理的请求进行主动监控和处理,而不是被动等待调用方自己发现异常;三是对账机制,在下游系统支持的前提下为每个请求引入唯一UUID,定期做数据核对,用事后校验弥补异步化带来的”发出去的请求到底有没有真正执行成功”这类不确定性;四是数据修复自动化,凡是可以自动恢复的错误场景尽量不引入人工介入,减少运维负担并加快恢复速度。除此之外,还专门为没有通过统一RPC框架提供降级能力的外部系统,在基础服务层补上了服务降级和快速失败的能力。这四件套的组合逻辑是层层递进的:异步化和重试解决”调用本身要不要立刻拿到结果”的问题,超时监控解决”请求是不是被遗忘了”的问题,对账解决”最终状态是否一致”的问题,数据修复自动化解决”发现不一致之后如何低成本恢复”的问题——四者合起来覆盖了一次调用从发出到最终一致的完整生命周期,而不是只做其中一两个环节就当作”已经做了容错”。

参考来源

- 位置:《高可用架构(第1卷)》第2章《高可用架构原理与分布式实践》"2.3 解耦的艺术——大型互联网业务系统的插件化改造"节,"2.3.1 插件化"(源文件:_epub-src/OEBPS/Text/Chapter2_3_2.xhtml) - 结论依据:原文列出基础服务层应对外部系统不稳定的四项措施:"异步化,所有的同步接口异步调用,针对某些错误自动重试。自动超时……对账……数据修复自动化",直接支撑本卡片的四件套总结。 - 原始内容:这里的难点主要是外部系统经常不稳定,甚至出错。所以在设计这层时要考虑很多容错的方案。比如:异步化,所有的同步接口异步调用,针对某些错误自动重试。自动超时,监控所有未在一定时间内得到处理的请求。对账……数据修复自动化,可恢复的错误尽量不要引入人工干预。