A rinha é um desafio de programação para compartilhar conhecimento. Nessa edição o tema foi controle de concorrência, criando uma API de Créditos e Débitos.
Mais informações do desafio nesse link.
Decidi por utilizar Go para aprender mais da linguagem. Optei por usar a standard library para criar a API no lugar de frameworks conhecidos e tentei ao máximo construir tudo na mão.
A separação entre camadas: use-cases/services, repositories, controllers ficou para depois. O meu objetivo principal era completar o desafio e ter todas as funcionalidades cobertas com testes. Por isso, desde o começo criei a suite de testes de integração, rodando o banco de dados com Docker.
Com essa garantia dos testes, ficará bem mais fácil refatorar depois para seguir um padrão de Clean Architecture/Hexagonal Architecture ou qualquer outra que for decidida.
- Go para API
- PostgreSQL como banco de dados
- NGINX como load balancer
A arquitetura proposta pelo desafio foi a seguinte.
flowchart TD
G(Stress Test - Gatling) -.-> LB(Load Balancer / porta 9999)
subgraph Sua Aplicação
LB -.-> API1(API - instância 01)
LB -.-> API2(API - instância 02)
API1 -.-> Db[(Database)]
API2 -.-> Db[(Database)]
end
Para executar somente a API em Go:
make run
Rodando os testes:
make test
Caso tenha feito modificações na imagem. Faça o build dela:
make build-image
Suba todos os containers:
make up
Para destruir os containers:
make down
MIT © André Brandão