1

本日、ある顧客で前週のログを分析したところ、Windows Azure サービス バス キューに関する次の問題が見つかりました。

エンティティが調整されているため、要求は終了しました。10 秒待ってから、もう一度お試しください。

コードを検証した後、Transient Fault Handing Application Block (TOPAZ) を使用して、次のような再試行ポリシーを実装するように伝えました。

 var retryStrategy = new Incremental(5, TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(2));
 var retryPolicy = new RetryPolicy<ServiceBusTransientErrorDetectionStrategy>(retryStrategy);

お客様は次のように答えました。

「ああ、それは素晴らしい。それで、スロットリング時に 10 秒間待機する必要があるという事実も処理されます。」

考えてみれば、これが事実であるかどうかを確認したことはありません。私はいつもこれが事実だと思っていました。Microsoft.Practices.EnterpriseLibrary.WindowsAzure.TransientFaultHandlingアセンブリで、スロットリングの場合に 10 秒間待機するコードを探しましたが、何も見つかりませんでした。

これは、回復力のあるアプリケーションを作成するには TOPAZ では不十分ということですか? スロットリングを処理するために、これを何らかのカスタム コードと組み合わせる必要がありますか (つまり、特定の例外が発生した場合は 10 秒待機します)。

4

2 に答える 2

1

スロットリングに関する限り、Topazは次のような一連の組み込みの再試行戦略を提供します。 - 固定間隔 - 増分間隔 - ランダムな指数バックオフ間隔

カスタムの再試行戦略を作成して Topaz にプラグインすることもできます。

また、ブレントが示したように、10 秒の待機は必須ではありません。多くの場合、すぐに再試行すると、待機する必要なく成功する可能性があります。デフォルトでは、Topaz は戦略によって定義された再試行間隔を使用する直前に最初の再試行を実行します。

詳細については、「Building Elastic and Resilient Cloud Apps」Developer's Guide のCh.6を参照してください。ここから epub/mobi/pdf としても入手できます。

Topaz に関する提案や機能のリクエストがある場合は、uservoiceから送信してください。

于 2012-07-03T12:49:31.030 に答える
0

私が思い出したように、「10 秒」の待機は必須ではありません。さらに、TOPAZにはバックオフ機能もあり、問題を解決するのに役立ちます.

個人的には、TOPAZ のようなものを単に利用するだけでは、真に回復力のあるソリューションを作成するのに十分ではないと主張したいと思います。回復力は、単一の接続ポイントで調整するだけではありません。また、TOPAZ ではできない冗長エンドポイントへのフェイルオーバーを処理できる必要があります。

于 2012-05-21T14:59:54.657 に答える