@igorkovalenko

Как связать админку на Angular с множеством сторонних сервисов?

Добрый день.
Имеем фронт на ангулар.
Имеем развернутые приложения: proxmox (управление сервером), billmanager(управление оплатами и поддержкой), zabbix(мониторинг серверов) итд..

Вопрос собственно в построении связи между этим всем. Мне кажется, что логично должна быть API прокладка (к примеру django, laravel) с которой будет общаться фронт. А эта прокладка уже будет распределять запросы на proxmox, zabbix, billmanager итд… Либо эта прокладка не нужна? И связывать фронт на ангулар напрямую со всеми сервисами (proxmox, zabbix итд)?

Простой пример. Если пользователь регистрируется на сайте (Angular) он должен быть зарегистрирован одновременно и в zabbix, proxmox, billmanager и еще с пяток приложений которые нужны для предоставления услуги хостинга.

И тут есть два варианта (может больше).
1) Ангулар будет по очереди делать запросы к каждому приложению и регистрировать там аккаунт пользователю. Всего 7 запросов
2) Ангулар делает один запрос к какому-то промежуточному API (к примеру на laravel). А это промежуточное API уже регистрирует аккаунты во всех остальных API.

Для наглядности прикреплю изображение со схемой.

5f9435e4c0abd179465514.png

Возможно есть третий вариант, о котором я не знаю)

Буду признателен за советы.
  • Вопрос задан
  • 91 просмотр
Пригласить эксперта
Ответы на вопрос 3
inoise
@inoise
Solution Architect, AWS Certified, Serverless
Лучше всегда иметь gateway хотябы для безопасности и управления доступами. А при необходимости для асинхронных или параллельных операций и много чего ещё
Ответ написан
@krakaka
второй вариант на картинке плох тем, что нестабильное интернет соединение на клиенте не гарантирует атомарность операции, то есть на три сервиса запрос произойдет, а на 4-ом соединение упадет.

мне кажется, и в первом и во втором случае у вас появляется проблема с атомарностью операции, с транзакционностью, и вам наверное нужно посмотреть на saga паттерн из микросервисной архитектуры, но я на практике его не реализовывал
Ответ написан
@igorkovalenko Автор вопроса
Всем спасибо за ответы.
Исходя из полученных рекомендаций (не только на этом ресурсе) я пришел к выводу, что Вариант 1 (с API Gateway) и есть единственный правильный.

Однако возник не менее важный вопрос. Как быть с авторизацией пользователей?
Думаю было бы логично в том же proxmox и тем более в billmanager автоматически создавать нового пользователя при регистрации нового аккаунта. Иначе как billmanager будет отправлять email уведомления о задолженности, а proxmox будет вести логи под одной учеткой администратора, что усложнит поиск ошибок.

И если остановиться на том, что все таки необходимо создавать отдельную учетную запись в некоторых сервисах, как быть с паролями? Я не смогу использовать пароль, который пользователь задал при регистрации, так как он хранится в зашифрованном виде. С emailом проблем нет. Соответственно нужен новый пароль. И тут снова несколько вариантов развития событий:

1) Генерировать случайный пароль для каждого сервиса, сохранять его в бд и регистрировать учетные записи с этим паролем. Однако для возможности аутентификации нам придется хранить пароль в бд в открытом виде, что не особо хорошая идея.
2) Использовать один универсальный пароль для всех учетных записей. Есть ли в этом варианте какие-то слабые стороны?
3) Использование LDAP? Но не уверен, что есть решение для prox, billmanager и laravel которое не требует больших доработако для решения задачи
Уверен, что с этой задачей уже сталкивались люди на ресурсе, буду рад если подскажете best practice в этом деле.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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