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