bullet-crystal
🐓 Rinha de Backend 2025 - Crystal
⢀⣴⣿⣿⣿⣿⣿⣶⣶⣶⣿⣿⣶⣶⣶⣶⣶⣿⡿⣿⣾⣷⣶⣶⣾⣿⠀
⣠⣿⣿⢿⣿⣯⠀⢹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⣿⡇⣿⣿⣿⣿⣿⡇
⠀⣰⣿⣿⣷⡟⠤⠟⠁⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢸⡇⣿⣿⣿⣿⣿⡇
⠀⣿⣿⣿⣿⣿⣷⣶⣿⣿⡟⠁⣮⡻⣿⣿⣿⣿⣿⣿⣿⣿⢸⡇⣿⣿⣿⣿⣿⡇
⠘⣿⣿⣿⣿⣿⣿⣿⣿⠏⠀⠀⣿⣿⣹⣿⣿⣿⣿⣿⣿⡿⢸⡇⣿⣿⣿⣿⣿⡇
⠀⠙⢿⣿⣿⣿⡿⠟⠁⣿⣿⣶⣿⠟⢻⣿⣿⣿⣿⣿⣿⡇⣼⡇⣿⣿⣿⣿⣿⠇
⠀⠀⠈⠋⠉⠁⣶⣶⣶⣿⣿⣿⣿⢀⣿⣿⣿⣿⣿⣿⣿⣇⣿⢰⣿⣿⣿⣿⣿⠀
⠀⠀⠀⠀⠀⠙⠿⣿⣿⣿⡄⢀⣠⣾⣿⣿⣿⣿⣿⣿⣿⣽⣿⣼⣿⣿⣿⣿⠇⠀
⠀⠀⠀⠀⠀⠀⠀⠈⠉⠒⠚⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠛⠿⠿⠿⠿⠿⠋⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⣿⣙⡆⠀⠀⡇⠀⢸⠀⠀⢸⠀⠀ ⢸⡇⠀⠀⢸⣏⡉ ⠙⡏⠁⠀
⠀⠀⠀⣿⣉⡷⠀⠀⢧⣀⣼ ⠀⢸⣀ ⢸⣇⡀ ⢸⣏⣁⠀ ⠀⡇⠀
📋 Stack Utilizada
- Crystal: Linguagem de programação de alta performance
- PostgreSQL: Armazenamento de dados de pagamentos
- Redis: Cache para otimização de health checks
- Nginx: Load balancer com round-robin
- Docker: Containerização completa
Como Executar
1. Subir os Payment Processors
# Primeiro, suba os payment processors
docker-compose -f docker-compose.yml up -d
2. Subir o Backend
# Depois, suba o backend
docker-compose up -d
3. Acessar a API
A API estará disponível em http://localhost:9999
Endpoints da API
POST /payments
Intermedia uma solicitação de pagamento para os Payment Processors.
Corpo da Requisição:
{
"correlationId": "4a7901b8-7d26-4d9d-aa19-4dc1c7cf60b3",
"amount": 19.90
}
Campos:
correlationId
: UUID único obrigatórioamount
: Valor decimal obrigatório (maior que 0)
Respostas:
200 OK
: Pagamento processado com sucesso400 Bad Request
: Dados de entrada inválidos500 Internal Server Error
: Erro no processamento
GET /payments-summary
Retorna resumo dos pagamentos processados, usado para auditoria.
Parâmetros de Query (opcionais):
from
: Timestamp ISO em UTC (ex:2020-07-10T12:34:56.000Z
)to
: Timestamp ISO em UTC (ex:2020-07-10T12:35:56.000Z
)
Exemplo de Uso:
GET /payments-summary?from=2020-07-10T12:34:56.000Z&to=2020-07-10T12:35:56.000Z
Resposta (200 OK):
{
"default": {
"totalRequests": 43236,
"totalAmount": 415542345.98
},
"fallback": {
"totalRequests": 423545,
"totalAmount": 329347.34
}
}
POST /purge-payments
Endpoint secreto utilizado pelo script de teste da Rinha para limpar todos os pagamentos do banco. Não requer corpo na requisição.
Exemplo de Uso:
curl -X POST http://localhost:9999/purge-payments
Resposta (200 OK):
{"result": "ok"}
Limites de Memória
- API 1: 70MB
- API 2: 70MB
- PostgreSQL: 180MB
- Nginx: 20MB
- Total: 340MB (dentro do limite de 350MB)
Repository
bullet-crystal
Owner
Statistic
- 0
- 0
- 0
- 0
- 2
- about 22 hours ago
- July 17, 2025
License
Links
Synced at
Sat, 19 Jul 2025 22:50:05 GMT
Languages