「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -戻る --[[クラウド設計パターン]] --[[HttpClientの類の使い方>HttpClientの類の使い方#e8fa9d8f]] * 目次 [#v98ce72f] #contents *概要 [#ud2f7581] -障害回復力のある一時的な障害処理ポリシーを実装する。 -スレッドセーフかつ[[Fluent Interface>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?Method%20Chain%20%E3%81%A8%20Fluent%20Interface]]で表現・実装できる *詳細 [#ce88942b] 以下のようなポリシーを組み合わせて実装できる。 **Retry [#a3ac1e10] -時間を空けて再実行する。 -[[Exponential Backoff(指数バックオフ)>#tf2880c4]]を併用する。 **Circuit Breaker [#v7858b6b] 設定で指定した回数のエラーが連続して発生した場合、Exceptionを返す。 **Timeout [#x2c67d83] 指定した時間が経過しても処理が終わらない場合、Exceptionを返す。 -悲観的タイムアウト --通常のタイムアウト --クライアント側なので処理を抜けるだけになる。 -楽観的タイムアウト --悲観的タイムアウトでは、処理を抜けるだけになるが、 --楽観的タイムアウトでは、CancellationTokenによるキャンセル処理を実装できる。 -参考 --Cancellation Token について調べてみる - Qiita~ https://qiita.com/TsuyoshiUshio@github/items/b2d23b37b410a2cfd330 **Bulkhead Isolation [#hbaec99c] -並列に実行可能なリクエスト数を制限する。 -コンシューマーバルクヘッドとも呼ぶ。 -セマフォを使って 同時実行可能数を制限している。 **Fallback [#g1f2b2cf] エラーが発生した場合に、最終的に返したい値は Fallback を使って指定する。 **Cache [#l0817d8b] Cacheを、他の Policy と組み合わせて柔軟に処理に組み込める。 **PolicyWrap [#p7330fec] 上記([[Retry>#a3ac1e10]], [[Circuit Breaker>#v7858b6b]], [[Timeout>#x2c67d83]], [[Bulkhead>#hbaec99c]], [[Fallback>#g1f2b2cf]])を組み合わせる。 -PolicyWrap · App-vNext/Polly Wiki~ https://github.com/App-vNext/Polly/wiki/PolicyWrap *参考 [#r94a53e4] -C# と Polly を使って回復力の高いアプリケーションを書く - しばやん雑記~ https://blog.shibayan.jp/entry/20190102/1546425897 -Azure Function v2にHttpClientFactory+Pollyを組み込み、HttpClientの再試行を実装する - Qiita~ https://qiita.com/HiroyukiSakoh/items/92d1365db6447bd64550 **NuGet [#z49816fb] -Polly~ https://www.nuget.org/packages/Polly/ -Polly.Caching.MemoryCache~ https://www.nuget.org/packages/Polly.Caching.MemoryCache/ -Polly.Caching.Memory~ https://www.nuget.org/packages/Polly.Caching.Memory/ -Polly.Caching.Distributed~ https://www.nuget.org/packages/Polly.Caching.Distributed/ **Qiita [#k9a26dea] -C#でPollyを使ったリトライ処理~ https://qiita.com/sat0tabe/items/e3656e712df4918cfdf1 -C# gRPC Polly でエラー制御を実装する~ https://qiita.com/mxProject/items/c18dafc59d8c186f59bc **Microsoft Docs [#q6d26afb] -Polly で指数バックオフを含む HTTP 呼び出しの再試行を実装する~ https://docs.microsoft.com/ja-jp/dotnet/architecture/microservices/implement-resilient-applications/implement-http-call-retries-exponential-backoff-polly -Bulkhead pattern - Cloud Design Patterns~ https://docs.microsoft.com/en-us/azure/architecture/patterns/bulkhead -Cache-Aside pattern - Cloud Design Patterns~ https://docs.microsoft.com/en-us/azure/architecture/patterns/cache-aside **[[Exponential Backoff(指数バックオフ)]] [#tf2880c4] ---- Tags: [[:通信技術]], [[:.NET開発]], [[:ASP.NET]]