Pular para o conteúdo
Projetos
No ar2026

TaskForge

Fila de tarefas em Go com gRPC, workers concorrentes e TUI interativa.

Função
Backend Engineer
Status
No ar
TaskForge
// Visão geral

TaskForge é uma fila de tarefas inspirada no Google Cloud Tasks, criada como projeto de portfólio para explorar fundamentos de backend em Go. O sistema permite criar, agendar, listar, acompanhar e cancelar tarefas através de uma API gRPC, um CLI tradicional e uma TUI interativa no terminal. O projeto usa Protocol Buffers para definir o contrato da API, goroutines para concorrência, channels como fila interna, um scheduler para despachar tarefas agendadas e um worker pool para processar jobs. Também inclui retry com backoff simples, dead-letter para tarefas que esgotam as tentativas e shutdown gracioso do servidor. É um projeto de estudo por natureza: o armazenamento é in-memory, ainda não há autenticação nem persistência em banco, e o handler de tarefas é simulado com payloads como `fail` e `slow` para exercitar os caminhos de retry e dead-letter. O foco foi concorrência e arquitetura limpa, não escala de produção.

Principais recursos

  • API gRPC com contratos em Protocol Buffers.
  • CLI para criar, listar, assistir e cancelar tarefas.
  • TUI interativa no terminal com dashboard e navegação por tarefas.
  • Scheduler para tarefas com delay.
  • Worker pool concorrente usando goroutines.
  • Fila interna baseada em channels.
  • Retry com backoff simples.
  • Dead-letter quando a task esgota as tentativas.
  • Output bonito no terminal e banner de inicialização do servidor.
  • Shutdown gracioso.
// Arquitetura

Arquitetura

As requisições chegam pelo CLI ou pela TUI, passam pelo servidor gRPC e caem no task store. O scheduler move as tarefas prontas para uma fila baseada em channels, consumida por um worker pool concorrente — cada job terminando como concluído, em retry ou em dead-letter.

  • Fluxo: CLI/TUI → servidor gRPC → task store → scheduler → fila de channels → worker pool → concluído / retry / dead-letter.
  • Protocol Buffers definem o contrato da API compartilhado entre servidor e clients.
  • Goroutines e channels modelam a fila e o worker pool concorrente.
  • O scheduler despacha tarefas agendadas quando chega a hora.
  • Tarefas que falham entram em retry com backoff simples e vão para dead-letter após o máximo de tentativas.
  • Task store in-memory (sem persistência em banco ainda).
  • Shutdown gracioso finaliza o trabalho em andamento antes de encerrar o servidor.
// Desafios e soluções

Desafios e soluções

Coordenar workers concorrentes

Problema

Processar tarefas em paralelo sem race conditions nem vazar goroutines.

Solução

Uma fila baseada em channels alimenta um worker pool fixo, e o shutdown gracioso finaliza o trabalho em andamento e encerra as goroutines de forma limpa.

Lidar com falhas repetidas

Problema

Definir o que acontece quando uma tarefa falha repetidamente.

Solução

Tarefas que falham entram em retry com backoff simples e, ao esgotar as tentativas, vão para um estado de dead-letter em vez de travar a fila.

Acompanhar o sistema ao vivo

Problema

Tornar o estado da fila fácil de inspecionar direto pelo terminal.

Solução

Além do CLI, uma TUI interativa feita com Bubble Tea e Lip Gloss mostra um dashboard e permite navegar pelas tarefas em tempo real.

// O que aprendi
  • Como modelar uma fila com goroutines e channels em Go.
  • Como desenhar uma API gRPC com contratos em Protocol Buffers.
  • Como implementar retries, backoff e dead-letter.
  • Como construir uma TUI interativa no terminal com Bubble Tea e Lip Gloss.
  • Como encerrar um servidor concorrente de forma graciosa.
// Tecnologias
GogRPCProtocol BuffersGoroutinesChannelsBubble TeaLip GlossMakefile