Saltar al contenido principal

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

Particionamiento por Organizaciones, Ledgers y Accounts

Si tu banco procesa millones de transacciones diarias, considera distribuir las cargas de trabajo entre múltiples cuentas, ledgers o incluso organizaciones. Por ejemplo, podrías segmentar clientes por iniciales de apellido o asignar ledgers separados por región. Cada ledger en Midaz funciona como un libro independiente: las transacciones dentro de un ledger se procesan juntas. Distribuir la carga de esta manera evita que un solo ledger se convierta en un cuello de botella. La arquitectura de Midaz admite escalamiento horizontal, permitiendo que diferentes ledgers operen en instancias o particiones de base de datos separadas.

Operaciones orientadas a bloqueos

Para evitar conflictos, las transacciones concurrentes se bloquean a nivel de cuenta dentro de cada ledger. Esto sigue una estrategia FIFO (first in, first out - primero en entrar, primero en salir) y evita condiciones de carrera. La cuenta @external no usa bloqueos, permitiendo operaciones simultáneas, pero cada una debe seguir las reglas de atomicidad (todo o nada).

Escalamiento horizontal de servicios

Midaz está construido sobre una arquitectura de microservicios, lo que significa que diferentes componentes, como el procesamiento de transacciones y las consultas, pueden escalarse de forma independiente. Comienza pequeño, pero a medida que aumente la demanda, escala servicios específicos en consecuencia. Para cargas altas, despliega múltiples instancias del servicio de procesamiento de transacciones detrás de un balanceador de carga y aprovecha el escalamiento de pods de Kubernetes (K8s).

CQRS y réplicas de lectura

Midaz emplea CQRS (Command Query Responsibility Segregation - Segregación de Responsabilidad de Comando y Consulta) para separar operaciones de escritura y lectura, permitiendo que cada una se optimice individualmente. Usa esto ventajosamente: las cargas pesadas de reportes y consultas deben ir a réplicas de lectura, manteniendo los commits de transacciones ligeros y eficientes. Las lecturas no ralentizan las escrituras, y viceversa, garantizando un alto rendimiento.

Procesamiento por lotes y transacciones N:N

Cuando sea posible, agrupa múltiples operaciones relacionadas en una sola transacción para reducir la sobrecarga de procesamiento. Usa transacciones N:N para operaciones masivas como pagos en masa. Por ejemplo, manejar 100 débitos y 100 créditos en un solo lote es a menudo más eficiente que procesar 100 transacciones individuales, siempre que pertenezcan al mismo conjunto de operaciones lógicas. Midaz está diseñado para manejar tales transacciones complejas a escala.

Monitoreo y escalamiento iterativo

Monitorea métricas clave: latencia de transacciones, rendimiento, uso de recursos (CPU/memoria) y rendimiento de la base de datos. Usa las herramientas de observabilidad integradas de Midaz (OpenTelemetry + Grafana) o intégrate con el monitoreo de tu infraestructura. Escala de forma proactiva (horizontal o vertical) cuando te acerques a los umbrales de rendimiento. Dado que Midaz es modular y de código abierto, tienes la flexibilidad de desplegarlo según sea necesario.

Manejo de operaciones multi-moneda y multi-entidad

Estrategias multi-moneda

Midaz admite transacciones multi-moneda manteniendo cuentas de activos separadas por moneda. Para optimizar el escalamiento:
  • Asegúrate de que todos los activos de moneda requeridos estén configurados.
  • Ten en cuenta la lógica específica de la moneda (por ejemplo, redondeo, tasas de conversión) en tu capa de integración.
  • Si la conversión de moneda es frecuente (por ejemplo, comercio de divisas), adminístrala en un módulo o servicio separado, potencialmente usando nuestro plugin Exchange Engine. Midaz manejará débitos/créditos, pero puede ser necesario un servicio externo de tasas de cambio.
  • Los ledgers separados por moneda generalmente no son necesarios a menos que la política lo dicte. En su lugar, usa el Plan de Cuentas para categorizar cuentas por moneda para mayor claridad en los reportes.
  • Si una sola moneda (por ejemplo, moneda local) se usa en la gran mayoría de las transacciones, es mejor mantener todas las monedas dentro del mismo ledger. Sin embargo, si gestionar operaciones en múltiples monedas se vuelve demasiado complejo, considera dividir en ledgers separados por grupo de monedas.

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

Para bancos que operan en múltiples países o entidades legales:
  • Usa la jerarquía de Organización para segmentar entidades, cada una con su propia moneda base, activos locales y ledgers.
  • Las transacciones entre entidades se tratan como movimientos externos: una organización acredita su cuenta externa mientras otra debita la propia.
  • Ejecutar múltiples organizaciones en la misma instancia de Midaz es factible, pero asegúrate de que se asignen recursos suficientes. Los microservicios procesan todas las solicitudes colectivamente, por lo que el volumen general importa.
  • Desplegar instancias separadas de Midaz para entidades aisladas es posible, pero limita la visibilidad unificada. Típicamente, un solo clúster de Midaz con separación interna de organizaciones es más práctico.

Mejores prácticas de optimización del rendimiento

Indexación y consultas

Usa las APIs de Midaz para la recuperación de datos en lugar de consultas directas a la base de datos. Las APIs están diseñadas para la eficiencia con indexación integrada, habilitando operaciones como recuperar todas las transacciones de una cuenta o listar todas las cuentas en un Portafolio.

Pruebas a escala

Antes del despliegue completo, simula tráfico alto usando herramientas de pruebas de carga. Crea millones de cuentas, ejecuta volúmenes pesados de transacciones y monitorea el rendimiento. La arquitectura de Midaz (microservicios, CQRS) está construida para operaciones de alta escala, pero las pruebas del mundo real ayudan a afinar tu implementación. Busca escalabilidad lineal: escalar servidores de aplicaciones debe aumentar proporcionalmente el rendimiento.