使用.NetCore 控制台演示 熔断 降级(polly)
1、熔斷降級的概念:?
熔斷:我這里有一根長度一米的鋼鐵,鋼鐵的熔點1000度(假設(shè)),現(xiàn)在我想用力把這根鋼鐵折彎,但是人的力有限達不到折彎的點,然后我使用火給鋼鐵加熱,每隔一段時間我就會嘗試一下是否能折彎,在這個過程中我發(fā)現(xiàn),隨著不斷的煅燒,折彎鋼鐵是花費的力氣越小,在這個過程出現(xiàn)了意外因為我的疏忽,溫度超過了鋼鐵的熔點了,導致一根變成的兩根,和我最初的目的相違背了,早知道當初我裝個報警的裝置了還可以提想我。?
如果在這個例子中我們把一根鋼鐵換成我們程序中的接口(接口能同時承受1000的訪問),然后把火替換成我們的接口調(diào)用者,當接口的并發(fā)超過1000這個點的時候接口將會掛掉,作為調(diào)用者并不能控制這個點,當并發(fā)量上來的時候?qū)е陆涌诒牧?#xff0c;為了防止我們的接口發(fā)生崩潰的情況,我們做一個報警的設(shè)置,當發(fā)生這個情況的時候占時切斷服務(wù),防止服務(wù)崩潰。
降級:接著上一個例子:既然這個鋼鐵因為一個意外導致變成兩個,不能進行使用了,我變找了一個繩子替代一下。?
??? 當我們的服務(wù)接口發(fā)生錯誤的時候,我們可以找到一個替代方法進行使用。這個方法可能是啟用另一臺服務(wù)器的接口,也可能是只返回“”服務(wù)器繁忙請重試的提示“”。總之不會把一個系統(tǒng)級別的問題暴露給用戶,讓使用者的程序也出現(xiàn)問題。
2、Polly的7中策略
處理熔斷降級的框架本人所知?有NetFlix的Hystrix框架和Polly框架我們將使用Polly進行熔斷降級處理。
Polly的概念:Polly是一個被.net基金會支持認可的框架,Polly是一個.NET彈性和瞬態(tài)故障處理庫,允許開發(fā)人員以流暢和線程安全的方式表達策略,如重試、斷路器、超時、艙壁隔離和回退。
Polly的7種策略:官方文檔是這么說的:
1、重試(Retry):當程序發(fā)生短暫的故障、并且故障在延遲后,可以自動糾正的,前期是暫時的我們可以配置自動重試。
2、斷路器(Circuit-Breaker):當一個系統(tǒng)陷入嚴重的問題時,讓系統(tǒng)快速的失敗,比讓用戶一直等待著要好的多,保護一個系統(tǒng)不受過載的影響,可以幫助它快速的恢復。
3、超時(Timeout):在等待一定的時間后,沒有返回相應(yīng)的結(jié)果,保證程序不會一直等待下去,使調(diào)用者不必一直的等待下去。
??4、隔離(Bulkhead Isolation):當進程出現(xiàn)故障的時,一臺主機中的多個失敗的進程,對資源(例如線程/CPU)的一直占用,當下游的系統(tǒng)發(fā)生故障的時候,也可能導致上游對資源的調(diào)用失敗、這兩種風險的出現(xiàn)都將導致更大范圍的影響、隔離策略是為了防止“一個點的失敗導致整盤的失敗”把受到管理的操作固定在某個資源中,避免影響到其他的資源。
5、緩存(Cache):針對相同的請求,在第一次訪問的時候?qū)㈨憫?yīng)的數(shù)據(jù)進行緩存,再次訪問的時候直接在緩存中提供響應(yīng)的數(shù)據(jù)。
6、回退(FallBack):當程序發(fā)生失敗的情況的時候,我們將做些什么,定義一個在程序發(fā)生失敗的時候要執(zhí)行的動作。
7、策略組合(PolicyWrap):Polly針對不同的故障有不同的策略,我們可以靈活的組合策略,上述的六種策略可以靈活組合使用。
3、Polly的基本用法
因為Polly對NetCore的友好支持,下面我們將使用Core的控制臺對Polly的幾種策略進行簡單的演示
首先創(chuàng)建控制臺程序
在Nuget的控制臺中使用 Install-Package Polly 命令進行安裝
? 注意:在創(chuàng)建項目的時候命名盡量不要使用Polly命名
Polly 每個版本的介紹?https://www.nuget.org/packages/Polly/
執(zhí)行命令進行安裝如下圖所示
首先我們要學會并且指定希望Policy 處理的異常:
下面我們指定一個希望Policy處理的異常,并且完成調(diào)用
因為throw?new?Exception();的?HResult 的值為
? 如圖所示
執(zhí)行結(jié)果為:
? ??
?
? 當我們使用throw new ArgumentException();?時?它的HResult 的值為
如圖所示:
?
執(zhí)行結(jié)果為:
因為我們沒有做任何的處理所以程序直接報錯
上面演示了Policy的基本用法
4、Polly7種策略的使用
1、重試策略(Retry):
執(zhí)行結(jié)果:
??
2、斷路器(Circuit-Breaker)
執(zhí)行結(jié)果:
3、?超時策略(Timeout)
執(zhí)行結(jié)果:
? ?
4、隔離策略(Bulkhead Isolation)
執(zhí)行結(jié)果:
5、緩存策略(Cache):
6、?回退(FallBack)
執(zhí)行結(jié)果:
7、策略組合(PolicyWrap)
PolicyWrap的上面六種策略可以任意的組合起來使用:我們將超時策略(Timeout)加上回退(FallBack)策略組合使用
行結(jié)果:
OK
這些只是簡單的演示,官方文檔更加詳細。
下一篇我們是使用?Aop 基于 AspNetCore 的過濾器 實現(xiàn)一下Policy 的使用。
原文地址:https://www.cnblogs.com/szlblog/p/9300845.html
.NET社區(qū)新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com
總結(jié)
以上是生活随笔為你收集整理的使用.NetCore 控制台演示 熔断 降级(polly)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .NetCore2.1 WebAPI 根
- 下一篇: 给正在努力的您几条建议(附开源代码)