调用弹性模式:构建健壮分布式系统的关键
1. 背压机制概述
背压是指服务系统向请求系统发出失败信号,以及请求系统如何处理这些失败以防止自身和服务系统过载。在过载和系统故障时,设计背压意味着限制资源使用,这是创建健壮分布式系统的基本要素之一。背压的实现通常包括在资源受限或发生故障时丢弃新消息,或将错误返回给用户(两种情况都会增加指标)。连接和对其他系统的请求的超时和指数退避也至关重要。若没有背压机制,级联故障或意外消息丢失很可能发生。
2. 提升弹性的四种模式
调用者可以结合以下四种模式来提高弹性:
- 重试
- 速率限制器
- 隔离舱
- 断路器
2.1 重试
下游服务可能会出现瞬态故障,如线程池暂时满负荷、网络连接缓慢导致超时或其他导致不可用的临时情况。这类故障通常会在短时间内自行修复。调用者应通过在重试逻辑中包装对下游的调用,来处理瞬态故障。添加重试时,需要考虑以下三个因素:
- 重试是否合适 :这通常需要对被调用服务有特定领域的知识。例如,对于返回超时的下游服务的支付尝试,是否应该重试?超时操作最终是否会被处理,重试是否会导致潜在的双重收费?
- 最大重试次数和重试间隔 :包括退避策略,如示例 7 - 7 所示。
- 哪些响应(和异常类型)值得重试 :例如,如果下游因输入格式错误返回 400,重试相同的输入不会得到不同的结果。