Сокращение запросов при использовании шлюза GraphQL API в микросервисной архитектуре - PullRequest
0 голосов
/ 13 апреля 2020

Это мой пример архитектуры микросервисов в качестве аргумента:

  1. API-шлюз
  2. Пользователи микросервисов
  3. Свойства микросервисов

Клиент связывается со шлюзом API с помощью GraphQL. Например, представьте запрос, подобный следующему:

{
  me {
    properties {
      id
    }
  }
}

Это приведет к тому, что шлюз API отправит запрос в микросервис «Пользователи» (чтобы выяснить, какой пользователь в данный момент вошел в систему, средства общей аутентификации), и затем отправьте запрос в микросервис Properties (для получения списка свойств). Не так уж плохо, кажется относительно простым.

Тем не менее, мой микросервис Properties также имеет информацию о владельце для каждого свойства. Если бы я получил это, мой запрос выглядел бы так:

{
  me {
    properties {
      id
      owner {
        id
        firstName
        lastName
        # etc.
      }
    }
  }
}

Однако, в дополнение к вышеупомянутым запросам, как только микросервис Properties возвращает список свойств, мой API-шлюз затем отправляет несколько запросов назад. в микросервис Свойства (по одному на свойство), чтобы получить владельца. Если бы у меня было 9 свойств, это привело бы к дополнительным 9 запросам, хотя все это происходило бы одновременно.

Я понимаю, что могу улучшить этот дизайн, предварительно выбрав данные (то есть выбрав владельцев для каждого свойства когда был извлечен исходный список свойств) или, альтернативно, реализовано какое-то пакетное решение, такое как DataLoader ; Тем не менее, я хотел бы получить дополнительные отзывы об этом проекте и способах его улучшения.

Заранее спасибо.

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