В случае с микросервисной архитектурой существует множество сервисов, построенных на разных стеках и взаимодействующих друг с другом, а также с клиентом через REST.
Итак, что я прошу, сделать этот шлюз единой точкой входа от клиента или потребителя e.g api.domain.com
, которая перенаправит запрос в соответствующую службу на основе конечной точки, как мы знаем о назначении API.-gateway.
Ну, это возможно с помощью балансировщика нагрузки, например nginx-plus
или HAProxy
, просто балансируя нагрузку и передавая прокси.Но мои ожидания (mostly about authentication-authorization based)
ниже:
- Потребитель будет аутентифицироваться с учетными данными, сервер вернет обратно маленький access_token
(minimal e.g user_id as payload)
, который будет сохранен в клиентском приложении.В дальнейшем каждый запрос клиента будет отправлять этот токен как авторизацию, как это делает аутентификация на основе JWT или токена. - Перед передачей запроса другому сервису
Gateway-service
декодирует этот маленький auth_token и создает другой токен авторизации (let's say Big Token)
сассоциированные пользователи - вся информация (запрос от полезной нагрузки, декодированной малым токеном), которая будет передаваться в качестве Авторизации фактическому сервису и внутреннему сервису для вызова сервиса, из которого будет обслуживаться контент.будет некоторое время сохраняться в redis
, чтобы уменьшить вызов API для получения информации о пользователе каждый раз. - Запрос кэширования и балансировки нагрузки.
Я не уверен, что это возможнодостичь с помощью nginx-plus
или HAproxy
, вероятно, НЕТ! , потому что там у нас мало запросов к базе данных, вызовы API и кеширование в Redis и т. д. Что невозможно с помощью nginx
или HAProxy
или чего-либо подобного.
Я нашел две службы для Node.js/Express.js
для передачи прокси Node-HTTP-Proxy and Express-Gateway , который предназначен только для api-сервисов expressjs, но здесь я использую фреймворк или языки polyglot.
Примечание: здесь сервисы построены с использованием Python flask, Django и ExpressJS, некоторые из них размещены на виртуальной машине Unix, где используется nginx в качестве балансировщика нагрузки, и немногие из них размещены в службе приложений Azure, где они используют IIS какБалансировщик нагрузки.
Спасибо за чтение и понимание, было бы замечательно, если вы все равно можете что-то предложить или порекомендовать.