Building distributed applications means rewriting the same infrastructure code across every project: service discovery, retry logic, pub/sub wiring, state persistence, secret management, observability. Dapr (Distributed Application Runtime) encapsulates these patterns into open, composable building blocks that work across any language and deployment environment.
Construir aplicaciones distribuidas significa reescribir el mismo código de infraestructura en cada proyecto: descubrimiento de servicios, lógica de reintento, cableado de pub/sub, persistencia de estado, gestión de secretos, observabilidad. Dapr (Distributed Application Runtime) encapsula estos patrones en building blocks abiertos y componibles que funcionan en cualquier lenguaje y entorno de despliegue.
Sidecar Architecture
Arquitectura Sidecar
Dapr runs as a sidecar process alongside your application. This means the Dapr runtime—called daprd—lives in its own process, communicating with your app over HTTP or gRPC. Your code never imports Dapr libraries directly; it calls local endpoints that the sidecar forwards to distributed infrastructure.
Dapr se ejecuta como un proceso sidecar junto a tu aplicación. Esto significa que el runtime de Dapr—llamado daprd—vive en su propio proceso, comunicándose con tu app vía HTTP o gRPC. Tu código nunca importa bibliotecas Dapr directamente; llama a endpoints locales que el sidecar distribuye a infraestructura.
In self-hosted mode, dapr run launches both your app and its Dapr sidecar. On Kubernetes, the dapr-sidecar-injector automatically injects the sidecar container into pods marked with dapr.io/enabled: "true". The sidecar pattern means your app stays portable—you switch hosting environments without code changes.
En modo self-hosted, dapr run lanza tu app y su sidecar Dapr. En Kubernetes, el dapr-sidecar-injector inyecta automáticamente el contenedor sidecar en pods marcados con dapr.io/enabled: "true". El patrón sidecar significa que tu app se mantiene portable—cambias de entorno de hosting sin cambios de código.
Building Blocks
Bloques de Construcción
Service Invocation provides reliable service-to-service calls with built-in service discovery. Dapr discovers target services via name resolution (mDNS locally, Kubernetes DNS in cluster), handles retries with exponential backoff, and adds distributed tracing automatically. Your app calls http://localhost:3500/v1.0/invoke/{app-id}/method/{method} and Dapr handles the rest.
Service Invocation proporciona llamadas confiables de servicio a servicio con descubrimiento de servicios integrado. Dapr descubre servicios objetivo via resolución de nombres (mDNS localmente, DNS de Kubernetes en cluster), maneja reintentos con backoff exponencial, y añade trazabilidad distribuida automáticamente. Tu app llama http://localhost:3500/v1.0/invoke/{app-id}/method/{method} y Dapr maneja el resto.
State Management stores key-value pairs with pluggable backends. Swap the component from Redis to PostgreSQL to Cosmos DB by changing YAML—your code stays the same. State stores support first-class actors, enabling stateful services that survive process restarts.
State Management almacena pares clave-valor con backends intercambiables. Cambia el componente de Redis a PostgreSQL a Cosmos DB cambiando YAML—tu código permanece igual. Los state stores soportan actores de primera clase, habilitando servicios con estado que sobreviven reinicios de proceso.
Pub/Sub decouples producers from consumers. Define topics, set delivery guarantees (at-least-once, exactly-once), and plug in brokers (Kafka, RabbitMQ, Redis). Dapr handles subscription routing, dead-letter queues, and consumer group management.
Pub/Sub desacopla productores de consumidores. Define topics, establece garantías de entrega (at-least-once, exactly-once), y conecta brokers (Kafka, RabbitMQ, Redis). Dapr maneja enrutamiento de suscripciones, colas de mensajes fallidos, y gestión de grupos de consumidores.
Bindings connect inputs and outputs to external systems. Trigger your app from database changes, file uploads, or cron schedules. Send outputs to webhooks, blob storage, or message queues. The binding abstraction makes your app reactive to, and productive with, external events.
Bindings conectan entradas y salidas a sistemas externos. Dispara tu app desde cambios de base de datos, cargas de archivos, o programas cron. Envía salidas a webhooks, blob storage, o colas de mensajes. La abstracción de binding hace tu app reactiva a, y productiva con, eventos externos.
Workflows define long-running, durable processes spanning multiple services. Write workflow code in your language, register activities that services implement. The workflow engine runs in the Dapr sidecar, using actors behind the scenes for state and checkpointing.
Workflows define procesos de larga duración que abarcan múltiples servicios. Escribe código de workflow en tu lenguaje, registra actividades que los servicios implementan. El motor de workflow corre en el sidecar Dapr, usando actores internamente para estado y checkpointing.
Secrets, Configuration, Actors, and Cryptography complete the building block set. Secrets pull from Key Vault, environment variables, or custom stores. Configuration supports hot-reload. Actors provide virtual actor semantics for scale-to-zero. Crypto handles encryption without key exposure.
Secrets, Configuration, Actors, y Cryptography completan el set de building blocks. Secrets se alimenta de Key Vault, variables de entorno, o stores personalizados. Configuration soporta hot-reload. Actors provee semántica de actor virtual para scale-to-zero. Crypto maneja encriptación sin exponer claves.
Multi-Language SDK
SDK Multi-Lenguaje
Dapr provides official SDKs for Python, Go, Java, .NET, JavaScript, and Rust. Each SDK exposes the building blocks as native constructs—Python decorators, Go interfaces, Java annotations, .NET dependency injection. You build in your language; Dapr handles the distributed systems.
Dapr provee SDKs oficiales para Python, Go, Java, .NET, JavaScript, y Rust. Cada SDK expone los building blocks como constructos nativos—decoradores de Python, interfaces de Go, anotaciones de Java, inyección de dependencias de .NET. Construye en tu lenguaje; Dapr maneja los sistemas distribuidos.
Production deployment options are self-hosted (local development, VM deployment) or Kubernetes (the recommended production path). Both share the same APIs, same component model, and same operational guarantees.
Las opciones de despliegue de producción son self-hosted (desarrollo local, despliegue en VM) o Kubernetes (el camino de producción recomendado). Ambos comparten las mismas APIs, mismo modelo de componentes, y mismas garantías operacionales.
References
Referencias
- Dapr Official Site: dapr.io
- Dapr GitHub: github.com/dapr/dapr
- Dapr Documentation: docs.dapr.io
- Sitio Oficial de Dapr: dapr.io
- Dapr GitHub: github.com/dapr/dapr
- Documentación de Dapr: docs.dapr.io