Есть spa и три backend-сервиса к нему:
- первый отвечает за аутентификацию пользователя (LDAP) и общие настройки портала (грубо, какие виджеты, с какими настройками и в каком порядке показывать)
- два других предоставляют данные для наполнения виджетов
Указанные приложения на бэке полностью изолированы друг от друга.
Пытаюсь понять как лучше пускать запросы к этим сервисам. Пока вижу три варианта:
1. Слать запросы на каждый из них напрямую из браузера пользователя.
Плюсы:
- простота реализации, запросы сразу идут куда надо
- сервисы остаются полностью независимыми друг от друга
Минусы:
- необходима сквозная аутентификация (решается прикручиванием SSO)
- в целом не нравится, что будут идти запросы на большое количество адресов
2. Все запросы отправлять на первый сервис, с него выполнять запросы на сервисы 2 и 3.
Плюсы:
- с фронта все запросы на один адрес
- учетные записи пользователей на втором и третьем сервисе не нужны, достаточно сервисной УЗ, которая будет отдельным параметром передавать логин пользователя, выполняющего запрос
- возможность полностью изолировать сервисы 2 и 3 от пользователей
Минусы:
- на ровном месте повышенная нагрузка на первый сервис
3. Поставить между фронтом и бэком шлюз, который будет перенаправлять запросы на нужный сервис.
Плюсы:
- с фронта все запросы на один адрес
- приложения остаются изолированными друг от друга
- роутингом занимается специально для этого сделанная софтина
- проще масштабировать горизонтально
Минусы:
- так же необходима сквозная аутентификация
- еще один сервис, который надо поддерживать. Хотя после первичной настройки лезть туда надо будет только если появится новое backend-приложение
Второй вариант очень интересен возможностью изолировать приложения от пользователя и не настраивать между ними SSO. Но пугает рост нагрузки на первое приложение, так как запросы ко второму и третьему приложениям часто относительные долгие (до 10 секунд).
Первый и третий варианты, в свою очередь, требуют появление дополнительной внешней зависимости в виде сервера аутентификации. Хотя в дальнейшем, скорее всего, все равно придется его поднимать.
Пока склоняюсь к третьему варианту, но пазл в голове до конца не сложился как это делать. Поэтому хотелось бы услышать мнение со стороны по поводу всего этого.