Skip to main content
Midaz maneja millones de cuentas y transacciones por día. Empiezas pequeño y escalas horizontalmente a medida que crece la demanda, sin rearquitectura. Para una visión general de negocio, consulta Sobre Midaz. La forma en que despliegas y usas Midaz afecta su rendimiento. Para manejar grandes operaciones bancarias, usa libros contables para segmentar las cargas de trabajo y escala cada servicio por separado.

Estructuración de entidades para altos volúmenes de transacciones


Particionamiento por Organizaciones, Libros Contables y Cuentas

¿Tu banco procesa millones de transacciones al día? Distribuye la carga de trabajo entre muchas cuentas, libros contables u organizaciones. Por ejemplo, segmenta a los clientes por la inicial del apellido, o asigna un libro contable separado a cada región. Cada libro contable de Midaz es un libro independiente. Midaz procesa juntas las transacciones de un libro contable. Esta división evita que un solo libro contable se convierta en un cuello de botella. Midaz escala horizontalmente: distintos libros contables pueden ejecutarse en instancias separadas o particiones de base de datos.

Operaciones orientadas a bloqueos

Midaz aplica cada lote de saldos de forma atómica en un único script Lua de Redis, así que el lote se aplica completo o se revierte completo. La concurrencia se maneja de forma optimista: cada saldo lleva una versión y, en las rutas de repago de sobregiro, una versión desactualizada aborta todo el lote con el error 0174 para que quien llama vuelva a leer el estado y reintente. La cuenta @external omite las verificaciones de piso de saldo y sobregiro. Puede quedar en negativo sin límite, así que las transacciones contra ella nunca fallan por fondos disponibles. Cada transacción se confirma de forma atómica — todas las operaciones se aplican, o ninguna.

Escalamiento horizontal de servicios

Midaz usa una arquitectura de microservicios. Escalas cada componente por separado — por ejemplo, el procesamiento de transacciones y las consultas. Comienza pequeño. A medida que crece la demanda, escala los servicios que lo necesiten. Para cargas altas, despliega varias instancias del servicio de transacciones detrás de un balanceador de carga. Usa el escalamiento de pods de Kubernetes (K8s).

CQRS y réplicas de lectura

Midaz usa CQRS (Command Query Responsibility Segregation) para separar las operaciones de escritura y de lectura. Optimizas cada ruta por separado. Enruta las cargas pesadas de informes y consultas a réplicas de lectura. Esto mantiene rápidas las confirmaciones de transacciones. Las lecturas no ralentizan las escrituras, y las escrituras no ralentizan las lecturas.

Procesamiento por lotes y transacciones N:N

Cuando sea posible, agrupa las operaciones relacionadas en una sola transacción. Esto reduce la sobrecarga. Usa transacciones N:N para trabajo masivo como los pagos masivos. Por ejemplo, un lote de 100 débitos y 100 créditos suele ser más rápido que 100 transacciones separadas. Esto funciona cuando las operaciones pertenecen al mismo conjunto lógico. Midaz procesa estas transacciones N:N en una sola confirmación atómica.

Monitoreo y escalamiento iterativo

Monitorea las métricas clave: latencia de transacciones, rendimiento, uso de recursos (CPU y memoria) y rendimiento de la base de datos. Usa las herramientas de observabilidad de Midaz (OpenTelemetry y Grafana), o envía las métricas a tu propio stack de monitoreo. Escala horizontal o verticalmente antes de alcanzar un umbral de rendimiento. Midaz es modular y source-available, así que despliegas las partes que necesitas.

Manejo de operaciones multidivisa y multientidad


Estrategias multidivisa

Midaz admite transacciones multidivisa con una cuenta de activo separada para cada moneda. Para escalar bien:
  • Configura cada activo de moneda que necesites.
  • Maneja la lógica específica de cada moneda — como el redondeo y las tasas de conversión — en tu capa de integración.
  • Para conversión de moneda frecuente, como el trading forex, ejecuta la conversión en un servicio separado. Midaz registra los débitos y créditos, pero un servicio externo de tasas FX proporciona las tasas.
  • Rara vez necesitas un libro contable separado por moneda, a menos que la política lo exija. En su lugar, usa los tipos de cuenta y la API de enrutamiento de transacciones para agrupar cuentas por moneda y obtener informes claros.
  • Si una sola moneda cubre la mayoría de las transacciones, mantén todas las monedas en el mismo libro contable. Si las operaciones multidivisa se vuelven demasiado complejas, divídelas en un libro contable separado por grupo de monedas.

Múltiples Entidades: Consolidación y separación

Para un banco que opera en varios países o entidades legales:
  • Usa la jerarquía de organización para segmentar entidades. Da a cada entidad su propia moneda base, activos locales y libros contables.
  • Modela las transacciones entre entidades como movimientos externos. Una organización acredita su cuenta externa, y la otra debita la propia.
  • Puedes ejecutar varias organizaciones en una sola instancia de Midaz. Asigna recursos suficientes: los microservicios procesan todas las solicitudes en conjunto, así que el volumen total importa.
  • Puedes desplegar una instancia de Midaz separada por entidad aislada, pero pierdes la visibilidad unificada. Un solo clúster con separación interna de organización suele ser más práctico.

Mejores prácticas de optimización de rendimiento


Indexación y consultas

Usa las APIs de Midaz para leer datos, no consultas directas a la base de datos. Estas APIs llevan índices predefinidos para los identificadores principales: cuentas, portafolios y transacciones.

Indexación de campos de metadatos personalizados

Midaz no crea ningún índice por defecto en las colecciones de metadata — los documentos de metadata se identifican por entity_id. Crea explícitamente los índices que necesites con la API de Índices de Metadata. Por defecto, Midaz no indexa los campos de metadatos personalizados. Los clientes rellenan estos campos libremente como pares clave-valor. Las consultas o filtros frecuentes sobre campos no indexados pueden desencadenar escaneos completos de la colección. Estos escaneos se vuelven más lentos a medida que crece el volumen de datos. Crea un índice cuando uses con regularidad un campo de metadatos personalizado en filtros de búsqueda o criterios de orden. Con un índice, MongoDB encuentra los documentos rápido y reduce el tiempo de respuesta de las consultas. Recomendaciones:
  • Indexa solo los campos de metadatos que consultas u ordenas con frecuencia.
  • No indexes los campos de acceso poco frecuente, porque cada índice adicional añade sobrecarga de escritura.
Gestiona los índices de metadatos mediante APIs dedicadas:

Pruebas a escala

Antes del despliegue completo, simula alto tráfico con herramientas de pruebas de carga. Crea millones de cuentas, ejecuta grandes volúmenes de transacciones y monitorea el rendimiento. La arquitectura de Midaz (microservicios y CQRS) apunta a operaciones de alta escala, pero las pruebas en el mundo real te ayudan a ajustar tu configuración. Busca escalabilidad lineal: más instancias de la aplicación deberían aumentar el rendimiento de forma proporcional.