日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

听说过Netflix的Chaos Monkey吗?不用羡慕,我们.NET也有

發布時間:2023/12/4 asp.net 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 听说过Netflix的Chaos Monkey吗?不用羡慕,我们.NET也有 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Chaos Monkey,是Netflix工程師創建的一種故障注入系統,它會隨機在生產實例中引發各種各樣的故障或異常,以確保它們的系統能夠在這樣的情況下存活,而不會對客戶造成任何影響。

可見,Chaos Monkey可以提高系統的安全和可用性。

那如何在.NET中用優雅的方式實現故障注入呢?

Simmy

Simmy是Polly團隊發布的一個混沌工程和故障注入工具,它允許你在通過Polly執行代碼的任何位置引入一個或多個故障注入策略。

Simmy提供了以下類型的故障注入策略:

  • 異常策略,在你的系統中注入異常;

  • 結果策略,控制返回的結果類型;

  • 延遲策略,類似Netflix的Latency Monkey,執行遠程調用時注入巨大的延遲,模擬一個節點甚至整個服務宕機的情況;

  • 行為策略,允許在調用之前注入任何額外的行為;

下面我們就來演示一下,具體如何使用Simmy。

實現Chaos Monkey

假設,我們的API提供天氣預報,而具體的天氣信息來自于“中國天氣網”,也就是說我們依賴于第三方。

如果第三方出現故障,我們應該要有一定的保障措施。

1.實現功能

新建ASP.NET Core Web API項目,在Startup.cs中添加如下代碼:

public?void?ConfigureServices(IServiceCollection?services) {...services.AddHttpClient("Weather",?client?=>{client.BaseAddress?=?new?Uri("http://www.weather.com.cn/");client.DefaultRequestHeaders.Add("Accept",?"application/json");client.Timeout?=?TimeSpan.FromSeconds(2);}); }

修改WeatherForecastController.cs,代碼如下:

[ApiController] [Route("[controller]")] public?class?WeatherForecastController?:?ControllerBase {private?readonly?IHttpClientFactory?_httpClientFactory;public?WeatherForecastController(IHttpClientFactory?httpClientFactory){_httpClientFactory?=?httpClientFactory;}[HttpGet]public?async?Task<string>?Get(){var?client?=?_httpClientFactory.CreateClient("Weather");string?result?=?await?client.GetStringAsync("data/sk/101200101.html");return?result;} }

運行后,返回結果正常:

2.引入Simmy

添加nuget包Polly.Contrib.Simmy和Microsoft.Extensions.Http.Polly,修改Startup.cs代碼:

public?void?ConfigureServices(IServiceCollection?services) {...IAsyncPolicy<HttpResponseMessage>?chaosPolicy?=?MonkeyPolicy.InjectLatencyAsync<HttpResponseMessage>(with?=>with.Latency(TimeSpan.FromSeconds(5))//50%的幾率出現故障.InjectionRate(.5)//默認關閉.EnabledWhen(GetChaosEnabled));services.AddHttpClient("Weather",?client?=>{client.BaseAddress?=?new?Uri("http://www.weather.com.cn/");client.DefaultRequestHeaders.Add("Accept",?"application/json");client.Timeout?=?TimeSpan.FromSeconds(2);}).AddPolicyHandler(chaosPolicy); }public?static?bool?ChaosEnabled?=?false; private?static?Task<bool>?GetChaosEnabled(Context?context,?CancellationToken?ct) {return?Task.FromResult(ChaosEnabled); }

我們引入了延遲策略,但是現在我們還沒有開啟。

3.設置開關

添加ChaosController.cs,代碼如下:

[ApiController] [Route("[controller]")] public?class?ChaosController?:?ControllerBase {[HttpGet]public?async?Task<bool>?Swich(){Startup.ChaosEnabled?=?!Startup.ChaosEnabled;return?Startup.ChaosEnabled;} }

這樣,我們就可以控制是否啟用策略了。

4.放出Monkey

首先,訪問/Chaos/switch,開啟策略。

然后多訪問幾次WeatherForecast,你就會看到如下頁面:

Monkey出現了!

結論

現在,你應該已經修復了發現的問題。但是同時,你還需要部署一套監控工具,以便及時發現其他問題并定位它們的確切位置。

趕快添加其他策略,讓你的Chaos Monkey軍團更加壯大吧!

如果你覺得這篇文章對你有所啟發,請關注我的個人公眾號”My IO“,記住我!

總結

以上是生活随笔為你收集整理的听说过Netflix的Chaos Monkey吗?不用羡慕,我们.NET也有的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。