2015-02-15 15 views
10

Ich bekomme das Problem, dass etcd/Consul/$ was auch immer versuchen zu lösen. Service-Konsumenten müssen mit Service-Providern sprechen, ein enorm verteiltes System benötigt einen Mechanismus, um die beiden zu heiraten.Warum sollten Sie sich mit der Erkennung von Diensten beschäftigen, wenn die nachrichtenorientierte Middleware die Aufgabe erfüllt?

Allerdings, das Problem "Wohin gehen Service-Konsumenten mit ihren Anforderungen?" ist alt und IMO wurde mit MOM - Message Oriented Middleware gelöst.

In MOM besteht die Idee darin, dass es den Service-Konsumenten egal ist, wo die Service-Provider leben. Sie senden einfach eine Nachricht und lassen den Nachrichtenbus die Nachricht an den entsprechenden Verbraucher weiterleiten. Es kann mehrere Anbieter geben, die alle dasselbe tun (queue-basiertes Round-Robin) oder versionierte Provider (/ v1/request geht zu einem,/v2/request geht zu einem anderen).

Dies ist ein einfaches, leistungsstarkes Integrationsmuster, das eine Serviceschnittstelle vollständig von ihrer Implementierung entkoppelt.

Und doch sehe ich diese bizarre Obsession mit der Entdeckung Service-Provider, die enge Kopplung zwischen Verbraucher und Anbieter zu schaffen erscheint (neben einigen anderen anti-Muster als auch.)

Also, was soll ich fehlt Hier? TIA.

Antwort

1

In MOM fließt alles durch den Bus, sodass es zu einem Engpass werden kann. Bei der Dienstsuche sucht ein Konsument einen Produzenten "einmal" (ok, muss nach einer Weile vielleicht noch einmal nachschauen) und dann "direkt" (ok könnte über einen Proxy) mit ihm reden.

Oder wenn Sie es vorziehen, eingängige Sätze: intelligente Endpunkte & stumm Rohre vs (i guess) stumm Endpunkte & intelligente Rohre.

1

Persönlich sehe ich nicht die beiden als entweder oder für diese Art von Architektur. Sie können die Dienstsuche verwenden, um zu sehen, welche Dienste im Moment verfügbar sind, und die MOM für die Ereignisse abonnieren, von denen Sie wissen, dass sie da sind. Wenn Sie keine Dienste finden, auf die Sie angewiesen sind, können Sie eine Warnung ausgeben. Nicht alle MOMs lassen Sie wissen, wenn es keinen Verleger für einen Kanal gibt.

Sie können sie auch so kombinieren, dass die Dienstermittlung die Dienste enthält, die Sie direkt kontaktieren möchten, z. B. ein Datenspeicher, der keine Arbeit ausführt, und das MOM weiterhin zum Abonnieren von Ereignissen für Änderungen verwendet andere Systeme tun es. Nicht alle Anwendungsfälle passen gut zur Job-Warteschlange, da einige Aufgaben synchron gelöst werden müssen, und dann ist die Service-Erkennung eine großartige Möglichkeit für eine dynamische Umgebung.

Ich bevorzuge die asynchrone MQ selbst, und ich denke, wenn Sie es richtig machen, mit Load Balancing, Redundanz, Clustering mit separaten Readern und Schreiber etc können Sie leicht große Stabilität, Skalierbarkeit und einen standardisierten Weg für alle Ihre haben Komponenten zur Kommunikation.