Skip to content

margato/go-semaphore-poc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Semaphore-based Task Processing POC

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.

Distributed semaphore

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.

Pré-requisitos

  • Docker e Docker Compose
  • Go 1.20+

Como executar localmente

  1. Suba infraestrutura. Na raiz do diretório, execute:
cd ./infra
docker-compose up -d
  1. Crie a fila SQS. Na raiz do diretório, execute:
cd ./infra/aws
terraform init
terraform apply -auto-approve
  1. Inicie a aplicação:
cd ./app
make run
  1. Inicie o envio das mensagens:
cd ./integration-test
chmod +x sqs.sh
./sqs.sh

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published