Große Frage! Klingt so, als würden Sie fragen, wie Sie Ihre Architektur für GraphQL und Microservices einrichten und warum.
Hintergrund
würde ich mit GraphQL empfehlen, da es am besten Anwendungsfall ist, ist Datenquellen in eine saubere Art und Weise zu konsolidieren und über eine standardisierte API Sie all diese Daten aus. Auf der anderen Seite, eines der Hauptprobleme bei der Verwendung von Microservices ist, dass es schwierig ist, all die verschiedenen Funktionen, die Sie möglicherweise haben können, zu streiten. Und wenn Ihre Anwendung wächst, wird es ein Hauptproblem bei der Konsolidierung all dieser Microservice-Funktionen.
Die Vorteile der Verwendung dieser Technologien sind enorm, da Sie nun im Wesentlichen ein GraphQL API-Gateway haben, mit dem Sie von Ihrem Client aus auf Ihre Microservices zugreifen können, als ob es sich um eine einzige monolithische App handelt. Sie erhalten aber auch die vielen Vorteile der Verwendung von Microservices vom Standpunkt der Leistung und Effizienz.
Architektur
So ist die Architektur ich empfehlen würde, ist eine GraphQL Proxy vor Ihrem Microservice sitzt haben, und in Ihrer GraphQL Abfrage und Mutation Resolver, rufen auf die Funktion, die Sie benötigen die erforderlichen Daten abrufen .
Zwischen einem GraphQL-Gateway vor GraphQL-Microservices oder einem GraphQL-Gateway vor REST-Endpunkten spielt es eigentlich keine große Rolle, obwohl ich argumentieren würde, dass es einfacher wäre, Ihre Microservice-Funktionen als REST darzustellen Endpunkte, da jede Funktion theoretisch nur einem Zweck dienen sollte. Sie werden den zusätzlichen Aufwand und die Komplexität von GraphQL in diesem Fall nicht benötigen, da hinter den Kulissen nicht zu viel relationale Logik stattfinden sollte.
Wenn Sie suchen Micro Anbieter die besten, die ich je gesehen habe sind AWS Lambda, Webtask, Azure Functions und Google Cloud Functions. Und Sie können Serverless als eine Möglichkeit zum Verwalten und Bereitstellen dieser Microservice-Funktionen verwenden.
Zum Beispiel:
import request from 'request';
// GraphQL resolver to get authors
const resolverMap = {
Query: {
author(obj, args, context, info) {
// GET request to fetch authors from my microservice
return request.get('https://example.com/my-authors-microservice');
},
},
};
GraphQL Dienst
Dies ist etwas, das wir bei Scaphold erkunden als auch für den Fall, habe man auf einen Service verlassen möchten, Ihnen zu helfen verwalten dieser Arbeitsablauf. Wir stellen zunächst einen GraphQL-Backend-Service bereit, der Ihnen den Einstieg in GraphQL in wenigen Minuten ermöglicht und Ihnen dann ermöglicht, Ihre eigenen Microservices (d. H. Benutzerdefinierte Logik) als eine Zusammenstellung von Funktionen an Ihre GraphQL-API anzuhängen. Es ist im Wesentlichen das fortschrittlichste Webhook-System, das Ihnen Flexibilität und Kontrolle darüber gibt, wie Sie Ihre Microservices aufrufen können.
Fühlen Sie sich frei, um auch die Serverless GraphQL Meetup in SF beitreten, wenn Sie in der Gegend sind :)
hoffe, das hilft!
Vielen Dank für die ziemlich gründliche und klare Antwort! – tiansivive
Es gibt Fragen in Bezug auf GraphQL und Softwarearchitektur, die die Verwendung von h1 Titeln und mehreren Abschnitten zu laden scheint. Ich weiß, dass ich auf diese Einladung geantwortet habe :-) –
frage ich habe viel recherche diesbezüglich gemacht, und die dinge, die mich wundern, ist, wenn wir einen service haben, der als irgendeine art von gateway mit graphql agiert, wird dies nicht zu einem machen Synchroner Dienst? Oder sagen Sie, dass der Dienst graphql nur synchron mit öffentlichen Diensten verbunden sein sollte? – RicardoDuarte