Skip to main content
O Midaz lida com milhões de contas e transações por dia. Você começa pequeno e escala horizontalmente conforme a demanda cresce, sem rearquitetar. Para uma visão geral de negócios, veja Sobre o Midaz. A forma como você faz o deploy e usa o Midaz afeta seu desempenho. Para lidar com grandes operações bancárias, use ledgers para segmentar as cargas de trabalho e escale cada serviço separadamente.

Estruturando entidades para altos volumes de transações


Particionamento por Organizations, Ledgers e Accounts

Seu banco processa milhões de transações por dia? Distribua a carga de trabalho entre muitas accounts, ledgers ou organizations. Por exemplo, segmente clientes pela inicial do sobrenome, ou atribua um ledger separado a cada região. Cada ledger do Midaz é um livro independente. O Midaz processa juntas as transações de um ledger. Essa divisão evita que um único ledger se torne um gargalo. O Midaz escala horizontalmente: diferentes ledgers podem rodar em instâncias separadas ou partições de banco de dados.

Operações orientadas a lock

O Midaz aplica cada lote de saldos de forma atômica em um único script Lua no Redis, então o lote é aplicado por inteiro ou revertido por inteiro. A concorrência é tratada de forma otimista: cada saldo carrega uma versão e, nos caminhos de quitação de overdraft, uma versão defasada aborta o lote inteiro com o erro 0174 para que o chamador releia o estado e tente novamente. A conta @external ignora as verificações de piso de saldo e de overdraft. Ela pode ficar negativa sem limite, então as transações contra ela nunca falham por fundos disponíveis. Cada transação ainda é confirmada de forma atômica — todas as operações se aplicam, ou nenhuma.

Escalabilidade horizontal de serviços

O Midaz usa uma arquitetura de microsserviços. Você escala cada componente separadamente — por exemplo, o processamento de transações e as consultas. Comece pequeno. Conforme a demanda cresce, escale os serviços que precisam disso. Para cargas altas, faça o deploy de várias instâncias do serviço de transações atrás de um load balancer. Use o scaling de pods do Kubernetes (K8s).

CQRS e réplicas de leitura

O Midaz usa CQRS (Command Query Responsibility Segregation) para separar as operações de escrita e de leitura. Você otimiza cada caminho separadamente. Direcione as cargas pesadas de relatórios e consultas para réplicas de leitura. Isso mantém os commits de transações rápidos. As leituras não desaceleram as escritas, e as escritas não desaceleram as leituras.

Batching e transações N:N

Quando possível, agrupe as operações relacionadas em uma única transação. Isso reduz a sobrecarga. Use transações N:N para trabalho em massa, como pagamentos em lote. Por exemplo, um lote de 100 débitos e 100 créditos costuma ser mais rápido que 100 transações separadas. Isso funciona quando as operações pertencem ao mesmo conjunto lógico. O Midaz processa essas transações N:N em um único commit atômico.

Monitoramento e escalabilidade iterativa

Monitore as métricas-chave: latência de transações, throughput, uso de recursos (CPU e memória) e desempenho do banco de dados. Use as ferramentas de observabilidade do Midaz (OpenTelemetry e Grafana), ou envie as métricas para o seu próprio stack de monitoramento. Escale horizontal ou verticalmente antes de atingir um limite de desempenho. O Midaz é modular e source-available, então você faz o deploy das partes que precisa.

Lidando com operações multi-moeda e multi-entidade


Estratégias multi-moeda

O Midaz suporta transações multi-moeda com uma conta de asset separada para cada moeda. Para escalar bem:
  • Configure cada asset de moeda que você precisa.
  • Trate a lógica específica de cada moeda — como arredondamento e taxas de conversão — na sua camada de integração.
  • Para conversão de moeda frequente, como trading forex, execute a conversão em um serviço separado. O Midaz registra os débitos e créditos, mas um serviço externo de taxas FX fornece as taxas.
  • Você raramente precisa de um ledger separado por moeda, a menos que a política exija. Em vez disso, use os account types e a API de transaction routing para agrupar contas por moeda e ter relatórios claros.
  • Se uma única moeda cobre a maioria das transações, mantenha todas as moedas no mesmo ledger. Se as operações multi-moeda ficarem complexas demais, divida-as em um ledger separado por grupo de moedas.

Múltiplas entidades: Consolidação e separação

Para um banco que opera em vários países ou entidades legais:
  • Use a hierarquia de organization para segmentar entidades. Dê a cada entidade sua própria moeda base, assets locais e ledgers.
  • Modele as transações entre entidades como movimentos externos. Uma organization credita sua external account, e a outra debita a própria.
  • Você pode rodar várias organizations em uma única instância do Midaz. Aloque recursos suficientes: os microsserviços processam todas as requisições em conjunto, então o volume total importa.
  • Você pode fazer o deploy de uma instância do Midaz separada por entidade isolada, mas perde a visibilidade unificada. Um único cluster com separação interna de organizations costuma ser mais prático.

Melhores práticas de otimização de desempenho


Indexação e consultas

Use as APIs do Midaz para ler dados, não consultas diretas ao banco de dados. Essas APIs carregam índices predefinidos para os identificadores centrais: accounts, portfólios e transactions.

Indexação de campos de metadata personalizados

O Midaz não cria nenhum índice padrão nas coleções de metadata — documentos de metadata são identificados por entity_id. Crie explicitamente os índices que você precisa pela API de Índices de Metadata. Por padrão, o Midaz não indexa os campos de metadata personalizados. Os clientes preenchem esses campos livremente como pares chave-valor. Consultas ou filtros frequentes em campos não indexados podem disparar varreduras completas da coleção. Essas varreduras ficam mais lentas conforme o volume de dados cresce. Crie um índice quando você usar com frequência um campo de metadata personalizado em filtros de busca ou ordem de classificação. Com um índice, o MongoDB encontra os documentos rápido e reduz o tempo de resposta das consultas. Recomendações:
  • Indexe apenas os campos de metadata que você consulta ou ordena com frequência.
  • Não indexe campos de acesso raro, porque cada índice adicional adiciona sobrecarga de escrita.
Gerencie os índices de metadata por meio de APIs dedicadas:

Testes em escala

Antes do deployment completo, simule alto tráfego com ferramentas de teste de carga. Crie milhões de contas, execute volumes pesados de transações e monitore o desempenho. A arquitetura do Midaz (microsserviços e CQRS) mira operações de alta escala, mas testes no mundo real ajudam você a ajustar sua configuração. Busque escalabilidade linear: mais instâncias da aplicação devem aumentar o throughput proporcionalmente.