Was ist die kanonische Methode für die Bereitstellung von Blue / Green mit dem Spring Cloud / Netflix-Stack auf PWS?

9

Ich experimentiere mit einem Setup, das dem auf dem Bild detailliert ähnelt: Ссылка

In meinem Setup verwende ich eine Client-Anwendung ( Ссылка ), einen Proxy (Zuul), eine Entdeckungsservice (Eureka) und ein einfacher Microservice. Alles wird auf PWS bereitgestellt.

Ich möchte von einer Version meines einfachen Microservice auf die nächste ohne Ausfallzeiten migrieren . Anfangs habe ich mit der hier beschriebenen Technik begonnen: Ссылка

Meiner Meinung nach ist dieser Ansatz nicht mit einem Discovery-Service wie Eureka "kompatibel". Tatsächlich ist die neue Version meines Dienstes in Eureka registriert und empfängt Verkehr, bevor ich alle Routen neu zuordnen kann (CF Router).

Dies führte mich zu einem anderen Ansatz, bei dem ich mich auf die Failover-Mechanismen in Spring Cloud / Netflix stütze:

  1. Ich starte eine neue (abwärtskompatible) Version meines Dienstes.
  2. Wenn diese Version von Zuul / Eureka abgeholt wird, bekommt sie 50% des Traffics.
  3. Sobald ich überprüft habe, dass die neue Version korrekt funktioniert, nehme ich die "alte" Instanz herunter. (Ich klicke einfach auf die Schaltfläche "Stopp" in PWS)

Wie ich weiß, verwendet Zuul Ribbon (Load-Balancing) unter der Haube, so dass ich in der Sekunde, in der die alte Instanz noch in Eureka ist, aber tatsächlich herunterfährt, eine Wiederholung der neuen Instanz ohne Auswirkungen auf den Client erwarte .

Meine Annahme ist jedoch falsch. Ich bekomme ein paar 502 Fehler in meinem Client:

%Vor%

Teil meiner application.yml

%Vor%

Ich bin mir nicht sicher, was schief geht.

Ist das ein technisches Problem?

Oder mache ich die falschen Annahmen (ich habe irgendwo gelesen, dass POSTs sowieso nicht wiederholt werden, was ich nicht wirklich verstehe)?

Ich würde gerne hören, wie Sie es tun.

Danke, Andy

    
Andy Verbunt 21.04.2016, 14:55
quelle

1 Antwort

2

Ich habe mich auch darüber gewundert. Ich werde nicht behaupten, Spring Cloud "In Anger" benutzt zu haben. Ich habe gerade eine Weile damit experimentiert.

Annahme: Wir nehmen an, dass die Quelle der Wahrheit für alle Instanzen in Eureka gespeichert ist, dann sollte Eureka unser Mechanismus der operativen Kontrolle sein. Wir können Eureka verwenden, um eine Instanz außer Betrieb zu setzen, indem Sie den Instanzenstatus auf OUT_OF_SERVICE setzen. Wenn das Menüband seine Serverliste aktualisiert, werden diese nicht verwendeten Instanzen nicht verwendet. Eureka bietet eine REST-API zum Abfragen von Instanzen und zum Festlegen des Instanzstatus. Großartig.

Das Problem ist: Wie identifiziere ich, welche Instanzen in der Blue-Gruppe sind und welche Instanzen in der Green-Gruppe sind?

Ich habe nachgedacht ... Eureka bietet eine Metadatenkarte für jede Instanz. Sagen wir in unserem Build / Bake-Schritt eine Versions-ID in der Metadaten-Map? Wir könnten eine Git Commit Id oder ein semantisches Versionierungsschema oder was auch immer verwenden. Ok, jetzt kann ich mir die Eureka-Metadaten ansehen und anhand dieses Versionswerts Blue versus Green-Instanzen identifizieren. Wir können die Metadatenwerte in jedem Service mithilfe von Eigenschaften festlegen.

z.B. eureka.instance.metadataMap.version=8675309

Nun, was wäre schön, wenn wir Eureka einfach sagen könnten. "Nehmen Sie alle Instanzen für den FUBAR-Dienst und die Version 8675309 außer Betrieb." Nun, ich denke nicht, dass das out-of-the-box zur Verfügung gestellt wird. Das Tolle an Spring Cloud ist, dass all diese Dienste, einschließlich Eureka Server, nur Frühlings-Apps sind, die wir für unsere eigenen Bedürfnisse hacken können. Der folgende Code macht einen Endpunkt verfügbar, der Instanzen für einen App-Namen und eine Version als "Außer Betrieb" setzt. Fügen Sie diesen Controller einfach Ihrem Eureka Server hinzu. Es ist nicht produktionsfertig, nur eine Idee.

Sobald Eureka diese Instanzen außer Betrieb nimmt und das Ribbon seine Serverliste aktualisiert, ist es sicher, diese Instanzen zu töten oder wegzuleiten.

NACH

%Vor%

Hoffe das hilft?

%Vor%     
MarkOfHall 05.05.2016 21:53
quelle