Projeto em Go para participar da Rinha de backend
Foi feito de forma simples, com foco em Consistência (com o trade off de um volume razoável de RPS).
O que foi usado:
- Go 1.21.0
- GoChi
- Postgres
- nGinX
- RabbitMQ para salvamento assíncrono dos recursos
- Redis, como cache
- para o create, a API consulta a existencia do apelido no cache, e caso não exista o dado é salvo em uma fila no RabbitMQ. Após salvar, gravo o mesmo dado no REDIS, como cache;
- Um worker dentro da própria API consome a fila do RabbitMQ e realiza a inserção no banco de dados usando comando COPY para uso de escrita em lote;
- para o get por ID, a API valida primeiro se encontra o registro no cache, caso contrário realiza uma consulta no banco;
- a busca por termos é feita diretamente no banco.
Não tem escopo de funcionamento em ambiente de produção.
docker compose -up
O script usado para stress test na rinha também está no repositório no diretório stress-test
. Após os serviços subirem executar:
./run-test.sh
Os serviços mencionados aqui estarão prontos para executar pela porta 9999.