> ## Documentation Index
> Fetch the complete documentation index at: https://docs.lerian.studio/llms.txt
> Use this file to discover all available pages before exploring further.

# Mejores prácticas de producción de Midaz

> Configura Midaz para producción con despliegue multi-AZ, autoescalado, servicios administrados y los patrones de resiliencia de Kubernetes que recomienda Lerian.

Midaz funciona en producción con un volumen alto. Esta guía te ofrece los patrones de despliegue, alta disponibilidad y observabilidad que recomienda Lerian. Síguelos para mantener bajo el tiempo de inactividad y proteger tus datos.

## Configuración ideal

***

Inicia un despliegue de producción con estas decisiones:

* Despliega en varias zonas de disponibilidad.
* Ejecuta al menos 3 nodos de trabajo con autoescalado.
* Separa las cargas de trabajo de la aplicación y de la base de datos.
* Usa servicios administrados como RDS, ElastiCache y MongoDB Atlas.
* Aplica patrones de Kubernetes para la resiliencia, la seguridad y la observabilidad.
* Automatiza los respaldos y las alertas desde el primer día.

## Planificación de la infraestructura

***

### Arquitectura del clúster

Planifica el clúster para la resiliencia y el rendimiento:

* Despliega en varias zonas de disponibilidad.
* Ejecuta al menos 3 nodos de trabajo para lograr alta disponibilidad.
* Habilita el autoescalado de nodos para absorber los picos de carga.
* Separa las cargas de trabajo de la aplicación y de la base de datos cuando sea posible.

### Dimensionamiento de recursos

* Ajusta el tamaño de los nodos a la carga de trabajo esperada.
* Asigna primero suficientes recursos a los servicios críticos.
* Aplica cuotas de recursos para evitar la contención.
* Monitorea el uso y ajusta el dimensionamiento con el tiempo.

### Almacenamiento

* Usa almacenamiento respaldado por SSD para todos los componentes de la base de datos.
* Define una clase de almacenamiento para cada proveedor de nube.
* Aprovisiona volúmenes con margen para el crecimiento.
* Usa almacenamiento replicado o duradero para los datos críticos.

## Arquitectura de bases de datos y alta disponibilidad

***

Midaz usa CQRS (Command Query Responsibility Segregation) para separar las lecturas de las escrituras. Este diseño permite escalar cada ruta por separado.

### PostgreSQL

* Usa un primario dedicado para las escrituras y réplicas para las lecturas.
* Habilita la replicación síncrona para los datos críticos.
* Configura la conmutación por error automática con Patroni o AWS RDS.
* Monitorea el retraso de replicación y la coherencia.
* Prefiere servicios administrados como AWS RDS o GCP Cloud SQL.

### Redis / Valkey

* Despliega en modo clúster en varias zonas.
* Habilita la conmutación por error automática con la agrupación en clúster nativa, o con una topología Sentinel mediante `REDIS_MASTER_NAME`. Verifica la configuración de tu cliente. Un servicio administrado (ElastiCache, Memorystore) es la opción predeterminada más segura.
* Usa servicios administrados como AWS ElastiCache o GCP Memorystore.

### MongoDB

* Usa conjuntos de réplicas con miembros en varias zonas.
* Monitorea las transiciones de rol y el retraso.
* Programa respaldos periódicos.
* No escribas en los secundarios a menos que sea intencional.
* Usa servicios administrados como MongoDB Atlas o AWS DocumentDB.

## Infraestructura de mensajería

***

Midaz ejecuta dos superficies de mensajería. El streaming compatible con Kafka y el procesamiento asíncrono de transacciones están deshabilitados de forma predeterminada. Los publicadores heredados de sobregiro y auditoría de RabbitMQ están habilitados en tiempo de ejecución a menos que establezcas explícitamente sus indicadores en `false`. La configuración de ejemplo incluida establece esos indicadores en `false`:

* **RabbitMQ** transporta el pipeline interno asíncrono de operaciones de saldo de transacciones (`RABBITMQ_TRANSACTION_BALANCE_OPERATION_*`, habilitado con `RABBITMQ_TRANSACTION_ASYNC=true`), además de los intercambios heredados salientes de sobregiro y auditoría. Usa un servicio administrado de RabbitMQ como AWS MQ o CloudAMQP en producción.
* **RedPanda** (a través de lib-streaming) es la columna vertebral de eventos. Establece `STREAMING_ENABLED=true`, `STREAMING_BROKERS` y el origen exacto del roster: `ledger` para ledger, CRM y Fees, o `tracer` para Tracer. Los hechos se publican en `lerian.streaming.ledger` o `lerian.streaming.tracer`. Enruta según los encabezados de CloudEvents. Los hechos del ciclo de vida de las transacciones se publican a través de esta superficie.

