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 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 un primario con réplicas en varias zonas. Midaz no admite el modo Redis Cluster para transacciones.
- Habilita la conmutación por error automática con una topología Sentinel mediante
REDIS_MASTER_NAME, o con un servicio administrado con el modo clúster desactivado. DefineREDIS_HOSTcon una sola dirección, o defineREDIS_MASTER_NAMEpara Sentinel. SinREDIS_MASTER_NAME, unREDIS_HOSTseparado por comas selecciona el modo Cluster. - Ejecuta Valkey con
maxmemory-policyennoevictionyappendfsyncenalways. Midaz requiere las dos configuraciones. Un servicio administrado debe aceptar las dos configuraciones.
MongoDB
- Usa conjuntos de réplicas con miembros en varias zonas.
- Monitorea las transiciones de rol y el retraso.
- Programa respaldos periódicos.
- 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.
RABBITMQ_OVERDRAFT_EVENTS_ENABLED=false desactiva los eventos de sobregiro en las dos superficies.
- RabbitMQ transporta el pipeline opcional de write-behind que guarda las transacciones confirmadas en PostgreSQL y MongoDB (
RABBITMQ_TRANSACTION_BALANCE_OPERATION_*, habilitado conRABBITMQ_TRANSACTION_ASYNC=true), los eventos de sobregiro y los mensajes de auditoría cuando establecesAUDIT_LOG_ENABLEDentrue. Usa un servicio administrado de RabbitMQ como AWS MQ o CloudAMQP en producción. - RedPanda es la columna vertebral de eventos. Establece
STREAMING_ENABLED=true,STREAMING_BROKERSySTREAMING_CLOUDEVENTS_SOURCEdefinido exactamente comoledgerpara 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 y los eventosbalance.overdraft_*se publican a través de esta superficie.
DB_ONBOARDING_REPLICA_* y DB_TRANSACTION_REPLICA_*) atienden las lecturas. De forma predeterminada, las lecturas transaccionales van al primario.
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.
Varios 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.
Alineación de la infraestructura con la arquitectura de Midaz
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.

