https://github.com/s-4i5/go-gateway-test
Having fun with making custom registration, routing, discovery
https://github.com/s-4i5/go-gateway-test
api-gateway golang jwt-authentication microservices postgresql service-discovery service-registry
Last synced: about 2 months ago
JSON representation
Having fun with making custom registration, routing, discovery
- Host: GitHub
- URL: https://github.com/s-4i5/go-gateway-test
- Owner: S-4I5
- Created: 2023-11-05T23:00:22.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2024-07-09T23:58:50.000Z (about 2 years ago)
- Last Synced: 2025-01-25T08:26:36.073Z (over 1 year ago)
- Topics: api-gateway, golang, jwt-authentication, microservices, postgresql, service-discovery, service-registry
- Language: Go
- Homepage:
- Size: 45.9 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Service discovery, gateway, load balancing and user auth
## 1. Description
Прототип системы с самописными client-side service discovery и gateway, а так же авторизацией/аутентификацией пользователей
P.S. - хоть половина кода и была выложена недавно, ей так же 8 месяцев, я просто забыл это тогда запушить :skull:
## 2. Quick explanation
### 1. Services
* Auth service - сервис, занимающийся работой с пользователями, их авторизаций/аутентификацией
* Discovery service - сервис, занимающийся мониторингом поднятых сервисов и распределением нагрузки на них
* Gateway service - сервис, отвечающий за перенаправление запросов c выполнением необходимых при этом операций
* Test service - тестовый сервис, который выступает конечным звеном цепочки
### 2. Request flow
Рассмотрим ситуацию, в которой мы зарегистрировались в auth сервисе и хотим достучаться до тестового сервиса
Сначала нас запрос с bearer токеном, который мы получили при регистрации/логине, прилетает в gateway. Данный сервис проверяет, необходима ли авторазиция, если да, то обращается к auth сервису
Далее он запрашивает url для перенаправления запроса, обращаясь к discovery сервису. Тот хранит в себе сведения о всех сервисах - при запуске каждый из них должен зарегистрировать себя у него, а потом каждые две секунды отсылать heartbeat как сигнал того, что он активен. Если сингалов не больше, чем две сукнуды - сервис удаляет из списка. Так же сервис хранит кол-во запросов, которое обработал каждый из клиентов, и основываясь на этом выбирает сервис с наименьщим таковым кол-во для обработки следющего запроса
Получив ответ от discovery сервиса, gateway поднимает обратное прокси и пересылает запрос по полученному url.