ASD

Saga Orchestration

Implementa patrones saga para transacciones distribuidas y workflows entre agregados, cuando 2PC no está disponible o hay que depurar sagas atascadas.

Reemplaza a: Two-phase commit (2PC)

Estrellas
38.8k

en todo el repo

Actividad
47

0–100, la ruta de este skill

Actualizado
hace 2 meses

último commit aquí

Commits
1

últimos 90 días

Contexto
1.5k tok

132 tok en reposo

Paquete
3 archivos

31 KB

Instalar

Funciona con cualquier agente que lea SKILL.md

npx -y skills add wshobson/agents --skill saga-orchestration --agent claude-code

Se instala solo en este repositorio.

Qué hace

  • Diseña sagas de orquestación o coreografía con pasos ordenados y comandos de compensación
  • Genera lógica de compensación idempotente para cada servicio participante
  • Configura timeouts por paso y monitoreo de estados atascados
  • Aporta plantillas y patrones para recuperación desde DLQ

Úsalo cuando

  • Coordinar transacciones multi-servicio sin locks distribuidos
  • Implementar transacciones compensatorias ante fallos parciales
  • Gestionar workflows de negocio de larga duración (minutos a horas)
  • Reemplazar el two-phase commit frágil por compensación asíncrona

No lo uses cuando

    Qué lo activa

    Di cualquiera de estas frases y el agente debería cargar este skill.

    • Necesito diseñar una saga para el flujo de reservas de hotel, vuelo y auto
    • Cómo implemento compensaciones para un pedido que falla en pago o envío
    • Mi saga se queda atascada en COMPENSATING, ayúdame a depurarla

    SKILL.md

    En inglés

    Saga Orchestration

    Patterns for managing distributed transactions and long-running business processes without two-phase commit.

    Inputs and Outputs

    What you provide:

    • Service boundaries and ownership (which service owns which step)
    • Transaction requirements (which steps must be atomic, which can be eventual)
    • Failure modes for each step (transient vs. permanent, retry policy)
    • SLA requirements per step (informs timeout configuration)
    • Existing event/messaging infrastructure (Kafka, RabbitMQ, SQS, etc.)

    What this skill produces:

    • Saga definition with ordered steps, action commands, and compensation commands
    • Orchestrator or choreography implementation for your chosen pattern
    • Compensation logic for each participant service (idempotent, always-succeeds)
    • Step timeout configuration with per-step deadlines
    • Monitoring setup: state machine metrics, stuck saga detection, DLQ recovery

    When to Use This Skill

    • Coordinating multi-service transactions without distributed locks
    • Implementing compensating transactions for partial failures
    • Managing long-running business workflows (minutes to hours)
    • Handling failures in distributed systems where atomicity is required
    • Building order fulfillment, approval, or booking processes
    • Replacing fragile two-phase commit with async compensation

    Detailed section: Core Concepts

    Moved to references/details.md.

    Detailed section: Templates

    Moved to references/details.md.

    Best Practices

    Do's

    • Make every step idempotent — Commands may be replayed on broker reconnect
    • Design compensations carefully — They are the most critical code path
    • Use correlation IDs — The saga_id must flow through every event and log
    • Implement per-step timeouts — Never wait indefinitely for a participant reply
    • Log state transitionssaga_id, step_name, old_state → new_state on every change
    • Test compensation paths explicitly — Inject failures at each step index in integration tests

    Don'ts

    • Don't assume instant completion — Sagas are async and may take minutes
    • Don't skip compensation testing — The rollback path is the hardest to get right
    • Don't couple services directly — Use async messaging, never synchronous calls inside a saga step
    • Don't ignore partial failures — A step that partially executed still needs compensation
    • Don't use a global timeout — Each step has different latency characteristics

    Troubleshooting

    Saga stuck in COMPENSATING state

    A saga enters compensation but never reaches FAILED. This means a compensation handler is throwing an unhandled exception and never publishing SagaCompensationCompleted. Add dead-letter queue (DLQ) handling to compensation consumers and ensure every compensation action publishes a result event even when the underlying operation was already rolled back.

    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"
        })
    

    Duplicate saga executions on restart

    If your orchestrator service restarts mid-saga, it may replay events and re-execute already-completed steps. Guard every step action with an idempotency key — see Template 3 above.

    Choreography saga losing events

    In a choreography-based saga, a downstream service may miss an event if it was offline when published. Use a durable message broker (Kafka with replication, RabbitMQ with persistence) and store the current saga state in a dedicated saga_log table so you can replay from the last known good step.

    Timeout firing before a slow-but-valid step completes

    A step like create_shipment might take up to 15 minutes during peak load but your global timeout is 5 minutes, causing spurious compensation. Make step timeouts configurable per step type — see references/advanced-patterns.md for the TimeoutSagaOrchestrator implementation and the STEP_TIMEOUTS dict pattern.

    Compensation order not matching execution order

    When two steps both complete before a failure is detected, compensation must run in strict reverse order or you leave data in an inconsistent state. Verify that _compensate() iterates from current_step - 1 down to 0, and add an integration test that deliberately fails at each step index to confirm correct rollback order.


    Advanced Patterns

    The references/ directory contains production-grade implementations not needed for most sagas:

    • references/advanced-patterns.md — Full SagaOrchestrator abstract base class, TimeoutSagaOrchestrator with per-step deadlines, detailed bank transfer compensating transaction chain, Prometheus instrumentation, stuck saga PromQL alerts, and DLQ recovery worker.

    Related Skills

    • cqrs-implementation — Pair sagas with CQRS for read-model updates after each step completes
    • event-store-design — Store saga events in an event store for full audit trail and replay capability
    • workflow-orchestration-patterns — Higher-level workflow engines (Temporal, Conductor) that build on saga concepts

    Reproducido de wshobson/agents bajo licencia MIT. Leer esta página en markdown.

    Archivos

    3 archivos en el paquete. Solo se lee SKILL.md al activarse — las referencias se cargan si el skill decide que las necesita.

    Antes de instalar

    Requiere infraestructura de mensajería existente (Kafka, RabbitMQ, SQS, etc.) y definir los límites de responsabilidad de cada servicio.

    Detalles

    Creador
    wshobson
    Licencia
    MIT
    Recursos incluidos
    referencias
    Repositorio
    wshobson/agents
    Código fuente
    Ver SKILL.md

    Etiquetas

    Más de wshobson/agents

    Este repo incluye 180 skills. Si instalas uno, normalmente ya tienes los demás.

    Úsalo al seleccionar y colocar iconos, imágenes, SVGs, diagramas o infografías de apoyo aprobados en un PPTX editable.

    Costo de contexto al activarse
    344 tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 26 días
    documentos

    Úsalo cuando pidan optimizar un prompt, mejorar su rendimiento, diseñar una plantilla, aplicar chain-of-thought, few-shot prompting o técnicas avanzadas de prompt engineering para producción.

    Costo de contexto al activarse
    1.3k tok
    Tamaño del paquete
    10 archivos
    Última actualización
    el mes pasado
    herramientas desarrollo

    Úsalo al redactar o reparar una especificación JSON con coordenadas explícitas para un PPTX editable.

    Costo de contexto al activarse
    489 tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 26 días
    documentos

    Úsalo para validar o reparar un PPTX editable en cuanto a geometría, accesibilidad, editabilidad nativa, linaje de fuente e integridad del paquete OOXML.

    Costo de contexto al activarse
    409 tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 26 días
    documentos

    Úsalo para analizar un PPTX de referencia en modo solo lectura: estructura, tema, tipografía, ritmo de layout, diagnósticos, catálogos de plantillas derivados o inspección segura del paquete OOXML.

    Costo de contexto al activarse
    689 tok
    Tamaño del paquete
    8 archivos
    Última actualización
    hace 26 días
    documentos

    Úsalo al preparar la narrativa, las fuentes y el contexto de diseño para un nuevo deck PPTX editable.

    Costo de contexto al activarse
    415 tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 26 días
    documentos

    Skills relacionados

    Configura Turborepo para builds de monorepo eficientes con caché local y remota. Útil al configurar Turborepo, optimizar pipelines de build o implementar caching distribuido.

    Costo de contexto al activarse
    2k tok
    Tamaño del paquete
    1 archivo
    Última actualización
    hace 5 meses
    devops infraestructura

    Implementa observabilidad integral para service meshes, incluyendo tracing distribuido, métricas y visualización. Útil para monitoreo de mesh, depuración de latencia y SLOs.

    Costo de contexto al activarse
    708 tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 2 meses
    devops infraestructura

    Define e implementa Indicadores (SLI) y Objetivos (SLO) de nivel de servicio con error budgets y alertas, para establecer metas de fiabilidad y prácticas SRE.

    Costo de contexto al activarse
    1.8k tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 2 meses
    devops infraestructura