用途
Resilience Patterns 用于构建能够承受部分失败并优雅降级的系统。它面向分布式系统、微服务架构以及任何依赖外部服务或网络的场景,帮助开发者在组件故障、网络抖动、服务过载或响应缓慢时保持系统整体可用。
主要能力
该技能覆盖以下核心容错模式:
- 重试与指数退避(Retry with Exponential Backoff):在遇到瞬态错误时自动重试,并通过指数退避加随机抖动避免对恢复中的服务造成惊群效应。示例提供
retry装饰器,支持max_attempts、base_delay、max_delay参数。 - 熔断器(Circuit Breaker):通过 CLOSED、OPEN、HALF_OPEN 三种状态控制对故障服务的调用。当失败次数达到阈值时打开熔断,拒绝请求;经过恢复超时后进入半开状态测试恢复。示例提供
CircuitBreaker类,支持failure_threshold和recovery_timeout。 - 超时(Timeout):使用
asyncio.wait_for为操作设置超时,避免挂起请求无限占用资源。 - 舱壁隔离(Bulkhead):通过信号量限制对资源的并发访问,隔离不同下游服务,防止单个服务故障扩散。示例展示为支付和库存服务分别设置不同并发上限。
- 降级回退(Fallback):在主服务不可用时回退到缓存或默认值,例如获取用户资料时依次尝试主服务、过期缓存、最终返回带
_fallback标记的默认数据。 - 模式组合(Composition):将多种模式串联为纵深防御链路:请求 → 超时 → 舱壁 → 熔断器 → 重试 → 服务调用。示例提供
ResilientClient类整合这些模式。 - 基于队列的负载均衡(Queue-Based Load Leveling):通过令牌桶限流器控制请求速率,示例提供
RateLimiter类。 - 健康检查模式(Health Check Patterns):定义 HEALTHY、DEGRADED、UNHEALTHY 三种状态,并行检查数据库、缓存、外部 API,并汇总整体健康状态。
- 失败模式分析(Failure Mode Analysis):以表格形式列出瞬态网络错误、服务宕机、服务过载、响应缓慢、级联失败、数据损坏等失败模式对应的模式与恢复方式。
- 幂等性(Idempotency):通过幂等键确保支付等操作可安全重试,避免重复处理。
使用方式
该技能以 Python 异步代码示例呈现各模式的实现,开发者可直接参考或集成到项目中。示例使用 asyncio、httpx 等库,展示了装饰器、类封装和组合调用的写法。使用时可按照失败模式分析表选择合适的模式,并通过组合模式构建完整的容错客户端。
适用场景
- 微服务之间的远程调用
- 依赖外部 API 或第三方服务的集成
- 需要在高并发或部分故障下保持可用的分布式系统
- 支付、订单等需要幂等保证的关键业务操作
限制与反模式
该技能明确列出应避免的反模式:
- 无退避的重试——会在恢复中的服务上造成惊群效应
- 对非瞬态错误重试——400 类错误重试永远不会成功
- 缺少超时——挂起请求会无限消耗资源
- 级联重试——每一层都重试会使总尝试次数指数级增长
- 熔断器过于敏感——单次失败不应触发熔断
- 忽略部分失败——应假设任何外部调用都可能失败
关于该技能的具体安装命令、支持的平台、收费方式等信息,资料中暂未提供。