Sistema distribuído com API Gateway em Rust e microserviços backend.
Note
Para acessar o repositório no github, acesse o link: https://github.com/MrcSanto/multiapi-gateway-demo
graph TD
A[Cliente] --> B[Rust Gateway]
subgraph GO[Golang Instances]
C[go_app_1]
D[go_app_2]
end
subgraph NODE[Node Instances]
E[node_app_1]
F[node_app_2]
end
subgraph PYTHON[Python Instances]
G[python_app_1]
H[python_app_2]
end
B --> GO
B --> NODE
B --> PYTHON
GO --> I((PostgreSQL))
NODE --> I
PYTHON --> I
subgraph DB[Database Schemas]
J[Schema go-app]
K[Schema node-app]
L[Schema python-app]
end
I --> J
I --> K
I --> L
| Componente | Tecnologia | Porta | Descrição |
|---|---|---|---|
| Gateway | Rust (Axum) | 8080 | Rate limiting, circuit breaker, load balancing |
| Go API | Golang (Gin) | 8081 | CRUD de usuários |
| Node.js API | Node.js (Express) | 8083 | CRUD de usuários |
| Python API | Python (FastAPI) | 8085 | CRUD de usuários |
| Database | PostgreSQL 12 | 5432 | Persistencia dos dados |
- Clonar o repositório
git clone https://github.com/MrcSanto/multiapi-gateway-demo
cd multiapi-gateway-demo- Iniciar a aplicação
make dev
- Testar a saúde da aplicação
make health
- Para consultar os logs separadamente basta rodar um dos comandos abaixo:
- Golang
make go-logs - Python
make python-logs - Node
make node-logs - PostgreSQL
make db-logs
- Para realizar alguns pequenos testes:
make test
- E finalmente, para derrubar a aplicação:
make clean
-
Testando o Gateway Health
curl http://localhost:8080/
Resposta esperada:
{ "upstreams": ["http://go_app:8000", "http://node_app:8000", "http://python_app:8000"], "circuit_breakers": ["closed"], "rate_limit": 30, "window_sec": 60 } -
Testando o Proxy para a API em Go
# Listar usuários através do gateway curl http://localhost:8080/users -
Testando o Rate Limiting
# Fazer 35 requests rápidas (limite é 30) for i in {1..35}; do curl -s -o /dev/null -w "Request $i: %{http_code}\n" http://localhost:8080/users done
-
Testando o Circuit Breaker
# Parar a Go API docker stop go_app # Fazer requisições (deveria abrir o circuit após 3 falhas) for i in {1..5}; do curl http://localhost:8080/users done # Iniciar novamente docker start go_app
- Igor Zanette
- Marco Antônio Santolin
- Marcos Paulo de Medeiros