Este repositório contém a solução que visa ser o mais minimal e mais performática possível para o desafio Rinha de Backend - 2024/Q1, focado em compartilhar conhecimento através de um desafio prático. A edição deste ano aborda o controle de concorrência com ênfase em operações de crédito e débito (crébitos), inspirado por discussões na comunidade de desenvolvimento.
O desafio consiste em desenvolver uma API HTTP capaz de gerenciar transações de crédito e débito para clientes, garantindo a consistência dos saldos em relação aos limites estabelecidos. Além disso, a API deve fornecer um extrato das últimas transações realizadas pelo cliente.
- POST /clientes/[id]/transacoes: Registra uma nova transação (crédito ou débito) para o cliente especificado.
- GET /clientes/[id]/extrato: Retorna o extrato contendo o saldo atual, limite e as últimas transações do cliente.
- Transações de débito não podem reduzir o saldo do cliente abaixo do seu limite.
- Requisições que resultariam em saldo inconsistente devem retornar HTTP 422.
- IDs de clientes inexistentes devem retornar HTTP 404.
- Linguagem de Programação: Node.js com TypeScript e uWebSockets.
- Banco de Dados: PostgreSQL.
- Conteinerização: Docker e Docker Compose.
Para executar a solução localmente, siga os passos abaixo:
- Clone o repositório:
git clone https://github.com/itujo/rinha-backend.git
- Navegue até o diretório do projeto e execute com Docker Compose:
cd rinha-backend docker-compose up --build
A solução adota uma arquitetura que inclui um balanceador de carga (Load Balancer) para distribuir as requisições entre duas instâncias da aplicação, garantindo a escalabilidade e a disponibilidade do serviço. O banco de dados PostgreSQL é utilizado para persistência dos dados, com esquemas e tabelas otimizados para operações de alta concorrência.
Contribuições para a solução são bem-vindas! Se você tem sugestões de melhorias, correções ou novas funcionalidades, sinta-se à vontade para abrir uma issue ou enviar um pull request.
Este projeto está licenciado sob a Licença MIT - veja o arquivo LICENSE para mais detalhes.