2016-07-22 19 views
5

Próbuję wprowadzić hystrix dla mojej aplikacji przy użyciu hystrix-javanica.Konfiguracja Hystrix

mam skonfigurowane hystrix-configuration.properties jak poniżej

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 

wzór zwarcia działa poprawnie, ale mam wątpliwości w tej hystrix.command.default.circuitBreaker.requestVolumeThreshold=3

  1. Czy stwierdzające otwarty obwód po 3 awarie lub
  2. Otworzyć obwód po 3 równoczesnych awariach.

przeszedł dokumentacji

Czy ktoś może odpowiedzieć?

Odpowiedz

19

Jak Hystrix wyłącznik działa: Hystrix nie oferuje wyłącznik, który łamie po danej liczbie niepowodzeń. Układ Hystrix pęknie, jeżeli:

w przedziale czasu trwania metrics.rollingStats.timeInMilliseconds odsetek działań wynikających z obrabianym wyjątkiem przekracza errorThresholdPercentage, pod warunkiem, że ilość działań w obwodzie w przedziale czasu co najmniej requestVolumeThreshold


Co jest requestVolumeThreshold? requestVolumeThreshold to minimalny próg dla numeru o rozmiarze (liczba) połączeń przez obwód, który musi zostać osiągnięty (w ramach ruchomego okna), zanim obwód w ogóle oblicza procentowy wskaźnik awaryjności. Tylko wtedy, gdy ta minimalna objętość (w każdym oknie czasowym) zostanie osiągnięta, obwód porówna stosunek awarii twoich połączeń do skonfigurowanego errorThresholdPercentage.

Wyobraź sobie, że nie istniał taki próg minimalnej objętości przez obwód. Wyobraź sobie pierwsze połączenie w błędach okna czasowego. Będziesz miał 1 z 1 wywołań będący błędem, = 100% wskaźnika awarii, który jest wyższy niż ustawiony próg 50%. Więc obwód natychmiast się zepsuł.

requestVolumeThreshold istnieje, aby tak się nie stało. To skutecznie mówi, że poziom błędu przez twój obwód nie jest statystycznie istotny (i nie będzie porównywany z errorThresholdPercentage), dopóki co najmniej requestVolumeThreshold połączenia nie zostały odebrane w każdym oknie czasowym.

+0

nieco mylić z okna toczenia. Czy możesz wyjaśnić nieco więcej? Według mojej konfiguracji obwód powinien być otwarty po 3 błędach? Czyż nie? – Jay

+0

Zobacz https://github.com/Netflix/Hystrix/wiki/How-it-Works#circuit-breaker, aby uzyskać więcej informacji na temat działania wyłącznika. Konfiguracja 3 nie jest liczbą awarii, z którymi można się zepsuć. Dyski Hystrix włamują się do _percentażu_ błędów (skonfigurowanego "errorThresholdPercentage = 50"%), rozpatrywanego dla połączeń w danym oknie czasowym. "RequestVolumeThreshold = 3" jest (według mojej oryginalnej odpowiedzi) minimalnym progiem połączeń, który musi być spełniony w tym samym oknie czasowym, aby obliczenia% wieku były statystycznie istotne. –

+0

Zobacz https://github.com/Netflix/Hystrix/wiki/Configuration#metricsrollingstatstimeinliilliseconds, jak skonfigurować okna czasowe. –

-1

jestem raczej nowy do hystrix ale myślę, że mogę ci pomóc, W ogólnym hystrix.command.default.circuitBreaker.requestVolumeThreshold jest właściwość, która określa minimalną liczbę wniosków na stopniowe oknie, które zostanie rejsu obwód i jego wartość domyślna to 20, a jego wartość można zmienić w pliku właściwości lub w naszej opisanej metodzie @HystrixCommand.

Na przykład, jeśli ta wartość właściwości wynosi 20, to jeśli tylko 19 żądań zostanie odebranych w oknie rozwijanym (powiedzmy, że okno ma 10 sekund), obwód się nie otworzy, nawet jeśli wszystkie 19 nie powiodą się. jeśli wartość nieudanego żądania osiągnie 20, obwód zostanie otwarty, a odpowiednie wywołania zostaną wysłane do stanu awaryjnego, nawet jeśli połączenie zakończy się pomyślnie, do zakończenia okresu okna do spania.

okres czasu w oknie spania określa czas, po potknięciu obwodu, odrzucenie żądań przed zezwoleniem na ponowną próbę ustalenia, czy obwód powinien ponownie zostać zamknięty. Jego wartość wynosi domyślnie 5000 milisekund, można to zmienić przez przesłonięcie Właściwość circuitBreaker.sleepWindowInMilliseconds.

można znaleźć wszystkie właściwości i jego opis here

+0

Możesz zajrzeć do: https://github.com/Netflix/Hystrix/wiki/Configuration#circuitbreakererrorthresholdpercentage. Twoja odpowiedź jest niepoprawna, nie biorąc pod uwagę 'errorThresholdPercentage'. Mam nadzieję że to pomoże. Zobacz https://github.com/Netflix/Hystrix/blob/master/hystrix-core/src/main/java/com/netflix/hystrix/HystrixCircuitBreaker.java#L191 i https://github.com/Netflix/Hystrix /blob/master/hystrix-core/src/main/java/com/netflix/hystrix/HystrixCircuitBreaker.java#L196 –

+0

Czy istnieje sposób sprawdzenia tych właściwości konfiguracyjnych, aby upewnić się, że te właściwości są rzeczywiście stosowane do konfiguracji HystrixCommand? – pijushcse