2016-07-20 7 views
1

Ich habe derzeit ein Problem bei der Verwendung von Netflix Eureka und Zuul in einer Spring Cloud-Umgebung mit Docker.Spring Cloud mit Zuul und Eureka kann nicht mit Service-Instanzen umgehen

Meine aktuelle Setup ist wie folgt: 3 Docker-Container:

  • ein Eureka-Server
  • ein Zuul-Server, der Eureka verwendet Routen zu Dienstleistungen und Last zur Karte zwischen mehreren Behältern des gleichen Service balanciert.
  • ein Dienst (zur Zeit nur einen einfachen String zurückkehr)

Dieses Setup funktioniert gut, aber Probleme beginnen, wenn ich mit der Skalierung des Dienstes zu spielen beginnen. Wenn ich hochskaliere, nimmt Zuul die neuen Server nach 30 Sekunden auf. Das ist okay für mich. Wenn ich Dienstcontainer abnehme, können Aufrufe an Zuul jedoch fehlschlagen (mit einem HTTP-Fehlercode 200!), Weil Zuul immer noch denkt, dass sich die Server im aktiven Pool befinden.

ich mit Spring-Boot 1.3.6 und Spring Wolke 1.1.2

Meine Fragen:

  • Kann Anrufe konfiguriert werden ZUUL erneut zu versuchen?
  • Gibt es eine Möglichkeit, Zuul zu zwingen, mit einem REST-Aufruf einen Ping an alle Server zu senden? Soweit ich sehen kann, gibt es dafür keinen Spring Cloud-Endpunkt. Posting to/routes macht nicht was ich will.
  • Wenn das nicht möglich ist, kann Zuul konfiguriert werden, um tatsächlich etwas anderes als eine 200 zu senden, wenn ein Server nicht rechtzeitig antwortet?
+0

paar Fragen ... Was Sie genau das tun, bedeuten Aufrufe nach Zuul mit einem Fehlercode 200? Können Sie eine Beispielantwort geben? Auch wenn Sie Instanzen nach oben/unten bringen, wird Zuul (oder andere Eureka-Clients) eine Weile brauchen, da die Clients Daten vom Eureka-Server aktualisieren müssen. Erkennt Zuul schließlich, dass die Instanzen nicht mehr aktiv sind, nachdem die Daten von Eureka aktualisiert wurden? –

+0

Wenn ich Container abnehme, geben Aufrufe von Zuul, die an den Server weitergeleitet werden und nun nicht erreichbar sind, eine leere Seite mit dem HTTP-Antwortcode 200 zurück.Es gibt also keine Möglichkeit für den Client zu wissen, dass er es möglicherweise erneut versuchen muss. Ich hätte eine 504 oder 503 erwartet. Zuul findet tatsächlich nach dem Ping-Intervall (das ist 30 Sekunden) heraus, dass bestimmte Server nicht mehr verfügbar sind und entfernt sie aus der LB. Aber während dieser 30 Sekunden geben Aufrufe leere Seiten zurück, was keinen Sinn ergibt. –

+0

Nebenbei bemerkt, Eureka ist sich bewusst, wenn ein Server aus der Registrierung entfernt wird, also frage ich mich, ob es eine Möglichkeit gibt, dieses Ereignis an Zuul anzuhängen, damit Zuul, wenn ein Server nicht registriert wird, ein Signal erhält, dass es aktualisiert werden muss seine Serverliste. Es ist nicht wirklich ein Problem, wenn neue Server nicht sofort in der LB verfügbar sind, aber es ist ein Problem, wenn Sie die zugrunde liegenden Dienste herunterskalieren und es 30 Sekunden dauert, bis der LB aufholt, besonders wenn es ein System gibt, das davon Kenntnis hat (Eureka). –

Antwort

0

Sie müssen nicht zuul über Änderung in der Liste der Server informieren, wie es darunter durchgeführt wird. Ein echtes Problem hier ist, dass Eureka beschließt, diese Instanzen in seiner Registrierung zu behalten. Es gibt eine Regel: Wenn weniger als 85% Dienste auf Healthcheck reagieren, dann denkt Eureka aufgrund eines Netzwerkausfalls/einer Partition und behält alle Dienste in der Registrierung. Dies ist sehr wahrscheinlich, wenn Sie zum Beispiel nur 3 Instanzen Ihres Dienstes haben. Wie Sie sich vorstellen können, wird, wenn man ausschaltet (33,3% aller 3 Instanzen), eureka es ignorieren und diese Instanz immer noch Clients anbieten.

Es kann nette Funktion sein, wenn Sie 100 Server haben :) Sein Netflix-Tool optimiert für ihre Bedürfnisse.

können Sie versuchen, Selbsterhaltungs ausschalten:

eureka.server.enable-self-preservation=false 

oder zwicken Schwelle auf einen niedrigeren Wert:

eureka.server.renewal-percent-threshold=0.85 

http://cloud.spring.io/spring-cloud-static/spring-cloud.html#_appendix_compendium_of_configuration_properties

Verwandte Themen