.NET 开源项目 Polly

今天介绍一个 .NET 开源库:Polly:

Polly 是.NET生态非常著名的组件包,它是支持 .NET Core 的。

目前在 GitHub 的 Star 数量已经接近 5 千,它是一个强大且实用的 .NET 库。

该项目作者现已成为.NET基金会一员,项目一直在不停迭代和更新,你值得拥有。

项目地址【https://github.com/App-vNext/Polly】

一 介绍

官方对 Polly 的介绍是这样的:

Polly is a .NET resilience and transient-fault-handling library that allows developers to express policies such as Retry, Circuit Breaker, Timeout, Bulkhead Isolation, and Fallback in a fluent and thread-safe manner.

翻译过来大概意思是:Polly 是一个 .NET 弹性和瞬态故障处理库,允许开发人员以 Fluent 和线程安全的方式来实现重试、断路、超时、隔离和回退策略。

这个描述有点抽象,我们一起来理解一下。

首先这里说的瞬态故障包含了程序发生的异常和出现不符合开发者预期的结果。所谓瞬态故障,就是说故障不是必然会发生的,而是偶然可能会发生的,比如网络偶尔会突然出现不稳定或无法访问这种故障。至于弹性,就是指应对故障 Polly 的处理策略具有多样性和灵活性,它的各种策略可以灵活地定义和组合。

Polly 的能力

• 服务熔断:当我们服务部分不可用时,我们的应用可以快速响应一个熔断结果,避免持续的请求这些不可用的服务而导致整个应用程序出现问题

• 失败重试:当我们服务调用失败时,能够自动的重试

• 超时处理:我们为服务的请求设置一个超时时间,当超过超时时间可以按照我们预定的操作进行处理,比如返回一个缓存的结果。

• 舱壁隔离:实际上是一个限流的功能,我们可以为服务定义最大的流量和队列,这样可以避免我们的服务因为请求量过大而被压崩。

• 缓存策略:可以让我与类似于AOP 方式为应用嵌入缓存的机制,当缓存命中时,我们可以快速地响应缓存,而不是持续的请求服务。

• 失败降级:当我们的服务不可用时,我们可以响应一个更友好的结果而不是报错。

• 组合策略:可以让我们将上面的 策略组合在一起,按照一定的顺序,我们可以对不同的场景组合不同的策略类,实现我们的应用程序。

Polly 使用步骤

• 定义要处理的异常类型或返回值

• 定义要处理动作(重试、熔断、降级响应等)

• 使用定义的策略来执行代码

适合失败重试的场景

• 服务“失败”是短暂的,可自愈的

在失败的场景里,我们可以非常有效的避免这种网络闪断这种情况

• 服务是幂等的,重复调用不会有副作用

在失败重试情况下,有可能会造成多次调用的情况,因为有些失败,可能是你的命令已经发出了,但是你没收到响应,它会重试。

场景举例

• 网络闪断

• 部分服务节点异常

重试的过程可能就可以命中到正常的节点

最佳实践

• 设置失败重试次数

• 设置带有步长策略的失败等待间隔

• 设置降级响应

• 设置断路器

尽量设置重试的次数,尽量设置不同的间隔,否则会造成类似于DDOS的情况,当我们的重试的次数达到上限以后,我们应该为服务提供一个降级的响应,更友好的响应结果。(DDOS 全称Distributed Denial of Service,中文意思为“分布式拒绝服务”,就是利用大量合法的分布式服务器对目标发送请求,从而导致正常合法用户无法获得服务)

策略的类型

• 被动策略(异常处理、结果处理)

• 主动策略(超时处理、断路器、舱壁隔离、缓存)

组合策略

• 降级响应

• 失败重试

• 断路器

• 舱壁隔离

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容

  • .NET Core微服务实践 微服务—实操落地全套微服务架构组件 Microservice架构解析 Consul服...
    Bobby0322阅读 5,369评论 1 7
  • 前言 对于运行中的系统,可以说百分百的小伙伴会经常遇见以下问题: 网络不通,突然又好了; 服务器宕机了; 调用服务...
    Code综艺圈阅读 204评论 0 1
  • consul go语言开发的,服务发现、服务注册 ocelot .net api网关超时、熔断避免某个服务挂断导致...
    事在人为s阅读 574评论 0 1
  • Polly是一种.NET弹性和瞬态故障处理库,允许我们以非常顺畅和线程安全的方式来执诸如行重试,断路,超时,故障恢...
    OMG_1bcc阅读 1,367评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,594评论 18 139