Esta é a versão em Node.js/TypeScript do backend para o desafio "Rinha de Backend 2025". O projeto foi convertido do Python original mantendo exatamente a mesma lógica, estrutura e funcionalidades.
O sistema é responsável por processar pagamentos de forma resiliente, utilizando múltiplos gateways e realizando fallback automático em caso de falha.
| Serviço | CPUs | Memória |
|---|---|---|
| nginx | 0.2 | 48MB |
| backend-api-1 | 0.6 | 108MB |
| backend-api-2 | 0.6 | 108MB |
| redis | 0.1 | 86MB |
| Total | 1.5 | 350MB |
├── src/
│ ├── config.ts # Configurações do sistema
│ ├── healthCheck.ts # Worker de healthcheck dos gateways
│ ├── main.ts # Ponto de entrada da API
│ ├── models.ts # Tipos e interfaces TypeScript
│ ├── client.ts # Cliente HTTP e comunicação com gateways
│ ├── queueWorker.ts # Worker assíncrono para processamento
│ └── storage.ts # Persistência de dados no Redis
├── package.json # Dependências do projeto
├── tsconfig.json # Configuração do TypeScript
├── Dockerfile # Dockerização da aplicação
├── docker-compose.yml # Orquestração de containers
├── nginx.conf # Configuração do Nginx
└── README.md
-
Clone o repositório:
git clone <url-do-repositorio> cd backend-para-rinha-2025/node
-
Instale as dependências (desenvolvimento local):
npm install
-
Configure as variáveis de ambiente:
- As variáveis são configuradas no
docker-compose.yml.
- As variáveis são configuradas no
-
Suba os containers:
docker-compose up --build
-
Acesse a aplicação:
- Os endpoints estarão disponíveis na porta 9999.
npm run build— Compila o TypeScriptnpm start— Inicia a aplicação compiladanpm run dev— Executa em modo desenvolvimentonpm run dev:watch— Executa em modo desenvolvimento com auto-reload
- Processamento resiliente de pagamentos
- Fallback automático entre gateways
- Healthcheck dos serviços integrados
- Estrutura modular e fácil de manter
- Sistema de filas em memória com workers assíncronos
- Cache distribuído via Redis
- Node.js 18+
- TypeScript
- Fastify (servidor HTTP)
- Redis (cache e persistência)
- Axios (requisições HTTP)
- Docker & Docker Compose
Adiciona um pagamento na fila para processamento.
Request Body:
{
"correlationId": "string",
"amount": number
}Response: Status 202 (Accepted)
Retorna resumo de pagamentos processados.
Query Parameters:
from(opcional): Data de início (ISO 8601)to(opcional): Data de fim (ISO 8601)
Response:
{
"default": {
"totalRequests": number,
"totalAmount": number
},
"fallback": {
"totalRequests": number,
"totalAmount": number
}
}Remove todos os pagamentos armazenados.
Response:
{
"status": "payments purged"
}A aplicação mantém a mesma arquitetura da versão Python:
- API Fastify - Recebe requisições HTTP
- Queue Worker - Processa pagamentos assincronamente
- Health Check Service - Monitora saúde dos gateways
- Redis - Cache distribuído e persistência
- Load Balancer - Nginx distribui requisições
- Fastify ao invés de FastAPI
- Sistema de filas em memória ao invés de asyncio.Queue
- Axios ao invés de httpx
- TypeScript para tipagem estática
- Mantém exatamente a mesma lógica de negócio
docker-compose up --build— Sobe a aplicação e dependênciasdocker-compose down— Para e remove os containersdocker-compose logs -f— Visualiza logs em tempo real
Este projeto está licenciado sob a licença MIT.
Desenvolvido para o desafio Rinha de Backend 2025 🚀 Versão Node.js/TypeScript com mesma funcionalidade da versão Python original.