Messaging in einer micro-service-Architektur
Ich fange an zu untersuchen, service-orientierte Architekturen und Frage mich, wie man am besten Struktur der Nachrichten zwischen Prozessen. Es scheint, dass die direkte HTTP-Aufrufe von Diensten und/oder ein pubsub-bus sind zwei häufige Ansätze. In welchen Situationen ist der eine günstiger als der andere? Ich kann sehen, wie pubsub würde dazu führen, dass mehr entkoppelt Dienste, aber ich habe auch den Eindruck, dass es immer viel schwieriger zu verfolgen, eine Nachricht ist Weg obwohl die system.
Was sind einige Ressourcen für das lernen mehr zu diesem Thema? Ich bin besonders neugierig, dies im Zusammenhang mit sehr kleinen, "hand-rolled" - Dienste (D. H. Ruby/Sinatra, Knoten - /Express -, Redis-pubsub, etc.) im Gegensatz zu der vorgeschriebenen SOA-stacks/- Suiten gibt...aber ich bin sicher, dass die gleichen Grundsätze gelten.
Dank!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Werde ich Ihnen meine zwei Cent.
but I also get the impression that it becomes much harder to track a message's path though the system.
Du hast Recht, dass pubsub SOA-Architekturen AKA (SOA 2.0) bietet ein gutes Angebot zu entkoppeln, aber Sie bezahlen auch einen Preis, denn dies ist genau das, was passiert, obwohl tools wie splunk kann helfen, eine Menge.
seems that direct HTTP calls between services and/or a pubsub bus are two common approaches
Eigentlich, wenn man sich die meisten verwendet .net event soa-frameworks (NServiceBus, Maultier und MassTransit) Sie verwenden nicht http-Aufrufe, aber das kann man ja umsetzen einer microservices-Architektur und die Verwendung von http als Kommunikationsprotokoll.
Ich verstehe, Sie wollen, starten Sie die Anwendung von einigen der besten enterprise-Architektur-Konzepte, aber ich würde sagen, dass Sie besser dran, beginnend mit einfacheren, noch stärkere Fundamente. Es gibt keinen Punkt, in die Sie springen zum Ereignis-soa, ohne zu wissen, ob Sie es wirklich brauchen. Wenn ich angefangen habe ein neues system und wollte sichergehen, dass ich richtig war die Anpassung der DDD-und SOA-Prinzipien, ich würde zunächst durch die Identifizierung der Dienstleistungen für meine domain. So sagen Sie 3 Dienste, könnten Sie beginnen, indem er die öffentlichen Verträge für diese Dienste, die Sie nicht benötigen, nichts besonderes, kann man mit WCF/ASP.NET-Web-API mit einem sync-REST-API. Sie würde dann sicherstellen, dass jeder Dienst seine eigene Datenbank, denn Sie sind mit dem Ziel für low-Kopplung, und Sie könnten dann erstellen Sie eine API-Schicht (die für die Außenwelt sichtbar) wieder mit WCF/ASP.NET Web API, weil Ihre microservices nicht ausgesetzt werden sollte, direkt an die Außenwelt. Also an dieser Stelle hätte man eine SOA, noch einfach im design, in der Architektur, sondern weil Sie gut definiert haben Verträge, Sie könnten gut Ihre Dienste erweitern, indem Sie hinzufügen async-Funktionen, um Sie und für Sie, dass Sie beginnen würde, indem Sie hinzufügen einer message-queue an die Dienste. Sie wissen, dass Sie nicht brauchen, um zu starten mit einem komplexen system, beginnen Sie mit etwas basic, gut definiert, die ermöglicht es Ihnen, zu skalieren, wenn Sie müssen.
Das system, das ich beschrieben erweitert werden kann, um Ereignisse leichter, wenn Sie wollten, und die Tatsache, dass Sie zu diesem Zeitpunkt bereits sync-Nachrichten würden nicht aufhören, Sie hinzufügen asyn-Nachrichten, um das system als gut.
Aber das sind nur meine zwei Cent.