1、熔断降级的概念:

    熔断:我这里有一根长度一米的钢铁,钢铁的熔点1000度(假设),现在我想用力把这根钢铁折弯,但是人的力有限达不到折弯的点,然后我使用火给钢铁加热,每隔一段时间我就会尝试一下是否能折弯,在这个过程中我发现,随着不断的煅烧,折弯钢铁是花费的力气越小,在这个过程出现了意外因为我的疏忽,温度超过了钢铁的熔点了,导致一根变成的两根,和我最初的目的相违背了,早知道当初我装个报警的装置了还可以提想我。

  如果在这个例子中我们把一根钢铁换成我们程序中的接口(接口能同时承受1000的访问),然后把火替换成我们的接口调用者,当接口的并发超过1000这个点的时候接口将会挂掉,作为调用者并不能控制这个点,当并发量上来的时候导致接口蹦了,为了防止我们的接口发生崩溃的情况,我们做一个报警的设置,当发生这个情况的时候占时切断服务,防止服务崩溃。

   降级:接着上一个例子:既然这个钢铁因为一个意外导致变成两个,不能进行使用了,我变找了一个绳子替代一下。

当我们的服务接口发生错误的时候,我们可以找到一个替代方法进行使用。这个方法可能是启用另一台服务器的接口,也可能是只返回“”服务器繁忙请重试的提示“”。总之不会把一个系统级别的问题暴露给用户,让使用者的程序也出现问题。

2、Polly的7中策略

 处理熔断降级的框架本人所知 有NetFlix的Hystrix框架和Polly框架我们将使用Polly进行熔断降级处理。

    Polly概念:Polly是一个被.net基金会支持认可的框架,Polly是一个.NET弹性和瞬态故障处理库,允许开发人员以流畅和线程安全的方式表达策略,如重试、断路器、超时、舱壁隔离和回退。

    Polly的7种策略:官方文档是这么说的:

    1、重试(Retry):当程序发生短暂的故障、并且故障在延迟后,可以自动纠正的,前期是暂时的我们可以配置自动重试。

    2、断路器(Circuit-Breaker):当一个系统陷入严重的问题时,让系统快速的失败,比让用户一直等待着要好的多,保护一个系统不受过载的影响,可以帮助它快速的恢复。

    3、超时(Timeout):在等待一定的时间后,没有返回相应的结果,保证程序不会一直等待下去,使调用者不必一直的等待下去。

     4、隔离(Bulkhead Isolation):当进程出现故障的时,一台主机中的多个失败的进程,对资源(例如线程/CPU)的一直占用,当下游的系统发生故障的时候,也可能导致上游对资源的调用失败、这两种风险的出现都将导致更大范围的影响、隔离策略是为了防止“一个点的失败导致整盘的失败”把受到管理的操作固定在某个资源中,避免影响到其他的资源。

    5、缓存(Cache):针对相同的请求,在第一次访问的时候将响应的数据进行缓存,再次访问的时候直接在缓存中提供响应的数据。

    6、回退(FallBack):当程序发生失败的情况的时候,我们将做些什么,定义一个在程序发生失败的时候要执行的动作。

    7、策略组合(PolicyWrap):Polly针对不同的故障有不同的策略,我们可以灵活的组合策略,上述的六种策略可以灵活组合使用。

3、Polly的基本用法

    因为Polly对NetCore的友好支持,下面我们将使用Core的控制台对Polly的几种策略进行简单的演示

    首先创建控制台程序

    

    在Nuget的控制台中使用 Install-Package Polly 命令进行安装

    注意:在创建项目的时候命名尽量不要使用Polly命名

    Polly 每个版本的介绍 https://www.nuget.org/packages/Polly/

    执行命令进行安装如下图所示

    

    首先我们要学会并且指定希望Policy 处理的异常

  下面我们指定一个希望Policy处理的异常,并且完成调用

 因为throw new Exception(); HResult 的值为

      如图所示

    

     执行结果为:

      

    当我们使用throw new ArgumentException(); 时 它的HResult 的值为

    如图所示:

    

    

    执行结果为

    因为我们没有做任何的处理所以程序直接报错

    

    上面演示了Policy的基本用法

4、Polly7种策略的使用

    1、重试策略(Retry):

 执行结果:

    

    2、断路器(Circuit-Breaker)

 执行结果:

    

    3、 超时策略(Timeout)

 执行结果:

     

    4、隔离策略(Bulkhead Isolation)

执行结果:

    

    5、缓存策略(Cache):

6、 回退(FallBack)

 执行结果

    

    7、策略组合(PolicyWrap)

     PolicyWrap的上面六种策略可以任意的组合起来使用:我们将超时策略(Timeout)加上回退(FallBack)策略组合使用

行结果:

        

      OK

      这些只是简单的演示,官方文档更加详细

下一篇我们是使用 Aop 基于 AspNetCore 的过滤器 实现一下Policy 的使用。

原文地址:https://www.cnblogs.com/szlblog/p/9300845.html

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

