2017-05-15 22 views
9

Tại công ty của tôi, chúng tôi đã quyết định về kiến ​​trúc microservice cho một dự án mới. Chúng tôi đã xem xét GraphQL và nhận ra tiềm năng và lợi thế của nó để sử dụng như là điểm cuối API duy nhất của chúng tôi.GraphQL và Microservices

Điều chúng tôi không đồng ý là cách giao tiếp nên được thực hiện giữa GraphQL và từng dịch vụ vi mô. Một số người tranh luận với REST, những người khác nói rằng chúng ta cũng nên có một điểm cuối đồ thị cho mỗi dịch vụ.

Tôi đã tự hỏi một số ưu điểm và nhược điểm của mỗi loại là gì. Ví dụ, có tất cả mọi thứ trong graphQL có vẻ hơi dư thừa, vì chúng ta sẽ tái tạo các phần của lược đồ trong mỗi dịch vụ. Mặt khác, chúng tôi đang sử dụng GraphQL để tránh một số cạm bẫy REST. Chúng tôi sợ có các thiết bị đầu cuối REST sẽ vô hiệu hóa các lợi thế thu được từ gQL.

Có ai gặp phải tình huống khó xử tương tự không? Không ai trong chúng ta có kinh nghiệm với GraphQL, vì vậy có một số chuyên nghiệp rõ ràng và con ở đây mà chúng ta có thể bị mất tích?

Cảm ơn trước!

Trả lời

13

Câu hỏi hay! Có vẻ như bạn đang hỏi cách thiết lập kiến ​​trúc của mình cho GraphQL và microservices, và tại sao.

nền

tôi sẽ khuyên bạn sử dụng GraphQL vì nó trường hợp sử dụng tốt nhất là để củng cố nguồn dữ liệu một cách sạch sẽ và phơi bày tất cả các dữ liệu đó để bạn thông qua một API chuẩn. Mặt khác, một trong những vấn đề chính khi sử dụng microservices là rất khó để sắp xếp tất cả các chức năng khác nhau mà bạn có thể có. Và khi ứng dụng của bạn phát triển, nó trở thành một vấn đề lớn với việc củng cố tất cả các chức năng microservice này.

Lợi ích của việc sử dụng các công nghệ này là rất lớn vì hiện tại bạn có cổng API GraphQL cho phép bạn truy cập vào các dịch vụ nhỏ của mình từ ứng dụng khách như một ứng dụng đơn khối, nhưng bạn cũng nhận được nhiều lợi ích khi sử dụng dịch vụ microservices từ quan điểm hiệu suất và hiệu suất.

Kiến trúc

Vì vậy, các kiến ​​trúc Tôi muốn giới thiệu là phải có một proxy GraphQL ngồi trước microservices của bạn, và trong truy vấn và đột biến GraphQL bạn phân giải, gọi ra các chức năng mà bạn cần phải lấy dữ liệu cần thiết . Nó thực sự không quan trọng lắm khi có một cổng GraphQL ở phía trước của microsQL microservices hoặc một cổng GraphQL trước các thiết bị đầu cuối REST, mặc dù tôi thực sự cho rằng nó sẽ đơn giản hơn để trưng ra các chức năng microservice của bạn như REST các thiết bị đầu cuối vì mỗi chức năng về lý thuyết chỉ phục vụ một mục đích. Bạn sẽ không cần thêm chi phí và phức tạp của GraphQL trong trường hợp này vì không nên có quá nhiều logic quan hệ xảy ra đằng sau hậu trường.

Nếu bạn đang tìm kiếm các nhà cung cấp dịch vụ microservice, những nhà cung cấp dịch vụ tốt nhất mà tôi đã xem là AWS Lambda, Webtask, Azure FunctionsGoogle Cloud Functions. Và bạn có thể sử dụng Serverless như một cách để quản lý và triển khai các chức năng microservice này.

Ví dụ:

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'); 
    }, 
    }, 
}; 

Dịch vụ GraphQL

Đây là điều mà chúng tôi đã khám phá tại Scaphold cũng trong trường hợp bạn muốn dựa vào một dịch vụ để giúp bạn quản lý luồng công việc này. Đầu tiên chúng tôi cung cấp dịch vụ phụ trợ GraphQL giúp bạn bắt đầu với GraphQL chỉ trong vài phút và sau đó cho phép bạn nối thêm các dịch vụ nhỏ của riêng bạn (ví dụ: logic tùy chỉnh) vào API GraphQL của bạn như một thành phần của các hàm. Về bản chất, đây là hệ thống webhook tiên tiến nhất mang lại cho bạn sự linh hoạt và kiểm soát cách gọi ra các dịch vụ nhỏ của bạn.

Hãy cũng tham gia Serverless GraphQL Meetup trong SF nếu bạn đang ở trong khu vực này :)

Hope this helps!

+0

Cảm ơn bạn đã trả lời khá kỹ lưỡng và rõ ràng! – tiansivive

+0

Có điều gì đó về câu hỏi về GraphQL và kiến ​​trúc phần mềm dường như mời sử dụng tiêu đề h1 và nhiều phần. Tôi biết tôi đã trả lời lời mời đó :-) –

+0

câu hỏi tôi đã và đang nghiên cứu rất nhiều về điều này, và điều khiến tôi băn khoăn là, nếu chúng ta có một dịch vụ hoạt động như một số cổng với graphql, dịch vụ đồng bộ? Hay bạn đang nói rằng dịch vụ graphql chỉ nên kết nối đồng bộ với các dịch vụ được công khai? – RicardoDuarte