Ich habe mit GraphQL und Microservices gearbeitet
Aufgrund meiner Erfahrung funktioniert für mich eine Kombination beider Ansätze, abhängig von der Funktionalität / Verwendung. Ich werde niemals ein einziges Gateway wie in Ansatz 1 haben ... aber keine Grafik für jeden Mikrodienst als Ansatz 2.
Basierend auf dem Bild der Antwort von Enayat würde ich in diesem Fall beispielsweise 3 Grafik-Gateways haben (nicht 5 wie im Bild).
App (Produkt, Warenkorb, Versand, Inventar, benötigt / mit anderen Dienstleistungen verbunden)
Zahlung
Benutzer
Auf diese Weise müssen Sie dem Design der benötigten / verknüpften Minimaldaten, die von den abhängigen Diensten verfügbar gemacht werden, wie Authentifizierungstoken, Benutzer-ID, Zahlungs-ID und Zahlungsstatus, besondere Aufmerksamkeit widmen
Nach meiner Erfahrung habe ich zum Beispiel das "Benutzer" -Gateway, in GraphQL habe ich die Benutzerabfragen / -mutationen, Anmelden, Anmelden, Abmelden, Passwort ändern, E-Mail wiederherstellen, E-Mail bestätigen, Konto löschen, Profil bearbeiten, Bild hochladen , etc ... dieses Diagramm alleine ist ziemlich groß!, es ist getrennt, weil sich die anderen Dienste / Gateways am Ende nur um die resultierenden Informationen wie Benutzer-ID, Name oder Token kümmern.
Dieser Weg ist einfacher zu ...
Skalieren / Herunterfahren der verschiedenen Gateway-Knoten je nach Verwendung. (Zum Beispiel bearbeiten Leute möglicherweise nicht immer ihr Profil oder zahlen ... aber die Suche nach Produkten wird möglicherweise häufiger verwendet).
Sobald ein Gateway ausgereift ist, wächst, die Verwendung bekannt ist oder Sie über mehr Fachwissen in der Domäne verfügen, können Sie feststellen, welcher Teil des Schemas möglicherweise ein eigenes Gateway hat (... ist mir mit einem riesigen Schema passiert, das mit Git-Repositorys interagiert Ich habe das Gateway, das mit einem Repository interagiert, getrennt und festgestellt, dass die einzige Eingabe / verknüpfte Information ... der Ordnerpfad und der erwartete Zweig war.
Die Historie Ihrer Repositorys ist klarer und Sie können ein Repository / Entwickler / Team haben, das einem Gateway und den damit verbundenen Microservices gewidmet ist.
AKTUALISIEREN:
Ich habe einen Kubernetes-Cluster online, der denselben Ansatz verwendet, den ich hier mit allen Backends unter Verwendung von GraphQL, alles OpenSource, beschreibe. Hier ist das Haupt-Repository:
https://github.com/vicjicaman/microservice-realm
Dies ist eine Aktualisierung meiner Antwort, da ich denke, dass es besser ist, wenn die Antwort / der Ansatz aus einem gesicherten Code besteht, der ausgeführt wird und konsultiert / überprüft werden kann. Ich hoffe, dass dies hilft.