Recursos

Diagramas de Arquitectura

Diagramas en formato texto que podés copiar, adaptar y usar en tu documentación técnica.

🏗️ Arquitectura de Microservicios — Vista General

Diagrama de alto nivel mostrando los componentes principales de una arquitectura de microservicios típica.

┌─────────────────────────────────────────────────────────┐
│                      CLIENTES                           │
│   ┌──────────┐  ┌──────────┐  ┌──────────┐             │
│   │   Web    │  │  Mobile  │  │   IoT    │             │
│   └────┬─────┘  └────┬─────┘  └────┬─────┘             │
└────────┼──────────────┼──────────────┼──────────────────┘
         │              │              │
         ▼              ▼              ▼
┌─────────────────────────────────────────────────────────┐
│                    API GATEWAY                          │
│   Auth │ Rate Limit │ Routing │ Load Balancing          │
└────────┬──────────────┬──────────────┬──────────────────┘
         │              │              │
    ┌────▼────┐   ┌─────▼─────┐  ┌────▼────┐
    │ Service │   │  Service  │  │ Service │
    │    A    │   │     B     │  │    C    │
    │  (REST) │   │  (gRPC)   │  │ (REST)  │
    └────┬────┘   └─────┬─────┘  └────┬────┘
         │              │              │
         ▼              ▼              ▼
    ┌─────────┐   ┌──────────┐  ┌─────────┐
    │  DB A   │   │   DB B   │  │  DB C   │
    │(Postgres)   │ (MongoDB) │  │ (Redis) │
    └─────────┘   └──────────┘  └─────────┘

         ┌──────────────────────────┐
         │      EVENT BUS           │
         │   (Kafka / RabbitMQ)     │
         │                          │
         │  Service A ──publish──►  │
         │  Service B ◄──consume──  │
         │  Service C ◄──consume──  │
         └──────────────────────────┘

🔷 Arquitectura Hexagonal (Ports & Adapters)

Organización del código en capas concéntricas con puertos y adaptadores.

                    ┌─────────────────┐
                    │   HTTP Adapter   │
                    │   (Controller)   │
                    └────────┬────────┘
                             │
              ┌──────────────▼──────────────┐
              │         INPUT PORT          │
              │      (Use Case Interface)    │
              │                              │
              │  ┌────────────────────────┐  │
              │  │                        │  │
              │  │    DOMAIN / CORE       │  │
              │  │                        │  │
              │  │  - Entities            │  │
              │  │  - Value Objects       │  │
              │  │  - Domain Services     │  │
              │  │  - Business Rules      │  │
              │  │                        │  │
              │  └────────────────────────┘  │
              │                              │
              │        OUTPUT PORT           │
              │    (Repository Interface)    │
              └──────────────┬──────────────┘
                             │
                    ┌────────▼────────┐
                    │  DB Adapter     │
                    │  (Repository)   │
                    └─────────────────┘

  Regla: Las dependencias siempre apuntan hacia adentro.
  El dominio NO conoce la infraestructura.

🚀 Pipeline de CI/CD

Flujo típico desde el commit hasta producción.

  Developer
     │
     ▼
┌─────────┐    ┌──────────┐    ┌──────────┐    ┌──────────┐
│  Commit  │───►│  Build   │───►│  Test    │───►│  Lint /  │
│  & Push  │    │  (CI)    │    │  Suite   │    │  SAST    │
└─────────┘    └──────────┘    └──────────┘    └────┬─────┘
                                                     │
                                                     ▼
┌──────────┐    ┌──────────┐    ┌──────────┐    ┌──────────┐
│Production│◄───│ Canary / │◄───│ Staging  │◄───│  Docker  │
│  Deploy  │    │Blue-Green│    │  Deploy  │    │  Build   │
└──────────┘    └──────────┘    └──────────┘    └──────────┘
     │
     ▼
┌──────────┐
│ Monitor  │
│ & Alert  │
└──────────┘

  Cada etapa es un gate: si falla, el pipeline se detiene.

📡 Flujo Event-Driven

Cómo fluyen los eventos entre servicios en una arquitectura basada en eventos.

  ┌──────────────┐
  │  Order       │  1. Crea orden
  │  Service     │─────────────────┐
  └──────────────┘                 │
                                   ▼
                          ┌─────────────────┐
                          │   Event Bus     │
                          │                 │
                          │ OrderCreated    │
                          │ orderId, items, │
                          │ userId, total   │
                          └───┬─────┬───┬───┘
                              │     │   │
               ┌──────────────┘     │   └──────────────┐
               ▼                    ▼                   ▼
  ┌──────────────┐    ┌──────────────┐    ┌──────────────┐
  │  Inventory   │    │  Payment     │    │ Notification │
  │  Service     │    │  Service     │    │  Service     │
  │              │    │              │    │              │
  │ 2. Reserva   │    │ 3. Procesa   │    │ 4. Envía     │
  │    stock     │    │    pago      │    │    email     │
  └──────────────┘    └──────┬───────┘    └──────────────┘
                             │
                             ▼
                    ┌─────────────────┐
                    │   Event Bus     │
                    │ PaymentCompleted│
                    └─────────────────┘

  Los servicios están desacoplados: cada uno reacciona
  a eventos sin conocer al emisor.

🔌 Estados del Circuit Breaker

Máquina de estados del patrón Circuit Breaker.

                    Llamada exitosa
                  ┌─────────────────┐
                  │                 │
                  ▼                 │
            ┌──────────┐     ┌─────┴──────┐
  ─────────►│  CLOSED  │     │ HALF-OPEN  │
   inicio   │          │     │            │
            │ Permite  │     │ Permite 1  │
            │ llamadas │     │ llamada de │
            └────┬─────┘     │ prueba     │
                 │           └─────┬──────┘
                 │                 │
    Fallos >=    │                 │  Llamada falla
    threshold    │                 │
                 ▼                 │
            ┌──────────┐          │
            │   OPEN   │◄─────────┘
            │          │
            │ Rechaza  │
            │ llamadas │
            └────┬─────┘
                 │
                 │  Timeout expira
                 │
                 └──────────────────► HALF-OPEN