「[[マイクロソフト系技術情報 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]]

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS