Ich gebe dir meine zwei Cent.
but I also get the impression that it becomes much harder to track a message's path though the system.
Sie haben Recht, dass PubSub SOA-Architekturen AKA (SOA 2.0) ein hohes Maß an Entkopplung bietet, sondern Sie auch einen Preis zahlen, weil dies genau das ist, was passiert, wenn auch Tools wie splunk ein helfen Menge.
seems that direct HTTP calls between services and/or a pubsub bus are two common approaches
Eigentlich, wenn Sie die am häufigsten verwendeten soa Frameworks .net Veranstaltung zu buchen (NServiceBus, Mule und Masstransit) sie nicht verwenden http Anrufe, aber ja können Sie eine Microservices Architektur implementieren und verwenden http wie die Kommunikationsprotokoll.
Ich verstehe Sie wollen einige der besten Enterprise-Architektur-Konzepte anwenden, aber ich würde sagen, dass Sie besser mit einfacheren, aber stärkeren Grundlagen beginnen. Es macht keinen Sinn, zu Event Soa zu springen, ohne zu wissen, ob Sie es wirklich brauchen. Wenn ich ein neues System starten und sicherstellen wollte, dass ich die DDD- und SOA-Prinzipien richtig anpasse, würde ich zunächst die Dienste für meine Domain identifizieren. Also sagen Sie, Sie haben 3 Dienste, Sie könnten damit beginnen, die öffentlichen Verträge für jeden dieser Dienste zu deklarieren, Sie brauchen nichts besonderes, Sie können mit der WCF/ASP.NET Web API mit einer Sync REST API beginnen. Sie würden dann sicherstellen, dass jeder Dienst seine eigene Datenbank erhält, weil Sie eine niedrige Kopplung anstreben, und Sie könnten dann mit der WCF/ASP.NET-Web-API erneut eine API-Ebene erstellen (die für die Außenwelt sichtbar ist). weil Ihre Microservices nicht direkt der Außenwelt ausgesetzt sein sollten. An diesem Punkt hätten Sie eine SOA-ähnliche, aber einfache Architektur, aber da Sie gut definierte Verträge hätten, könnten Sie Ihre Dienste erweitern, indem Sie ihnen asynchrone Funktionen hinzufügen, und dazu würden Sie zunächst eine Nachrichtenwarteschlange hinzufügen zu jedem der Dienste. Wissen Sie, Sie müssen nicht mit einem komplexen System beginnen, sondern mit etwas grundlegendem, klar definiertem beginnen, das Sie skalieren können, wenn Sie müssen.
Das System, das ich beschrieben habe, könnte erweitert werden, um Ereignisse einfach zu unterstützen, wenn Sie das wollten, und die Tatsache, dass Sie zu diesem Zeitpunkt bereits Synchronisierungsnachrichten hätten, würde Sie nicht davon abhalten, auch asynchrone Nachrichten zum System hinzuzufügen.
Aber das sind nur meine zwei Cent.