> ## 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.

# Estrategias de escalabilidad

> Escala Midaz a millones de Cuentas y Transacciones por día con particionamiento por Ledgers, escalado horizontal de servicios y réplicas de lectura.

Midaz maneja millones de cuentas y transacciones por día. Empiezas en pequeño y escalas horizontalmente a medida que crece la demanda, sin necesidad de rediseñar la arquitectura. Para una descripción de negocio, consulta [Acerca de Midaz](/es/products/midaz/about-midaz).

La forma en que despliegas y usas Midaz afecta su rendimiento. Para manejar operaciones bancarias de gran volumen, usa ledgers para segmentar las cargas de trabajo y escala cada servicio de forma independiente.

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

***

### Particionamiento por Organizaciones, Ledgers y Cuentas

Si tu banco procesa millones de transacciones cada día, distribuye la carga de trabajo entre muchas cuentas, ledgers u organizaciones. Por ejemplo, segmenta a los clientes por la inicial del apellido, o asigna un ledger separado a cada región.

Cada ledger de Midaz es un libro independiente.

### Operaciones orientadas a bloqueos

Midaz aplica los cambios de saldo de cada transacción en un único script Lua de Redis. El script verifica cada saldo contra el estado actual antes de escribir, así que una transacción rechazada no cambia ningún saldo.

La cuenta `@external` omite las verificaciones de piso de saldo y de sobregiro. Puede volverse negativa sin límite, por lo que las transacciones contra ella nunca fallan por fondos disponibles. Cada transacción de todas formas se confirma de forma atómica. O se aplican todas las operaciones, o no se aplica ninguna.

### Escalado horizontal de servicios

El ledger de Midaz se ejecuta como un solo servicio que reúne onboarding, transacciones, CRM y Fees. Lo escalas agregando instancias. Empieza en pequeño y agrega instancias a medida que crece la demanda.

Para cargas altas, despliega varias instancias del servicio del ledger detrás de un balanceador de carga. Usa el escalado 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 lectura. Optimizas cada ruta de forma independiente.

Enruta las cargas pesadas de informes y consultas hacia réplicas de lectura. Esto mantiene rápidas las confirmaciones de transacciones.

### Loteo 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 pagos en masa.

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 escalado iterativo

Monitorea las métricas clave: latencia de transacciones, throughput, 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 hacia afuera o hacia arriba antes de alcanzar un umbral de rendimiento. Midaz es modular y source-available, por lo que despliegas las partes que necesitas.

## Manejo de operaciones multi-moneda y multi-entidad

***

### Estrategias multi-moneda

Midaz admite varias monedas con una cuenta separada para cada moneda. Cada transacción mueve un solo activo. 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 la conversión frecuente de moneda, como el trading de forex, ejecuta la conversión en un servicio separado. Midaz registra los débitos y créditos, pero un servicio externo de tasas FX suministra las tasas.
* Rara vez necesitas un ledger separado por moneda, a menos que la política lo requiera. En su lugar, usa tipos de cuenta y la API de enrutamiento de transacciones para agrupar cuentas por moneda y así lograr informes claros.
* Si una moneda cubre la mayoría de las transacciones, mantén todas las monedas en el mismo ledger. Si las operaciones multi-moneda se vuelven demasiado complejas, sepáralas en un ledger distinto por grupo de moneda.

### 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 organizaciones para segmentar entidades. Dale a cada entidad su propia moneda base, activos locales y ledgers.
* Modela las transacciones entre entidades como movimientos externos. Una organización acredita su cuenta externa, y la otra debita la suya.
* Puedes ejecutar varias organizaciones en una sola instancia de Midaz. Asigna suficientes recursos: las mismas instancias del ledger procesan las solicitudes de todas las organizaciones, por lo que el volumen total importa.
* Puedes desplegar una instancia separada de Midaz por cada entidad aislada, pero pierdes la visibilidad unificada. Un solo clúster con separación interna de organizaciones suele ser más práctico.

## Buenas 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 incluyen índices predefinidos para los identificadores principales: cuentas, portafolios y transacciones.

### Indexación de campos de metadatos personalizados

Crea explícitamente los índices que necesites mediante la API de índice de metadatos.

Por defecto, Midaz **no** indexa los **campos de metadatos personalizados**. Los clientes completan estos campos como pares clave-valor planos.

Las consultas o filtros frecuentes en 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 regularmente un campo de metadatos personalizado en **filtros de búsqueda**. 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 con frecuencia.
* No indexes los campos de acceso poco frecuente, porque cada índice adicional agrega sobrecarga de escritura.

Gestiona los índices de metadatos mediante APIs dedicadas:

* [Crear un índice de metadatos](/es/reference/products/midaz/v2/create-metadata-index)
* [Listar índices de metadatos](/es/reference/products/midaz/v2/get-all-metadata-indexes)
* [Eliminar un índice de metadatos](/es/reference/products/midaz/v2/delete-metadata-index)

### Pruebas a escala

Antes de un despliegue completo, simula tráfico alto con herramientas de pruebas de carga. Crea millones de cuentas, ejecuta volúmenes altos de transacciones y monitorea el rendimiento.

La arquitectura de Midaz está diseñada para operaciones a gran escala, pero las pruebas en el mundo real te ayudan a ajustar tu configuración.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.