Должен ли я иметь несколько экземпляров GraphQL или только один? - PullRequest
0 голосов
/ 13 февраля 2019

Моя компания использует микросервисную архитектуру, в которой более 50 сервисов, работающих на одной конечной точке GraphQL, которые управляют вызовами между нашими сервисами, что делает наши приложения Android и iOS доступными для наших конечных пользователей.

МыМы находимся в процессе создания нового продукта, который не будет использоваться этими конечными пользователями, но для компаний, которые предлагают товары для наших конечных пользователей через наши приложения.TL; DR: такие вещи, как отображение данных о производительности их продаж через нашу платформу.

Поскольку требования к данным для этого нового продукта и наших приложений почти не отличаются, мы обсуждаем создание новой конечной точки GraphQL только дляэтот продукт, потому что мы боимся превратить исходный слой GraphQL в монолит, который будет действовать как единая точка отказа, например, в случае аварии.

Просмотр веб-сайта GraphQL, публикаций в Facebook и ApolloПринцип Graphql, и т. Д., Довольно просто где-то увидеть фразу «единственная конечная точка».Я хотел бы знать до тех пор, пока это не будет в силе.

Любая рекомендация / мнение или даже отзывы о том, кто участвовал в этом обсуждении, также приветствуется.Если ваша компания уже обсуждала это, какое решение было принято, что было учтено?

1 Ответ

0 голосов
/ 15 февраля 2019

Я бы посоветовал подумать о проблеме по-другому.

У вас есть пара проблем, с которыми вы сталкиваетесь, если я правильно понимаю:

  • Выо том, чтобы впервые представить внутренние API - или что-то похожее на ваши внутренние API - внешним сторонам
  • Вы обеспокоены влиянием одного на другого (например, DDoS на внешний, приводящий ваши внутренние процессы костановка)
  • Вы не знаете, как лучше всего спроектировать GraphQL для совместного использования аналогичных функций в связанных, но потенциально различных API

Это хорошее резюме?

IЯ бы посоветовал вам взглянуть на API-шлюз для защиты вашего внешнего API, независимо от того, что вы выбрали в своих реализациях API.В любом случае вам нужна аутентификация и авторизация.

Шлюз API также дает вам некоторый контроль над тем, как маршрутизировать вызовы API.Если вы решили использовать идентичные API-интерфейсы для внутренних и внешних интерфейсов, у вас может быть пул этих реализаций API для избыточности, и только шлюз API сможет балансировать нагрузку между их подмножеством.Это означало бы, что даже если бы они были беспристрастными, у вас должны быть зарезервированные возможности для обработки внутренних запросов.(Если нагрузка действительно на ваши внутренние источники данных, то это совсем другая проблема!)

Если вы ищете способ создания отдельных API-интерфейсов GraphQL, которые работают полностью независимо, но повторно используют функциональность, вы можете посмотреть на что-токак Apollo , чтобы сделать это, но я не эксперт по GraphQL.

Как я уже упоминал выше, однако, ваше беспокойство об одной точке отказа, вероятно, должно учитывать вашу внутреннюю часть (с).Независимо от того, как вы разделяете свои шлюзы, прокси-серверы, конечные точки GraphQL и т. Д., Если они все используют одну и ту же базу данных, то, вероятно, катастрофа может привести к сбоям ваших внутренних и внешних API одновременно.

Надеюсь, что это даст вам пищу для размышлений.

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