La separación de lecturas y escrituras de CQRS se resuelve mediante réplicas de PostgreSQL (DSN `DB_*_REPLICA_*`), no mediante consumidores del broker que reconstruyen modelos de lectura.

## Estrategias de alta disponibilidad

***

### Redundancia de servicios

* Despliega varias réplicas para cada servicio.
* Usa reglas de antiafinidad para distribuir los servicios entre zonas.
* Aplica Pod Disruption Budgets para limitar el tiempo de inactividad durante las actualizaciones.

### Balanceo de carga

* Usa controladores de ingress con health checks.
* Evita la afinidad de sesión a menos que un servicio la requiera.
* Habilita el drenaje de conexiones para lograr despliegues fluidos.

## Consideraciones de seguridad

***

### Seguridad de red

* Aplica políticas de red de Kubernetes para controlar el tráfico.
* Otorga a cada cuenta de servicio los permisos mínimos.
* Protege el acceso externo con TLS.
* Restringe las interfaces administrativas con listas de permitidos de IP.

### Gestión de secretos

* Usa Kubernetes Secrets para las credenciales y los tokens.
* Rota los secretos con una periodicidad regular.
* Nunca codifiques secretos directamente en contenedores o archivos de configuración.
* Usa un gestor de secretos externo para lograr una postura más sólida.

## Monitoreo y observabilidad

***

### Métricas

* Monitorea los KPI clave de la aplicación y de la infraestructura.
* Define umbrales de alerta que lleven a la acción.
* Usa dashboards para tener visibilidad en tiempo real.

### Logs

* Centraliza los logs de todos los servicios.
* Usa un formato estructurado para facilitar el filtrado.
* Aplica políticas de retención y rotación de logs.
* Define alertas basadas en logs para eventos críticos.

### Trazas

* Habilita el trazado distribuido entre servicios.
* Muestrea las trazas para equilibrar el rendimiento y el costo.
* Correlaciona las trazas con los logs y las métricas para lograr visibilidad completa.

### Alertas

* Crea alertas claras y confiables.
* Ajusta los umbrales para reducir el ruido.
* Enruta cada alerta por el canal correcto.
* Mantén runbooks para los problemas recurrentes.

## Estrategia de respaldo

***

* Automatiza respaldos periódicos para los sistemas críticos.
* Almacena los respaldos en más de una ubicación o región.
* Prueba el procedimiento de restauración con una periodicidad regular.
* Mantén la documentación de respaldos actualizada y accesible.

## Idempotencia

***

Protege las operaciones críticas contra el procesamiento duplicado en producción:

* Envía una clave de idempotencia en cada solicitud de creación de transacción con el encabezado `X-Idempotency`.
* Usa claves explícitas y deterministas vinculadas a tus IDs de negocio (IDs de pedido, referencias de pago), no claves generadas automáticamente.
* Lee el encabezado de respuesta `X-Idempotency-Replayed` para distinguir una transacción nueva de una repetición en caché.
* Define el encabezado `X-TTL` en segundos para que coincida con tu ventana de reintento. El valor predeterminado es 300. Usa un valor más corto para los flujos síncronos y uno más largo para los flujos asíncronos.

<Note>
  Todos los productos de Lerian admiten la idempotencia mediante sus propias convenciones de encabezados. Para conocer los detalles de implementación y una comparación entre productos, consulta [Reintentos e idempotencia](/es/reference/retries-idempotency).
</Note>

## Notas finales

***

Alinea tu infraestructura con la arquitectura de Midaz y obtienes lo siguiente:

* Una separación clara de lecturas y escrituras con CQRS.
* Compatibilidad con servicios administrados en la nube.
* Un camino claro hacia la observabilidad, la conmutación por error y las operaciones seguras.

Revisa tu configuración con una periodicidad regular.

## ¿Qué sigue?

***

* Lee la [guía de despliegue de Midaz](/es/products/midaz/deployment).
* [Contacta a nuestro equipo](https://lerian.studio/contact) para obtener soporte personalizado.
