2016-07-22 28 views
5

Ich versuche, Hystrix für meine Anwendung mit Hilfe von Hystrix-Javanica zu implementieren.Hystrix Konfiguration

Ich habe konfiguriert hystrix-configuration.properties wie unten

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 

Kurzschlussmuster funktioniert gut, aber ich habe einen Zweifel in dieser hystrix.command.default.circuitBreaker.requestVolumeThreshold=3

  1. Ist dem Hinweis, sie offen die Schaltung nach 3 Fehler oder
  2. Öffnen Sie die Schaltung nach 3 gleichzeitige Fehler.

durch die Dokumentation gegangenes

jemand beantworten kann?

Antwort

19

Wie Hystrix Schutzschalter funktioniert: Hystrix keinen Schutzschalter bieten, die nach einer bestimmten Anzahl von Fehlern bricht. Die Hystrix Schaltung bricht, wenn:

innerhalb einer Zeitspanne von Dauer metrics.rollingStats.timeInMilliseconds, der Prozentsatz der Aktionen in einer behandelten Ausnahme resultierenden errorThresholdPercentage übersteigt, vorausgesetzt, dass die Anzahl der Aktionen, der durch die Schaltung in der Zeitspanne mindestens requestVolumeThreshold


Was ist requestVolumeThreshold?requestVolumeThreshold ist eine Mindestschwelle für die Menge ( (Anzahl) von Aufrufen durch die Schaltung, die (innerhalb des rollenden Fensters) erfüllt sein müssen, bevor die Schaltung eine prozentuale Fehlerrate überhaupt berechnet. Nur wenn diese Mindestlautstärke (in jedem Zeitfenster) erreicht wurde, vergleicht die Schaltung den Fehleranteil Ihrer Anrufe mit dem von Ihnen konfigurierten .

Stellen Sie sich vor, es gab keine solche Mindest-Volumen-Through-the-Circuit-Schwelle. Stellen Sie sich den ersten Anruf in einem Zeitfenster vor. Sie hätten 1 von 1 Aufrufen als Fehler, = 100% Ausfallrate, die höher ist als die von Ihnen festgelegte 50% -Schwelle. So würde die Schaltung sofort brechen.

Die requestVolumeThreshold existiert so, dass dies nicht geschieht. Es ist effektiv zu sagen, die Fehlerrate durch Ihre Schaltung ist nicht statistisch signifikant (und wird nicht gegen errorThresholdPercentage verglichen), bis mindestens requestVolumeThreshold Anrufe in jedem Zeitfenster empfangen wurden.

+0

Bit verwirrt mit dem Rollfenster finden. Kannst du bitte etwas mehr erklären? Laut meiner Konfiguration sollte die Schaltung nach 3 Ausfällen geöffnet sein? Ist es nicht? – Jay

+0

Weitere Informationen zur Funktionsweise des Leistungsschalters finden Sie unter https://github.com/Netflix/Hystrix/wiki/How-it-Works#circuit-breaker. Die 3, die Sie konfiguriert haben, ist keine Anzahl von Fehlern, bei denen es zu einem Abbruch kommt. Die HYSTRIX-Leistungsschalter brechen Fehler _prozent_ (die konfigurierte% errorThresholdPercentage = 50%), die in einem bestimmten Zeitfenster über mehrere Anrufe hinweg berücksichtigt werden. Der 'requestVolumeThreshold = 3' ist (nach meiner ursprünglichen Antwort) ein Mindestvolumen-Schwellenwert von Anrufen, die im selben Zeitfenster erfüllt sein müssen, um die% Altersberechnungen statistisch signifikant zu machen. –

+0

In https://github.com/Netflix/Hystrix/wiki/Configuration#metricsrollingStatstimeinmilliseconds finden Sie Informationen dazu, wie das Zeitfenster konfiguriert ist. –

-1

ich bin ziemlich neu zu hystrix aber ich denke, ich kann Ihnen helfen, Im Allgemeinen hystrix.command.default.circuitBreaker.requestVolumeThreshold ist eine Eigenschaft, die die minimale Anzahl von Anfragen in einem Rollfenster setzt, dass die Reise wird circuit und sein Standardwert ist 20 und sein Wert kann in der Eigenschaftendatei oder in unserer @HistrixCommand Annotationsmethode geändert werden.

Wenn dieser Eigenschaftswert beispielsweise 20 ist, werden nur 19 Anforderungen in dem rollenden Fenster (ein Fenster von 10 Sekunden) empfangen, die Schaltung wird nicht geöffnet, auch wenn alle 19 fehlgeschlagen sind. Wenn der Wert der fehlgeschlagenen Anforderung 20 erreicht, wird die Schaltung geöffnet und die entsprechenden Aufrufe werden an den Fallback gesendet, selbst wenn der Aufruf erfolgreich ist, bis der Zeitraum für das Schliessen des Fensters abgelaufen ist.

Schlafende Fenster Zeitraum legt die Zeit nach dem Auslösen der Schaltung, um Anfragen abzulehnen, bevor Versuche erneut zu bestimmen, ob die Schaltung wieder geschlossen werden soll. Sein Wert ist auf 5000 Millisekunden voreingestellt, kann durch Überschreiben geändert werden circuitBreaker.sleepWindowInMilliseconds Eigentum.

können Sie alle Eigenschaften und seine Beschreibung here

+0

Sie können sehen: https://github.com/Netflix/Hystrix/wiki/Configuration#circuitbakererrrothresholdpercentage. Ihre Antwort ist falsch, wenn Sie 'errorThresholdPercentage' nicht berücksichtigen. Hoffe das hilft. Siehe https://github.com/Netflix/Hystrix/blob/master/hystrix-core/src/main/java/com/netflix/histrix/HistrixCircuitBreaker.java#L191 und https://github.com/Netflix/Hystrix /blob/master/hystrix-core/src/main/java/com/netflix/hystrix/HystrixCircuitBreaker.java#L196 –

+0

Gibt es eine Möglichkeit, diese Konfigurationseigenschaften zu überprüfen, um sicherzustellen, dass diese Eigenschaften wirklich zur Konfiguration von HystrixCommand verwendet werden? – pijushcse