2017-05-15 7 views
9

In meiner Firma haben wir uns für eine Microservice Architektur für ein neues Projekt entschieden. Wir haben uns GraphQL angesehen und sein Potenzial und seine Vorteile für die Verwendung als einzigen API-Endpunkt erkannt.GraphQL und Microservices

Worauf wir nicht eingehen, ist, wie die Kommunikation zwischen GraphQL und jedem Mikrodienst erfolgen soll. Einige argumentieren für REST, andere sagen, wir sollten auch einen graphQL-Endpunkt für jeden Dienst haben.

Ich fragte mich, was sind die Vor- und Nachteile von jedem. Zum Beispiel scheint alles in graphQL etwas redundant zu sein, da wir Teile des Schemas in jedem Dienst replizieren würden. Auf der anderen Seite verwenden wir GraphQL, um einige REST-Fallstricke zu vermeiden. Wir befürchten, dass REST-Endpunkte die aus gQL gewonnenen Vorteile zunichte machen.

Ist jemand auf ein ähnliches Dilemma gestoßen? Keiner von uns ist mit GraphQL vertraut, also gibt es hier einige offensichtliche Pro und Contra, die uns vielleicht fehlen?

Vielen Dank im Voraus!

Antwort

13

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!

+0

Vielen Dank für die ziemlich gründliche und klare Antwort! – tiansivive

+0

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 :-) –

+0

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