2. Federation / Schema stitching
2.1 Зачем нужна Federation
В микросервисной архитектуре каждая команда может иметь свой GraphQL-сервис.
Фронтенду нужен единый endpoint, а не десятки отдельных.
Schema stitching: объединяет схемы в один endpoint вручную.
Apollo Federation: более продвинутый стандарт, позволяющий каждому сервису быть федеративным узлом.
2.2 Принцип работы Federation
Subgraph Service — каждый сервис предоставляет свою часть схемы: User, Post, Comment.
Gateway / Apollo Gateway — объединяет схемы subgraph и решает, какой сервис вызывать для каждого запроса.
Reference resolver — позволяет связать типы из разных сервисов (например, User в Post).
Пример на Java (с Spring Boot + GraphQL Federation, библиотека graphql-java-federation):
Сервис Users
Сервис Posts
Java resolver для Post.author
3. GraphQL Gateway и объединение данных
3.1 Роль Gateway
Аггрегирует данные из нескольких микросервисов (REST, gRPC, базы, Kafka).
Решает проблемы N+1 через batching (DataLoader).
Управляет кешированием и throttling.
Поддерживает Subscriptions и Federation.
3.2 Пример архитектуры
Особенности:
Gateway использует DataLoader для агрегации запросов, уменьшения количества вызовов к сервисам.
Subscriptions могут получать события из gRPC стримов или Kafka и пушить клиенту.
4. Примеры использования и кейсы
4.1 Live feed
Мобильное приложение подписывается на postAdded.
PostService пушит новые посты через gRPC или внутренний EventBus.
Gateway трансформирует данные в GraphQL Subscription → клиент получает обновления моментально.
4.2 Микросервисная интеграция
UserService и PostService разрабатываются разными командами.
Gateway объединяет их схемы через Federation.
Фронтенд видит единый API: user(id: 1) { name posts { title } }, не зная, что posts приходит из другого сервиса.
4.3 Agreggation + caching
Gateway кеширует данные User на 5 минут.
PostService вызывается только для новых постов.
DataLoader агрегирует все запросы к UserService за одну операцию.
5. Лучшие практики
Использовать Federation для масштабируемых командных проектов.
Subscription через WebSocket + Publisher/Flux для реактивных интерфейсов.
DataLoader для оптимизации N+1 вызовов в распределённых сервисах.
Разделять ответственность: микросервисы предоставляют свои типы и резолверы, Gateway агрегирует.
Event-driven подход для live updates: gRPC streaming, Kafka, Redis Pub/Sub.
Мониторинг: трассировка на уровне каждого subgraph, latency, throughput.
Эволюция схем: добавление новых полей без ломки клиентов, депрекация старых.
#Java #middle #GraphQL
2.1 Зачем нужна Federation
В микросервисной архитектуре каждая команда может иметь свой GraphQL-сервис.
Фронтенду нужен единый endpoint, а не десятки отдельных.
Schema stitching: объединяет схемы в один endpoint вручную.
Apollo Federation: более продвинутый стандарт, позволяющий каждому сервису быть федеративным узлом.
2.2 Принцип работы Federation
Subgraph Service — каждый сервис предоставляет свою часть схемы: User, Post, Comment.
Gateway / Apollo Gateway — объединяет схемы subgraph и решает, какой сервис вызывать для каждого запроса.
Reference resolver — позволяет связать типы из разных сервисов (например, User в Post).
Пример на Java (с Spring Boot + GraphQL Federation, библиотека graphql-java-federation):
Сервис Users
type User @key(fields: "id") {
id: ID!
name: String!
}Сервис Posts
type Post {
id: ID!
title: String!
author: User @provides(fields: "name")
}Java resolver для Post.author
@Component
public class PostResolver implements GraphQLResolver<Post> {
private final UserGrpc.UserBlockingStub userStub;
public PostResolver(UserGrpc.UserBlockingStub userStub) {
this.userStub = userStub;
}
public User author(Post post) {
UserRequest req = UserRequest.newBuilder().setId(post.getAuthorId()).build();
UserResponse resp = userStub.getUser(req);
return mapToGraphQLUser(resp);
}
}
Gateway собирает всю федеративную схему и возвращает фронтенду единый API.
3. GraphQL Gateway и объединение данных
3.1 Роль Gateway
Аггрегирует данные из нескольких микросервисов (REST, gRPC, базы, Kafka).
Решает проблемы N+1 через batching (DataLoader).
Управляет кешированием и throttling.
Поддерживает Subscriptions и Federation.
3.2 Пример архитектуры
[Frontend SPA / Mobile] --GraphQL--> [GraphQL Gateway] --gRPC--> [UserService]
|--> [PostService]
|--> [CommentService]
|--> [External REST API]
Особенности:
Gateway использует DataLoader для агрегации запросов, уменьшения количества вызовов к сервисам.
Subscriptions могут получать события из gRPC стримов или Kafka и пушить клиенту.
4. Примеры использования и кейсы
4.1 Live feed
Мобильное приложение подписывается на postAdded.
PostService пушит новые посты через gRPC или внутренний EventBus.
Gateway трансформирует данные в GraphQL Subscription → клиент получает обновления моментально.
4.2 Микросервисная интеграция
UserService и PostService разрабатываются разными командами.
Gateway объединяет их схемы через Federation.
Фронтенд видит единый API: user(id: 1) { name posts { title } }, не зная, что posts приходит из другого сервиса.
4.3 Agreggation + caching
Gateway кеширует данные User на 5 минут.
PostService вызывается только для новых постов.
DataLoader агрегирует все запросы к UserService за одну операцию.
5. Лучшие практики
Использовать Federation для масштабируемых командных проектов.
Subscription через WebSocket + Publisher/Flux для реактивных интерфейсов.
DataLoader для оптимизации N+1 вызовов в распределённых сервисах.
Разделять ответственность: микросервисы предоставляют свои типы и резолверы, Gateway агрегирует.
Event-driven подход для live updates: gRPC streaming, Kafka, Redis Pub/Sub.
Мониторинг: трассировка на уровне каждого subgraph, latency, throughput.
Эволюция схем: добавление новых полей без ломки клиентов, депрекация старых.
#Java #middle #GraphQL
👍2