web-dev-qa-db-ja.com

Hystrix構成

Hystrix-javanicaを使用してアプリケーションにhystrixを実装しようとしています。

以下のようにhystrix-configuration.propertiesを設定しました

hystrix.command.default.execution.isolation.strategy=SEMAPHORE
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=10000 
hystrix.command.default.fallback.enabled=true
hystrix.command.default.circuitBreaker.enabled=true
hystrix.command.default.circuitBreaker.requestVolumeThreshold=3 
hystrix.command.default.circuitBreaker.sleepWindowInMilliseconds=50000
hystrix.command.default.circuitBreaker.errorThresholdPercentage=50

短絡パターンは正常に機能していますが、これに疑問がありますhystrix.command.default.circuitBreaker.requestVolumeThreshold=3

  1. それは3つの失敗の後に回路を開くと述べていますか、または
  2. 3つの同時障害の後で回路を開きます。

ドキュメントを確認 link

誰かが答えることはできますか?

17
Jay

Hystrix Circuit-Breakerの動作: Hystrixは、指定された数の障害の後で遮断する回路ブレーカーを提供していません。 Hystrix回路は、次の場合に故障します。

期間metrics.rollingStats.timeInMillisecondsのタイムスパン内で、処理された例外が発生するアクションの割合がerrorThresholdPercentageを超えます。ただし、タイムスパン内の回路を介したアクションの数が少なくともrequestVolumeThresholdである必要があります。


requestVolumeThresholdとはrequestVolumeThresholdは、volumeの最小しきい値で、回線を経由するコールの数です。回路が故障率を計算する前に(ローリングウィンドウ内で)満たす必要があります。 (各時間枠で)この最小ボリュームが満たされた場合にのみ、回路は、コールの失敗の割合を、設定したerrorThresholdPercentageと比較します。

そのような最小ボリュームスルーザ回路しきい値がなかったと想像してください。時間枠エラーの最初の呼び出しを想像してください。 1つの呼び出しのうち1つがエラーとなり、100%の失敗率となります。これは、設定した50%のしきい値よりも高くなります。したがって、回路はすぐに壊れます。

requestVolumeThresholdが存在するため、これは発生しません。それは効果的に言って、あなたの回路を通るエラー率は統計的に有意ではありません(そしてerrorThresholdPercentageと比較されません)各タイムウィンドウで最小requestVolumeThreshold呼び出しが受信されました。

47

私はhystrixは比較的新しいですが、私はあなたを助けることができると思います、一般的にhystrix.command.default.circuitBreaker.requestVolumeThresholdは最小値を設定するプロパティです回路をトリップするローリングウィンドウ内のリクエスト数とそのデフォルト値は20で、その値はプロパティファイルまたは@ HystrixCommandで変更できます。注釈付きメソッド。

たとえば、そのプロパティ値が20の場合、ローリングウィンドウ(たとえば10秒のウィンドウ)で19個のリクエストしか受信されない場合、19個すべてが失敗しても回路はトリップオープンしません。失敗した要求の値が20に達すると、回線が開かれ、対応する呼び出しは、呼び出しが成功した場合でも、スリープウィンドウ期間が完了するまでフォールバックに送信されます。

スリープウィンドウ期間は、回路をトリップした後、回路を再び閉じる必要があるかどうかを再試行できるようにする前に要求を拒否する時間を設定します。その値はデフォルトで5000ミリ秒に設定されています。これは、オーバーライドすることで変更できますcircuitBreaker.sleepWindowInMillisecondsプロパティ。

あなたはすべてのプロパティとその説明を見つけることができます ここ

0
Sumanth Duvvuru