Это мой пример архитектуры микросервисов в качестве аргумента:
- API-шлюз
- Пользователи микросервисов
- Свойства микросервисов
Клиент связывается со шлюзом API с помощью GraphQL. Например, представьте запрос, подобный следующему:
{
me {
properties {
id
}
}
}
Это приведет к тому, что шлюз API отправит запрос в микросервис «Пользователи» (чтобы выяснить, какой пользователь в данный момент вошел в систему, средства общей аутентификации), и затем отправьте запрос в микросервис Properties (для получения списка свойств). Не так уж плохо, кажется относительно простым.
Тем не менее, мой микросервис Properties также имеет информацию о владельце для каждого свойства. Если бы я получил это, мой запрос выглядел бы так:
{
me {
properties {
id
owner {
id
firstName
lastName
# etc.
}
}
}
}
Однако, в дополнение к вышеупомянутым запросам, как только микросервис Properties возвращает список свойств, мой API-шлюз затем отправляет несколько запросов назад. в микросервис Свойства (по одному на свойство), чтобы получить владельца. Если бы у меня было 9 свойств, это привело бы к дополнительным 9 запросам, хотя все это происходило бы одновременно.
Я понимаю, что могу улучшить этот дизайн, предварительно выбрав данные (то есть выбрав владельцев для каждого свойства когда был извлечен исходный список свойств) или, альтернативно, реализовано какое-то пакетное решение, такое как DataLoader ; Тем не менее, я хотел бы получить дополнительные отзывы об этом проекте и способах его улучшения.
Заранее спасибо.