Este projeto é uma prova de conceito (POC) que demonstra o uso de um semáforo distribuído, baseado em Redis, para controlar a concorrência no processamento de tarefas consumidas de uma fila AWS SQS simulada via LocalStack.
Nesta POC, o objetivo é demonstrar como aplicar backpressure em uma seção crítica, limitando o acesso concorrente a um recurso compartilhado. O foco está no controle do semáforo distribuído, não na lógica interna da seção crítica.
O semáforo utilizado é do tipo contador, no qual se define o número máximo de permissões
disponíveis, e cada aplicação adquire uma permissão
para acessar a seção crítica. Cada permissão
possui um timeout configurado, garantindo a liberação automática caso a aplicação falhe em liberar manualmente, evitando deadlock.
Se a aplicação não conseguir adquirir uma permissão
, a mensagem retorna a fila e é aplicado um backoff para o próximo poll.
- Docker e Docker Compose
- Go 1.20+
- Suba infraestrutura. Na raiz do diretório, execute:
cd ./infra
docker-compose up -d
- Crie a fila SQS. Na raiz do diretório, execute:
cd ./infra/aws
terraform init
terraform apply -auto-approve
- Inicie a aplicação:
cd ./app
make run
- Inicie o envio das mensagens:
cd ./integration-test
chmod +x sqs.sh
./sqs.sh