Polly-故障处理和弹性应对很有一手

前言

对于运行中的系统,可以说百分百的小伙伴会经常遇见以下问题:

  • 网络不通,突然又好了;

  • 服务器宕机了;

  • 调用服务接口超时了;

  • 调用接口报错啦;

  • 通讯信息发送失败需要重发;

以上只是列举了一些常遇到的问题,对于一些小项目可能简单的处理一下就OK了(比如重启或是重新发布),而对于微服务架构的项目,可能因为一个服务挂掉、或是一台服务器宕机、又或是网络出现波动等情况,都可能会导致业务流程失败,甚至会导致整个系统崩掉。所以对于系统瞬时故障需及时做出应对策略,对于可能会发生的故障需提前预防(弹性应变);Polly这个库针对以上等情况进行封装,通过策略的方式,灵活处理相关场景。

正文

1. 简介

Polly是一种.NET弹性和瞬态故障处理库,可以通过不同策略处理和应对故障场景,主要分为两大类:被动策略和主动策略,各自包含如下功能:

1.1 被动策略

主要针对故障的处理,避免如下:

  • 重试(Retry):在实际应用场景中往往有些失败只是瞬时的,经过短暂的延时就可恢复,这种情况就可以采用重试策略;

  • 熔断(Circuit Breaker):比如在调用接口发生异常时,当多次都返回异常,建议先熔断一段时间,即不再处理业务接口,直接报错;待熔断时间过了之后可以重新处理请求,即快速响应失败比让用户一直等待要合理;

  • 回退(Fallback):如果失败之后怎么处理?即在发生故障的时候找一个替代逻辑进行处理, 比如返回指定的结果或是进行下一步操作;

1.2 主动策略

主要是进行弹性扩展,而不是针对故障处理,关键点是改变原有业务逻辑的执行行为,比如原业务逻辑超时了,就会执行指定的超时处理行为;

  • 超时(Timeout ):确保调用者永远不需要等待超过配置的超时时间,不然就会触发超时异常;主要就是为了提升用户体验;

  • 舱壁隔离(Bulkhead Isolation):即一个服务的故障不应该影响到整个系统(隔离);通过控制资源消耗,避免一个故障导致级联服务也故障,最终影响整个系统;目的就是进行并发控制(限流),避免故障带来的大范围影响。

  • 缓存(Cache):将数据存入缓存中,后续的响应可以从缓存中获取; 目的就是为了提升性能;

  • 策略包装( PolicyWrap):策略可以组合进行使用;目的就是为了方便各种策略组合进行业务故障处理;

大概理解Polly功能之后,接下来就通过Demo的形式进一步了解各策略的使用;

2. 功能Demo演示

Polly使用步骤很简单,两个步骤完事:

  • 定义策略;

  • 执行策略;

以下的各功能的演示,主要体现的是用法,不会所有情况都举例演示,仅提供思路;其中说明主要结合代码,以注释为主:

2.1 重试(Retry)

代码实现:

运行结果(测试的时候,用Release模式或者直接执行编译后的执行文件,不然Debug模式的时候遇见异常会提示,查看结果不方便):

上面逻辑是失败就重试,其实在实际应用场景,通常有一个时间间隔重试,每次重试递增的时间不一样,代码如下:

运行结果如下:

2.2 熔断(Circuit Breaker)

代码实现:

运行结果:

上面这种只是常规熔断方式,Polly还提供高级熔断配置,根据熔断比率进行熔断,更加符合应用场景,通过设置样本收集时间,然后计算收集的业务处理结果比率,如果达到熔断比率就进行熔断。代码如下:

运行效果如下:

2.3 回退(Fallback)

代码实现如下:

运行结果:

当异常发生的时候,也可以指定对应的操作逻辑。

2.4 超时(Timeout )

代码实现:

运行结果:

超时这分为乐观超时(Optimistic timeout)和悲观超时(Pessimistic timeout),乐观超时需要CancellationToken 在业务逻辑中进行取消,而悲观超时没有取消的话,超时了还会继续执行,上面的案例就显示了,当触发超时之后,业务逻辑等待一段时间之后,还会返回结果,这个过程是需要耗费相关性能的;根据需要可以自行选择。乐观超时就不演示了,和正常线程逻辑一样,通过CancellationToken取消即可。

