Saltar al contenido principal
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 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. Define REDIS_HOST con una sola dirección, o define REDIS_MASTER_NAME para Sentinel. Sin REDIS_MASTER_NAME, un REDIS_HOST separado por comas selecciona el modo Cluster.
  • Ejecuta Valkey con maxmemory-policy en noeviction y appendfsync en always. 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 con RABBITMQ_TRANSACTION_ASYNC=true), los eventos de sobregiro y los mensajes de auditoría cuando estableces AUDIT_LOG_ENABLED en true. 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_BROKERS y STREAMING_CLOUDEVENTS_SOURCE definido exactamente como 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 y los eventos balance.overdraft_* se publican a través de esta superficie.
Las réplicas de lectura opcionales de PostgreSQL (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-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.
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.
Revisa tu configuración con una periodicidad regular.

¿Qué sigue?