Как выполнять запросы к сервисам?

Есть spa и три backend-сервиса к нему:
  • первый отвечает за аутентификацию пользователя (LDAP) и общие настройки портала (грубо, какие виджеты, с какими настройками и в каком порядке показывать)
  • два других предоставляют данные для наполнения виджетов

5f8a0beb2cbe5708367778.jpeg
Указанные приложения на бэке полностью изолированы друг от друга.

Пытаюсь понять как лучше пускать запросы к этим сервисам. Пока вижу три варианта:

1. Слать запросы на каждый из них напрямую из браузера пользователя.
5f8a0bf7e88a4330658595.jpeg
Плюсы:
  • простота реализации, запросы сразу идут куда надо
  • сервисы остаются полностью независимыми друг от друга

Минусы:
  • необходима сквозная аутентификация (решается прикручиванием SSO)
  • в целом не нравится, что будут идти запросы на большое количество адресов


2. Все запросы отправлять на первый сервис, с него выполнять запросы на сервисы 2 и 3.
5f8a0c277c128153252436.jpeg
Плюсы:
  • с фронта все запросы на один адрес
  • учетные записи пользователей на втором и третьем сервисе не нужны, достаточно сервисной УЗ, которая будет отдельным параметром передавать логин пользователя, выполняющего запрос
  • возможность полностью изолировать сервисы 2 и 3 от пользователей

Минусы:
  • на ровном месте повышенная нагрузка на первый сервис


3. Поставить между фронтом и бэком шлюз, который будет перенаправлять запросы на нужный сервис.
5f8a0c68e9305084663800.jpeg
Плюсы:
  • с фронта все запросы на один адрес
  • приложения остаются изолированными друг от друга
  • роутингом занимается специально для этого сделанная софтина
  • проще масштабировать горизонтально

Минусы:
  • так же необходима сквозная аутентификация
  • еще один сервис, который надо поддерживать. Хотя после первичной настройки лезть туда надо будет только если появится новое backend-приложение


Второй вариант очень интересен возможностью изолировать приложения от пользователя и не настраивать между ними SSO. Но пугает рост нагрузки на первое приложение, так как запросы ко второму и третьему приложениям часто относительные долгие (до 10 секунд).

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

Пока склоняюсь к третьему варианту, но пазл в голове до конца не сложился как это делать. Поэтому хотелось бы услышать мнение со стороны по поводу всего этого.
  • Вопрос задан
  • 92 просмотра
Решения вопроса 1
glaphire
@glaphire
PHP developer
Api gateway (3й вариант) считается лучшим в таком случае, только гейтвей еще собирает весь респонс воедино, чтобы снизить нагрузку с фронта и ускорить ответ. В книгах по микросервисам так написано)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы