Alejandría

Busca en Alejandría

Plataformas

Dapr

Runtime de aplicaciones distribuidas que ofrece bloques reutilizables para comunicación, estado y eventos.

01

En pocas palabras

Runtime de aplicaciones distribuidas que ofrece bloques reutilizables para comunicación, estado y eventos.

Qué problema resuelve

Implementaciones repetidas de integración y resiliencia específicas de cada proveedor.

Cuándo utilizarlo

Microservicios con varias tecnologías. Ejemplo: publicar eventos mediante una API uniforme.

02

De la idea a la práctica

Funcionamiento, ejemplos y decisiones para pasar al siguiente nivel.

En el Radar compartido: Trial (valoración de la edición aportada).

Cómo funciona

Expone capacidades como service invocation, pub/sub, state stores y actores a través de APIs y componentes. Habitualmente acompaña a los servicios como sidecar.

Ejemplo de uso

Un servicio de pedidos publica un evento mediante Dapr y un consumidor se suscribe. Cambiar el componente de mensajería requiere revisar entrega, orden y reintentos del nuevo backend.

Building blocks

Bloque Qué abstrae
Service invocation Llamadas entre servicios con descubrimiento, mTLS y reintentos
Pub/sub Publicar y suscribirse con Kafka, Pub/Sub, RabbitMQ, Service Bus…
State management Almacén clave-valor con concurrencia optimista (Redis, PostgreSQL, Cosmos DB…)
Bindings Entradas y salidas hacia sistemas externos (colas, cron, S3)
Actors Objetos con estado y un solo hilo, activados bajo demanda
Workflow Orquestación duradera de procesos largos
Secrets / Configuration Lectura de secretos y configuración desde un proveedor
Jobs, Distributed lock, Cryptography, Conversation Programación, bloqueos, cifrado e interfaz común a LLM

Componentes intercambiables

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: eventos
spec:
  type: pubsub.kafka
  version: v1
  metadata:
    - name: brokers
      value: kafka:9092
    - name: authType
      value: none

La aplicación publica siempre igual, sin depender del SDK de Kafka:

curl -X POST http://localhost:3500/v1.0/publish/eventos/credito-desembolsado \
  -H 'Content-Type: application/json' -d '{"creditoId":"42"}'

En local puede ser Redis y en producción Kafka o Google Pub/Sub, cambiando solo el componente.

Resiliencia declarativa

apiVersion: dapr.io/v1alpha1
kind: Resiliency
metadata:
  name: politicas
spec:
  policies:
    timeouts:
      general: 3s
    retries:
      reintentoCorto:
        policy: exponential
        maxRetries: 3
    circuitBreakers:
      cbBuro:
        maxRequests: 1
        timeout: 30s
        trip: consecutiveFailures >= 5
  targets:
    apps:
      servicio-buro:
        timeout: general
        retry: reintentoCorto
        circuitBreaker: cbBuro

Aplica los patrones de resiliencia fuera del código de la aplicación.

Despliegue

En Kubernetes se activa con anotaciones en el pod (dapr.io/enabled: "true", dapr.io/app-id: originacion) y el sidecar se inyecta automáticamente. En local, dapr run --app-id originacion -- java -jar app.jar. Dapr es un proyecto graduado de la CNCF.

Cuándo compensa

Compensa No compensa
Muchos servicios políglotas que necesitan los mismos patrones Un par de servicios en un solo lenguaje con buenas librerías
Portabilidad real entre nubes o entornos Plataforma serverless sin soporte de sidecar
Equipo de plataforma que mantiene los componentes Equipos que no pueden operar otra pieza

La abstracción tiene límites: las garantías de orden, entrega y transacciones dependen del backend elegido, no de Dapr.

Criterios de implementación

Medir la sobrecarga y configurar identidad, mTLS y secretos. Probar fallos e idempotencia; adoptar solo los bloques que reduzcan complejidad real.

Continúa en las fuentes

Documentación oficial para verificar detalles y explorar más.