🛡️ 容错

Polly 熔断降级与重试策略配置

构建高可用的微服务容错体系

一、容错机制概述

在分布式系统中,服务之间的调用可能会因为网络问题、服务故障等原因失败。容错机制可以帮助系统在出现故障时优雅地降级,保证系统的稳定性。

二、Polly 简介

Polly 是一个 .NET 弹性和瞬态故障处理库,可以帮助开发者实现重试、熔断、超时、降级等策略。它提供了流畅的 API,易于集成到任何 .NET 应用中。

三、Polly 核心策略

1. 重试策略

重试策略可以在请求失败时自动重试。可以配置重试次数、间隔时间和重试条件。Polly 支持多种重试间隔策略,如固定间隔、指数退避等。

2. 熔断策略

熔断策略可以在服务故障率达到阈值时自动熔断,停止向该服务发送请求。熔断后会进入半开状态,尝试恢复连接。

3. 超时策略

超时策略可以设置请求的最大等待时间,避免长时间阻塞。如果请求超时,可以返回降级结果或抛出异常。

4. 降级策略

降级策略可以在服务不可用时返回备选结果,保证系统的基本功能可用。降级结果可以是缓存数据或默认值。

5. 舱壁隔离策略

舱壁隔离策略可以限制并发请求数,避免单个服务的故障影响整个系统。可以使用信号量或隔离仓实现。

四、Polly 策略组合

1. 策略链

可以将多个策略组合成策略链,按顺序执行。例如:重试 → 熔断 → 超时 → 降级。

2. 策略包装

可以使用 PolicyWrap 将多个策略包装在一起,实现复杂的容错逻辑。策略按照从外到内的顺序执行。

五、Polly 配置与使用

1. 安装依赖包

使用 NuGet 安装 Polly 包,支持 .NET Standard 2.0 及以上版本。

2. 定义重试策略

使用 Policy.Handle 定义需要处理的异常类型,然后配置重试次数和间隔时间。

3. 定义熔断策略

配置熔断的阈值、熔断时间和半开状态的检查间隔。可以使用 CircuitBreakerPolicy 实现。

4. 组合策略

使用 PolicyWrap 组合多个策略,实现完整的容错逻辑。

六、Polly 与 HttpClient 集成

1. 配置 HttpClient

将 Polly 策略集成到 HttpClient,实现对 HTTP 请求的自动容错处理。

2. 使用 IHttpClientBuilder

在 ASP.NET Core 中,可以使用 AddPolicyHandler 扩展方法将策略添加到 HttpClient。

七、Polly 高级特性

1. 策略注册表

使用 PolicyRegistry 管理多个策略,可以根据名称动态获取策略。

2. 策略监控

Polly 提供了监控接口,可以收集策略执行的统计信息,如重试次数、熔断次数等。

3. 自定义策略

可以继承 Policy 基类,实现自定义的容错策略。

八、容错最佳实践

1. 合理配置重试次数

避免过多的重试导致服务过载。根据业务场景配置合适的重试次数和间隔时间。

2. 设置合理的熔断阈值

根据服务的性能特征配置熔断阈值,避免误触发熔断。

3. 提供有意义的降级结果

降级结果应该对用户有意义,避免返回空数据或错误信息。

九、NetProOA 中的 Polly 集成

NetProOA 框架内置了 Polly 容错模块,提供了统一的容错策略配置。开发者可以通过配置文件轻松启用各种容错策略。

总结

Polly 是 .NET 生态中优秀的容错库,提供了丰富的容错策略。通过合理配置和使用,可以显著提高系统的稳定性和可用性。