saga-orchestration
Faz seu agente gerenciar processos que envolvem vários serviços. Ajuda a garantir que ações complexas sejam concluídas corretamente, mesmo se algo falhar.
O que ela faz
Esta ferramenta ajuda a gerenciar processos complexos que envolvem vários sistemas. Ela garante que, se uma parte falhar, todo o processo possa ser desfeito de forma organizada, como desfazer uma compra em várias etapas (pagamento, estoque, envio).
Quando usar
- ✓Ao coordenar ações em vários sistemas sem travar tudo.
- ✓Para desfazer operações que falharam parcialmente.
- ✓Ao gerenciar processos longos que podem levar horas.
Exemplo do que pedir para a IA
“Como posso garantir que uma compra seja cancelada corretamente se o envio falhar após o pagamento ser processado?”
Quer saber mais? Abra as seções abaixo.
Como usar
O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.
Link da skill
Mensagem pronta para colar
Como funciona
Ela define os passos de um processo, o que fazer em cada passo e como desfazer cada passo caso algo dê errado. Isso é feito de forma assíncrona, sem travar os sistemas.
Instalação
Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.
No terminal (Claude Code, Codex, Cursor), na pasta do projeto:
npx skills add wshobson/agents --skill saga-orchestrationOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/wshobson/agents/main/plugins/backend-development/skills/saga-orchestration/SKILL.md -o SKILL.mdConteúdo técnico (SKILL.md)
Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.
Orquestração de Saga
Padrões para gerenciar transações distribuídas e processos de negócios de longa duração sem o two-phase commit.
Entradas e Saídas
O que você fornece:
- Limites e propriedade de serviços (qual serviço é dono de qual etapa)
- Requisitos de transação (quais etapas devem ser atômicas, quais podem ser eventuais)
- Modos de falha para cada etapa (transitório vs. permanente, política de retentativa)
- Requisitos de SLA por etapa (informa a configuração de timeout)
- Infraestrutura de eventos/mensagens existente (Kafka, RabbitMQ, SQS, etc.)
O que esta habilidade produz:
- Definição de saga com etapas ordenadas, comandos de ação e comandos de compensação
- Implementação de orquestrador ou coreografia para o padrão escolhido
- Lógica de compensação para cada serviço participante (idempotente, sempre-sucedida)
- Configuração de timeout de etapa com prazos por etapa
- Configuração de monitoramento: métricas de máquina de estado, detecção de saga travada, recuperação de DLQ
Quando Usar Esta Habilidade
- Coordenar transações multi-serviço sem locks distribuídos
- Implementar transações compensatórias para falhas parciais
- Gerenciar fluxos de trabalho de negócios de longa duração (minutos a horas)
- Lidar com falhas em sistemas distribuídos onde a atomicidade é necessária
- Construir processos de atendimento de pedidos, aprovação ou reserva
- Substituir o frágil two-phase commit por compensação assíncrona
Seção Detalhada: Conceitos Principais
Movido para references/details.md.
Seção Detalhada: Modelos
Movido para references/details.md.
Melhores Práticas
FAZER
- Torne cada etapa idempotente — Comandos podem ser reproduzidos na reconexão do broker
- Projete compensações cuidadosamente — Elas são o caminho de código mais crítico
- Use IDs de correlação — O
saga_iddeve fluir por cada evento e log - Implemente timeouts por etapa — Nunca espere indefinidamente por uma resposta do participante
- Registre transições de estado —
saga_id,step_name,old_state → new_statea cada mudança - Teste explicitamente os caminhos de compensação — Injete falhas em cada índice de etapa em testes de integração
NÃO FAZER
- Não assuma conclusão instantânea — Sagas são assíncronas e podem levar minutos
- Não pule o teste de compensação — O caminho de rollback é o mais difícil de acertar
- Não acople serviços diretamente — Use mensagens assíncronas, nunca chamadas síncronas dentro de uma etapa de saga
- Não ignore falhas parciais — Uma etapa que executou parcialmente ainda precisa de compensação
- Não use um timeout global — Cada etapa tem características de latência diferentes
Solução de Problemas
Saga travada no estado COMPENSATING
Uma saga entra em compensação, mas nunca atinge FAILED. Isso significa que um manipulador de compensação está lançando uma exceção não tratada e nunca publica SagaCompensationCompleted. Adicione tratamento de fila de mensagens mortas (DLQ) aos consumidores de compensação e garanta que cada ação de compensação publique um evento de resultado, mesmo quando a operação subjacente já foi revertida.
async def handle_release_reservation(self, command: Dict):
try:
await self.release_reservation(command["original_result"]["reservation_id"])
except ReservationNotFoundError:
pass # Already released — treat as success
# Always publish completion, regardless of outcome
await self.event_publisher.publish("SagaCompensationCompleted", {
"saga_id": command["saga_id"],
"step_name": "reserve_inventory"
})
Execuções duplicadas de saga na reinicialização
Se o seu serviço orquestrador reiniciar no meio de uma saga, ele pode reproduzir eventos e reexecutar etapas já concluídas. Proteja cada ação de etapa com uma chave de idempotência — veja o Modelo 3 acima.
Saga de coreografia perdendo eventos
Em uma saga baseada em coreografia, um serviço downstream pode perder um evento se estiver offline quando ele foi publicado. Use um broker de mensagens durável (Kafka com replicação, RabbitMQ com persistência) e armazene o estado atual da saga em uma tabela saga_log dedicada para que você possa reproduzir a partir da última etapa conhecida e válida.
Timeout disparando antes que uma etapa lenta, mas válida, seja concluída
Uma etapa como create_shipment pode levar até 15 minutos durante o pico de carga, mas seu timeout global é de 5 minutos, causando compensação espúria. Torne os timeouts de etapa configuráveis por tipo de etapa — veja references/advanced-patterns.md para a implementação TimeoutSagaOrchestrator e o padrão de dicionário STEP_TIMEOUTS.
Ordem de compensação não correspondendo à ordem de execução
…
Perguntas frequentes
O que é uma 'transação distribuída'?
É uma operação que envolve múltiplos sistemas ou bancos de dados e precisa ser tratada como uma única unidade: ou tudo funciona, ou nada funciona.
O que significa 'compensação'?
É a ação de desfazer o que já foi feito em um passo anterior de um processo, caso um passo posterior falhe. Por exemplo, estornar um pagamento se o produto não puder ser enviado.
Por que não usar 'two-phase commit' (2PC)?
O 2PC pode travar os sistemas e não funciona bem em ambientes distribuídos modernos. Sagas usam um modelo mais flexível e assíncrono.
Detalhes
Descrição original do autor
Implement saga patterns for distributed transactions and cross-aggregate workflows. Use this skill when implementing distributed transactions across microservices where 2PC is unavailable, designing compensating actions for failed order workflows that span inventory, payment, and shipping services, building event-driven saga coordinators for travel booking systems that must roll back hotel, flight
repo: wshobson/agents
Popularidade
- Estrelas no GitHub
- 41 mil
- Posição no ranking
- #4808
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
screen-reader-testing
Faz seu agente testar sites usando leitores de tela para garantir que sejam acessíveis.
wshobson/agents
wcag-audit-patterns
Ajuda seu agente a auditar sites para acessibilidade e corrigir problemas de acordo com as diretrizes WCAG.
wshobson/agents
multi-reviewer-patterns
Faz seu agente coordenar revisões de código paralelas, deduplicando achados e consolidando relatórios.
wshobson/agents
parallel-debugging
Permite ao agente depurar problemas complexos com investigações paralelas e análise de causa raiz.
wshobson/agents
Skills parecidas
api-connector-builder
Faz seu agente construir novas conexões com APIs seguindo o padrão já existente. Use quando precisar adicionar mais uma integração sem criar um novo jeito de fazer.
affaan-m/ECC
api-design
Ajuda seu agente a projetar APIs REST seguindo as melhores práticas. É útil para definir como as APIs se comunicam, como os erros são mostrados e como organizar os dados.
affaan-m/ECC
backend-patterns
Ajuda seu agente com padrões de arquitetura do lado do servidor e otimização de banco de dados. É útil para construir ou revisar o código que roda no servidor.
affaan-m/ECC