使用.NetCore 控制台演示 熔断 降级(polly)相关推荐

  1. asp.net core 使用HttpClientFactory Polly实现熔断降级

    前言 在NET Core2.1后也是增加更新了很多东西,当然HttpClientFactory更新中的一部分.虽然说HttpClient这个实现了disposable,但使用它的时候用using包装块 ...

  2. 【微服务学习】Polly:熔断降级组件

    何为熔断降级 "熔断器如同电力过载保护器.它可以实现快速失败,如果它在一段时间内侦测到许多类似的错误,会强迫其以后的多个调用快速失败,不再访问远程服务器,从而防止应用程序不断地尝试执行可能会 ...

  3. 用HttpClientFactory来实现简单的熔断降级

    前言 在2.1之后,有不少新东西,其中HttpClientFactory算是一个.HttpClientFactory涉及的东西也不算少,三四种clients , 请求中间件,与Polly的结合,生命周 ...

  4. 【微服务】服务熔断降级 Sentinel

    目录 高并发带来的问题 结论: 服务器雪崩效应 常见容错方案 隔离机制: 超时机制 限流机制 熔断机制: 降级机制 常见的容错组件 Sentinel入门 什么是Sentinel 订单微服务集成Sent ...

  5. 分布式熔断降级平台aegis

    现状 分布式场景中.若服务不稳定,会导致调用方服务也不可用,从而造成雪崩效应.因此要对在原服务不可用时进行熔断降级处理. 分析 熔断降级可以服务端限流.网关限流.客户端限流. 1. 客户端限流:在调用 ...

  6. 阿里开源分布式限流框架 -Sentinel Go 0.3.0 发布,支持熔断降级能力

    作者 | 宿何  阿里巴巴高级开发工程师 Sentinel 是阿里巴巴开源的,面向分布式服务架构的流量控制组件,主要以流量为切入点,从限流.流量整形.熔断降级.系统自适应保护等多个维度来帮助开发者保障 ...

  7. Spring Cloud Alibaba基础教程:@SentinelResource注解实现限流控制与熔断降级使用详解

    在之前的<使用Sentinel实现接口限流>一文中,我们仅依靠引入Spring Cloud Alibaba对Sentinel的整合封装spring-cloud-starter-alibab ...

  8. gateway sentinel 熔断 不起作用_Sentinel 1.8.0 年度版本发布,熔断降级重构升级

    简介:在经过数月的打磨后,Sentinel 1.8.0 版本正式发布!该版本是本年度最重要的版本之一,包含大量特性改进与 bug 修复,尤其是针对熔断降级特性的完善升级(支持任意统计时长.慢调用比例降 ...

  9. Sentinel 1.8.0 年度版本发布,熔断降级重构升级!

    在经过数月的打磨后,Sentinel 1.8.0 版本正式发布!该版本是本年度最重要的版本之一,包含大量特性改进与 bug 修复,尤其是针对熔断降级特性的完善升级(支持任意统计时长.慢调用比例降级策略 ...

最新文章

  1. MFC获取文字高宽设置字符间隔
  2. es6第一章 continue
  3. ListIterator特有的方法
  4. 未处理的异常: 0xC0000235: 由句柄所调用的 NtClose 已使用 NtSetInformationObject 以防止关闭。...
  5. C 关于unsigned int compzero = ~0;与unsigned int compzero = 0xFFFF; 的区别!
  6. 学习笔记~~~~~python基础
  7. gsettings命令使用简介
  8. 工业相机和普通相机的区别详解_机器视觉网:工业相机与普通相机的四大区别...
  9. 【Elasticsearch】字符过滤器
  10. 你有程序员朋友吗?告诉他,100 万等他来拿
  11. bzoj 3027: [Ceoi2004]Sweet(母函数+组合数)
  12. (分治)7617:输出前k大的数
  13. backbone, AngularJS, EmberJS 简单比较
  14. TFTPClient
  15. Python | 使用Socks5
  16. Access2016删除主键列(图文操作)错误提示:若要删除主键,请在“设计”视图中打开该表并删除主键字段
  17. Graphics2D绘制图片,线段、矩形、圆形
  18. JVM源码分析之Attach机制实现完全解读
  19. python对excel操作简书_python Excel 写
  20. 2022-05-12 Druid源码阅读——poolPreparedStatements是如何控制缓存游标的?

热门文章

  1. 抽象工厂模式(Absraact Factory)介绍与实现
  2. hadoop-2.7.1+zookeeper-3.4.8+hbase-1.2.1+apache-hive-2.0.0完全分布式集群
  3. Jenkins修改管理员密码.
  4. linux 安装apache http server
  5. log4net日志插件的使用
  6. 利用Guava的Suppliers.memoize实现单例
  7. Android MediaScanner:(一)MediaScanner总体架构
  8. [转]经典SQL语句大全
  9. 理解流量监管和整形的关键算法—令牌桶
  10. 设置su为不需要密码切换为root