首页 > 编程语言 >乘风破浪,遇见最佳跨平台跨终端框架.Net Core/.Net生态 - 浅析ASP.NET Core服务可用性

乘风破浪,遇见最佳跨平台跨终端框架.Net Core/.Net生态 - 浅析ASP.NET Core服务可用性

时间:2022-10-22 22:22:28浏览次数:88  
标签:Core 服务 Polly 重试 跨平台 失败 Net NET

使用Polly提高服务可用性

什么是Polly

https://github.com/App-vNext/Polly

http://www.thepollyproject.org

image

Polly是一个.NET弹性和瞬时故障处理库,它允许开发者以流畅和线程安全的方式表达诸如重试、断路、超时、隔板隔离、速率限制和回退等策略。

image

Polly是.Net生态非常著名的一个组件包。

Polly针对.NET标准1.1(覆盖范围:.NET Core 1.0、Mono、Xamarin、UWP、WP8.1+)和.NET标准2.0+(覆盖范围:.NET Core 2.0+、.NET Core 3.0,以及后来的Mono、Xamarin和UWP目标)。NuGet软件包还包括.NET框架4.6.1和4.7.2的直接目标。

Polly组件包

  • Polly,这是Polly的核心包
  • Polly.Extensions.Http,Polly基于Http的一些扩展
  • Microsoft.Extensions.Http.Polly,HttpClientFactory组件包的Polly扩展包

Polly的能力

  • 失败重试,当调用失败时能够自动重试
  • 服务熔断,当部分服务不可用时,应用可以快速响应一个熔断的结果,避免持续的请求这些不可用的服务而导致整个应用程序跪掉
  • 超时处理,指为服务的请求设置一个超时时间,当超过超时时间时可以按照预定的操作进行处理,比如说返回一个缓存结果
  • 舱壁隔离,实际上是一个限流功能,可以为服务定义最大的流量和队列,这样子避免我们的服务因为请求量过大而被压崩
  • 缓存策略,让我们与类似于AOP的方式为应用嵌入缓存的机制,可以当缓存命中时可以快速地响应缓存,而不是持续地请求服务
  • 失败降级,指当服务不可用时,可以响应一个更友好的结果而不是报错
  • 组合策略,可以让我们将上面的策略组合在一起,按照一定的顺序,可以对不同场景组合不同的策略类,实现应用程序

Polly的使用步骤

整个Polly的使用步骤是分三步走的:

  • 定义要处理的异常类型或返回值
  • 定义要处理的动作(重试、熔断、降级响应等)
  • 使用定义的策略来执行代码

适合失败重试的场景

适合失败重试的条件

  • 服务"失败"是短暂的,可自愈的,在失败重试的场景中,可以非常有效的避免这种网络闪断的情况
  • 服务是幂等的,重复调用不会有副作用,在失败重试的场景下,有可能会造成多次调用的情况,有些失败可能是命令已经发出了,但是还没收到响应,它会重试,所以需要服务是幂等的,重复调用不能有副作用,这样才可以使用失败重试

场景举例

  • 网络闪断
  • 部分服务节点异常

最佳实践

  • 设置失败重试的次数,尽量设置重试的次数
  • 设置带有步长策略的失败等待间隔,尽量设置不同的间隔,重试的间隔时间需要设置,否则它会持续不断地去重试,会造成类似于DDOS的情况
  • 设置降级响应,当我们失败重试的次数达到上限以后,应该为服务提供一个降级的响应,提供更友好的响应结果
  • 设置断路器,为我们的服务设置断路器,就是熔断,当我们重试一定次数可能服务还是不可用,那么我们应该设置断路器

针对HttpClientFactory的失败重试策略

参考

标签:Core,服务,Polly,重试,跨平台,失败,Net,NET
From: https://www.cnblogs.com/taylorshi/p/16817461.html

相关文章

  • 简读《ASP.NET Core技术内幕与项目实战》之3:配置
    特别说明:1、本系列内容主要基于杨中科老师的书籍《ASP.NETCore技术内幕与项目实战》及配套的B站视频视频教程,同时会增加极少部分的小知识点2、本系列教程主要目的是提炼......
  • 简读《ASP.NET Core技术内幕与项目实战》之2:依赖注入
    特别说明:1、本系列内容主要基于杨中科老师的书籍《ASP.NETCore技术内幕与项目实战》及配套的B站视频视频教程,同时会增加极少部分的小知识点2、本系列教程主要目的是提炼......
  • Kubernetes--标签选择器(标签)
    标签选择器用于表达标签的查询条件或选择标准,KubernetesAPI目前支持两个选择器:基于等值关系(equality-based)以及基于集合关系(set-based)。例如,env=production和env!=qa......
  • 网络查看netstat
    https://mp.weixin.qq.com/s?__biz=MzI2OTA3NTk3Ng==&mid=2649284776&idx=1&sn=17774bdfe5f8e7296f107c2af60e2b31&chksm=f2f993cfc58e1ad9ba32071d1f3e5060400da41d4ed593......
  • kubernetes笔记-2-基本操作
    一、kubectl的基本操作语法:  kubectl[command][type][name][flags]语法说明:  command:对资源执行相应操作的子命令,如:get、create、delete、run等;  type:要操......
  • ADO.NET读取MySQL数据库的三种方式:DataReader、DataSet、DataView
    ADO.NET读取MySQL数据库有多种方式:DataReader、DataSet、DataView。Command对象的ExecuteScalar方法查询数据库获取某个单个值,但是如果获取多行、多列可以用ExcecuteReader......
  • C语言网络接口函数inet_ntoa用法小坑与分析
    tags:CNetworkDebug问题今天看了一下网络编程,发现其中有一个接口函数很有意思,就是从二进制转换到点分十进制表示的IP地址的函数​​inet_ntoa()​​,直接使用倒是......
  • kubernetes---PV/PVC
    一、PV/PVC-简介PersistentVolume(PV):是集群中已经由kubernetes管理员配置的一个网络存储,集群中的存储资源一个集群资源,即不隶属于任何namespace,PV的数据最终存储在硬件存......
  • 【kubernetes入门到精通】Kubernetes架构分析介绍篇「入门篇」
    意志的出现不是对愿望的否定,而是把愿望合并和提升到一个更高的意识水平上。——罗洛·梅官方网站​​Kubernetes中文官方网站​​​​Kubernetes英文官方网站​​Kubernetes......
  • kubernets初始化
    文档说明:自建K8S,只记录关键地方;k8s版本>1.19CRI使用containerd实验环境:linuxdebian11#!/bin/bashset-euxset-opipefail#enp0s3是网卡名称KUBE_VER......