超时策略的最终目的就是考虑到用户体验,及时给用户反馈,不让用户一直处于等待中~~~~

2.5 舱壁隔离(Bulkhead Isolation)

代码实现:

运行效果:

其实在设置策略参数的时候,还可以指定等待队列的数,也就是说当业务执行数达到设置并发数时,还可以继续执行业务,只是这些业务先会进入等待队列中;这里就不详细演示了,后续在API中在具体说明,对于限流这块,放在API那块可能更容易理解,这里就先进了解。

2.6 缓存(Cache)

缓存这块演示的是基于内存的,需要额外引入包Polly.Caching.Memory和Microsoft.Extensions.Caching.Memory,关于MemoryCache的具体细节,可以参考这篇文章(因MemoryCache闹了个笑话)。

代码实现:

运行效果:

关于缓存这块,也是可以集成Redis进行做分布式缓存的。后面的项目分享的时候再详细说,如果小伙伴好奇,可以参照官网,用法和上面一样,只是引用的包不一样而已。

2.7 策略包装( PolicyWrap)

代码及运行效果:目的就是为了组合策略,应对业务逻辑的各种情况。

上述只是演示了常用的策略使用方式,并没有面面俱到,更加详细内容可以参照官网,结合我的演示思路,看官网例子就很容易啦:

官网地址:https://github.com/App-vNext/Polly/wiki/PolicyWrap

总结

关于Polly,就先说到这,后面的Demo或项目中肯定还会用到的,在这里用控制台项目的方式演示,一方面是为了方便,针对某个点好测试,另一方面是为了说明Polly不是针对WebAPI调用采用的,而是根据需要在项目其他任何地方都可以用(好多小伙伴都认为只是用于HttpClient调用API);

Polly了解大概情况之后,下期继续接着网关(Ocelot)剩下的功能进行分享~~~

一个被程序搞丑的帅小伙,关注"Code综艺圈",跟我一起学~~~

图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/303132.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电脑桌面不显示此电脑或是计算机,电脑怎么显示出此电脑?此电脑显示的设置方法...

电脑怎么显示出此电脑?安装win10之后,打开时发现桌面上没有我的电脑图标,这对于很多人来说非常不适应,那么win10我的电脑图标没了怎么办?我们怎么才能让我的电脑显示在桌面呢?针对这个问题,下面U大侠小编就给大家介绍此电脑显示…

用Python分析了20万场吃鸡数据,有不少有趣的发现

首先,神枪镇楼:背景最近老板爱上了吃鸡(手游:全军出击),经常拉着我们开黑,只能放弃午休的时间,陪老板在沙漠里奔波。 上周在在微信游戏频道看战绩的时候突发奇想,是不是可…

万字长文,带你彻底理解EF Core5的运行机制,让你成为团队中的EF Core专家

在EF Core 5中,有很多方式可以窥察工作流程中发生的事情,并与该信息进行交互。这些功能点包括日志记录,拦截,事件处理程序和一些超酷的最新出现的调试功能。EF团队甚至从Entity Framework的第一个版本中恢复了一些有用的旧的功能。…

重学数据结构004——栈的基本操作及实现(数组实现)

上文提到过栈以及栈的基本操作。上文中是基于链表做的实现。但是这种方法会出现大量的malloc()和free()操作,这种开销是非常昂贵的。 另外一种实现方式是基于数组的实现。这种实现方式需要预先制定一个栈的大小,此外还需要一个Top来记录栈顶元素下一个位…

C#使用线程窗口调试多线程程序

调试多线程程序一般有以下几种办法1、在日志的某个地方写日志文件。优点:不会干扰程序的执行,特别是对网络的多线程通信。缺点:每次都需要打开日志文件以查看进程运行的信息。2、利用断点进行调试。优点:直观,可以直接…

窥探渣男天才爱因斯坦的一生

本文授权转自微信公众号超级数学建模(ID:supermodeling)----------------------------------提起爱因斯坦,你最先想到什么?相对论?原子弹?物理天才?Emc?然而,2017年由美…

在 Azure App Service 上运行 .NET 6 预览版

点击上方蓝字关注“汪宇杰博客”原文:Jeff Martinez翻译:Edi Wang导语.NET 6 是最新的 .NET 版本,它最终将.NET Core,Framework,Xamarin和Mono的精华带入以 .NET 5 开始的统一平台。该版本目前为预览版,用于…

