Распределенный GraphQL в микросервисах - PullRequest
2 голосов
/ 05 апреля 2020

Я пытаюсь написать микросервисы в Java. Я реализовал конечные точки GraphQL с помощью graphql-spring-boot-starter.

Теперь у меня есть проблема, как сделать его эффективным.

Datamodel похож на дерево, и мне нужно запросить данные от нескольких услуг одновременно. Проблема в том, как отфильтровать член коллекции, что-то вроде CONTAINS в базе данных, но данные находятся не в отдельной таблице, а в отдельном микросервисе. Может быть, проблема в том, что домен неправильно распределен между службами?

Давайте приведем пример: у меня есть 3 микросервиса: пользователи, библиотеки, книги. В каждой библиотеке есть коллекция пользователей и книг (просто список идентификаторов, например, внешние ключи). У каждой книги есть название и жанр. В каждой библиотеке есть списки книг, заимствованных пользователем (также идентификаторы).

Вопрос 1 - должен ли в библиотеке храниться список книг и пользователей (только идентификаторы, такие как внешние ключи)? Это правильный подход?

Вопрос 2 - Я хочу найти библиотеки, в которых указанные пользователи (по фамилии) заимствовали книги указанного жанра. Идя сверху, мне нужно сначала найти библиотеки, содержащие пользователей. Не легко, так как у нас есть имена в разных сервисах. Сначала нам нужно запросить пользователей, собрать их идентификаторы, и теперь мы можем запрашивать библиотеки. Но это еще не все. Теперь нам нужно найти книги для каждого пользователя и проверить жанры - в разных сервисах. И это еще не все. Я хочу, чтобы все было представлено в хорошем виде, поэтому весь вывод должен быть отсортирован и разбит на страницы. Это вынуждает меня собирать все данные со всех служб, а затем разбивать их на страницы и сортировать, что, конечно, неэффективно.

Пожалуйста, не концентрируйтесь на этом примере, я смотрю, как решить общий подход, не этот пример. Я пытался использовать Datafetchers, но это хлопотно, и нет хороших примеров вызова Graphql-to-GraphQL. Большинство примеров охватывает вызов конечных точек REST et c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...