在 ASP.NET Core Web API中使用 Polly 构建弹性容错的微服务
https://procodeguide.com/programming/polly-in-aspnet-core/
在本文中,我们将了解如何在微服务中实现容错,即在 ASP.NET Core 中使用 Polly 构建弹性微服务(Web API)。通过在微服务中实现容错,我们确保在其中一项服务发生任何故障时,整个系统不会受到影响。
在本文中,我不会介绍如何在 ASP.NET Core 中构建微服务,因为我已经在我的另一篇关于使用 ASP.NET Core的微服务的文章中详细介绍了这一点。在这里,我们将看到如何在 ASP.NET Core 中使用 Polly 在微服务中实现容错。
无论您是在处理微服务还是单体应用程序,很有可能需要调用外部第三方或内部 API,因此您需要以一种可以处理该 API 故障的方式构建您的代码作为您的应用程序流取决于来自该 API 的响应。
在应用程序或弹性 Web 服务中构建弹性意味着我们需要确保 Web 服务始终可用且具有可接受的功能,即使在服务高负载、网络故障、我们的服务所依赖的其他服务出现故障等情况下,等等。
目录
什么是 Polly,我们为什么需要它?
处理部分故障的设计原则
Polly 支持的弹性策略
重试
断路器
超时
Bulkhead(隔板)
缓存
回退
策略封装
在 ASP.NET Core 中实现 Polly 的策略
演示的总体方法
创建 ASP.NET Core Web API 项目
创建客户服务
创建订单服务
在 ASP.NET Core 订单服务中配置 Polly 的策略
重试策略
超时策略
回退策略
断路器策略
Bulkhead策略
概括
下载源代码
什么是 Polly,我们为什么需要它?Polly是一个 .NET 弹性和瞬态故障处理库,允许开发人员以流畅和线程安全的方式表达重试、断路器、超时、隔板隔离和回退等策略。
如果我们说我们已经彻底测试了我们的应用程序并且生产环境中不会出现任何中断,那我们就完全错了。由于应用程序崩溃、响应缓慢、系统负载过大、硬件故障、网络问题等等,将会出现应用程序故障。
为了在我们的应用程序中处理这些故障,首先我们必须承认这些故障会发生,其次我们必须在我们的应用程序中加入容错,即我们确保整个系统不会由于一个或多个服务故障而失败。
例如,微服务是一种设计,其中一个大型应用程序被开发为一组具有自己的数据存储的小型独立服务。通过在微服务中构建容错,我们以这样一种方式设计它,即一个服务的故障不会影响其他服务的工作,即如果与配置文件更新相关的服务关闭,那么用户应该无法更新配置文件,但其他事务如订单输入\查询应该可以正常工作。
此外,构建弹性服务不是为了避免故障,而是关于从故障中恢复并以避免停机和数据丢失的方式执行其功能的能力。微服务应设计为处理部分故障。如果您不设计和实施确保容错的技术,即使是部分故障也可能被放大。
在 ASP.NET Core 中使用 Polly 只需几行代码,我们就可以构建具有弹性的应用程序,尽管在复杂的微服务或基于云的部署中发生部分故障,但仍能顺利运行。在 ASP.NET Core 中使用 Polly 在微服务中实现容错后,我们确保如果服务失败或宕机,整个系统不会宕机。
使用 ASP.NET Core 中的 Polly 策略,我们可以设计我们的应用程序以在出现故障时以指定的方式进行响应。
处理部分故障的设计原则以下是推荐用于处理微服务中的部分故障的一些设计原则列表
通讯订阅
强烈建议使用异步通信,而不是跨内部微服务的长链同步 HTTP 调用。唯一的同步调用应该是客户端应用程序和入门级微服务或 API 网关之间的前端调用。
可以通过在服务调用中实现重试来避免间歇性网络或通道故障。这些重试应该是有限的次数,不能是无限的。
始终为每个网络调用实现超时。调用客户端不应无休止地等待来自任何服务的响应,而应等待预定义的时间限制,一旦该时间过去,则调用失败。
使用断路器模式,对失败的服务进行重试,如果服务仍然失败,则在一些固定的重试之后,断路器跳闸,以便进一步的尝试立即失败,即不会对失败的服务进行新的调用,而不是它将假定其失败或已关闭。有一个时间限制,不会对失败的服务进行新的调用,一旦时间过去,新的调用将转到失败的服务以验证服务是否再次启动和运行。如果新请求成功,则断路器将关闭,请求将转发到服务。