2016-04-19 11 views
1

Ich habe einen Microservice, der als ein Play-Framework-basierter HTTP-Service realisiert ist. Wir möchten nun diesem Dienst eine Fehlertoleranz hinzufügen, indem wir eine andere Instanz haben, die die Anfragen aufnimmt, wenn eine Instanz ausfällt. Jetzt verstehe ich, dass Microservices nicht von Grund auf so gestaltet sind, dass sie geclustert werden, da sie rein zustandslose, sich selbst erhaltende Komponenten sind, die einfach ausgeführt werden sollen.Clustering Microservices Komponenten

Gibt es Möglichkeiten, die Failover-Unterstützung hinzuzufügen? Ich denke an eine externe Komponente, die nach dem Status des Dienstes sucht und auf Fehler reagiert, indem eine andere Instanz auf einem anderen Host gestartet wird. Irgendwelche Vorschläge?

+0

Würden meine Microservices als Docker-Container umhüllen und die Docker-Container mit einem Tool wie Kubernetes verwalten? – sparkr

Antwort

0

Im Allgemeinen gibt es eine discovery service, wo die Dienste selbst registrieren können. Wenn ein Dienst mit einem anderen Dienst kommunizieren muss, fordert er beim Ermittlungsdienst Instanzen dieses Dienstes an, und meistens findet auch ein Lastenausgleich auf der Clientseite statt.

Ich habe auch Hystrix verwendet, um HTTP-Aufrufe zu umbrechen, um Fehler zu behandeln.

Ich bin nicht vertraut mit dem Bau Microservice mit den Play framework, aber wenn Spring mit habe ich verwendet:

  • Netflix Eureka - wie die Entdeckung Service
  • Hystrix - Um HTTP Ausfälle/Timeouts zu behandeln, wenn Dienste nach unten gehen
  • Ribbon - Client-Seite Load-Balancing

eine Blog-Serie, die ein Beispiel unter Verwendung des vollen Stack bietet i s this one. Allerdings verwendet es Spring, aber ich denke, es kann in beide Richtungen hilfreich sein.

+0

Wir sprechen nicht über EJB-ähnliche Dienste, bei denen es sinnvoll ist, eine Instanz eines Dienstes durch Nachschlagen in einer Registrierung zu erhalten. Was wir haben, ist eine Sammlung von Play Framework-Anwendungen, bei denen die API als REST-Endpunkt verfügbar gemacht wird. – sparkr

+0

Ich spreche auch nicht über EJB, ich spreche über komplett getrennten Microservice. Z.B. Anwendung 1 mit einem Produktservice (mit eigener API) und einer zweiten Anwendung mit einem Abrechnungsservice (auch mit eigener API) abspielen. Diese können separat auf 2 Servern eingesetzt werden und registrieren sich selbst beim Discovery-Dienst (der auch komplett getrennt ist) – Kaj