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 conRABBITMQ_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_BROKERSy el origen exacto del roster:ledgerpara ledger, CRM y Fees, otracerpara Tracer. Los hechos se publican enlerian.streaming.ledgerolerian.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.
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-Replayedpara distinguir una transacción nueva de una repetición en caché. - Define el encabezado
X-TTLen 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.
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.
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.
¿Qué sigue?
- Lee la guía de despliegue de Midaz.
- Contacta a nuestro equipo para obtener soporte personalizado.