R还能这样玩!

R作为一种统计分析软件,广泛应用于生物、医学、电商、新闻等数据相关行业,是目前主流数据应用软件之一。那么,R到底有哪些特别之处呢?实际上,R是统计领域广泛使用的S语言的一个分支,两者在程序语法上几乎一样&#xf…

百度网页移动端html,百度移动端开始用网站品牌名代替网址显示

最近,有站长发现,百度移动端最近做了部分改版:移动端部分网站域名开始逐渐被网站相关名称代替,PC端还是用域名展示,卢松松博客网站域名也被替换成网站品牌名显示!不知道站长们,最近有没有注意到&#xff0c…

每天6亿人在看《延禧攻略》?大数据告诉你哪家视频网站VIP值得买(附代码)

导读:随着《延禧攻略》的播出,魏璎珞、富察皇后等各位后宫小主的命运时刻牵动着各位观众的心。同时爱奇艺也因为该剧的大火,收获了单日超过6亿的播放量。我们此次将对比各大视频网站2018年截止到8月18号的电视剧和综艺节目的播放情况&#xf…

大厂面试都爱问这4个问题,.NET开发必看!

金三银四已进入尾声,身边不少从事.NET开发的朋友有了更好的去处!大家日常在交流群里也常有分享经验。在面试时,大厂面试官都喜欢问什么;提问的形式和特点,大家又该如何应对等问题格外引起注意。今天就以腾讯公司的招聘…

参加计算机竞赛需要学什么知识,数学和计算机专业,我应该参加那些比赛?

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼美国数学竞赛美国数学竞赛 AmericanMathematical Competition,简称 AMC,原是于 1950 年起由美国数学协会 (MathematicsAssociation of America ,简称 MAA) 开始举办的美国高中数学考试 (AHSME)。…

程序员年入50万,我们该如何努力达到这个目标?

先说明,这里是指税后。年收入50万在上海算多吗?比上不足,比下有余。不过在上海达到这个水平,至少可以说是能达到财务自由了吧。况且,根据马太效应的说法,和年入20万到50万这个增加阶段相比,年入…

昆明学院计算机二级报名时间,2017年3月昆明学院计算机等级考试报名时间(云南)...

考试时间:2017年3月25日至3月27日。网上报名及费用支付时间:2016年12月19日至12月28日。报名及准考证打印网址:http://222.221.5.208/NCRE_EMS/StudentLogin.aspx请各位考生注意:考生只能选择一个考点报名;本校考生只能…

OrchardCore 如何动态加载模块?

【导读】今天,我们再次讨论下OrchardCore,通过初期调研,我们项目采用OrchardCore底层设施支持模块化,同时根据业务场景,额外还需支持二次开发,于是有了本文,若有不同解决方案,欢迎留…

sed之G、H、g、h使用

前言 作者不善言谈,如有错误请指正!!! 转载请注明出处!!! sed之G、H、g、h使用 什么是sed? sed是面向流的行编辑器,所谓面向流,是指接受标准输入的输入&#…

人工智能路上,怎么能少了它!

目前,人工智能的应用日渐广泛。而作为人工智能核心的机器学习,是一门多领域的交叉学科,专门研究计算机模拟或实现人类学习行为的方法,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。简单来说&a…

墙裂推荐:这可能是CAP理论的最好解释

> 英文蓝本:http://ksat.me/a-plain-english-introduction-to-cap-theorem 经过小码甲意译、原创配图, 建议收藏。你可能经常听到CAP定理, 这个定理描述了在设计分布式系统时的天然约束。就像其他文章一样, 本文以现实场景对比理解CAP定理…

台湾 计算机术语,快取,陣列,程式,这些台湾的计算机术语,你知道几个?|冷知识...

原标题:快取,陣列,程式,这些台湾的计算机术语,你知道几个?|冷知识作者 | 楼下小黑哥来源 | 程序通事今天就不写技术文了,写点轻松的,带大家涨点知识。最近闲来无聊的时候&#xff0c…

计算机原理试题b,计算机组成原理试题B答案

计算机组成原理试题B答案 (3页)本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!9.9 积分计算机组成原理试题B答案一、 选择题1. D 2. A 3. A,C 4. B 5. B 6. B 7. B 8. B 9. A 10. D二、 填…