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 re-arquitetar. Para uma visão geral de negócio, veja Sobre o Midaz. Como você faz o deploy e usa o Midaz afeta seu desempenho. Para lidar com grandes operações bancárias, use ledgers para segmentar cargas de trabalho e escalar cada serviço de forma independente.

Estruturando entidades para altos volumes de transação


Particionamento por Organizações, Ledgers e Contas

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

Operações orientadas a locks

O Midaz aplica cada lote de saldo atomicamente em um único script Lua do Redis, então um lote é aplicado por completo ou revertido por completo. O Midaz trata a concorrência de forma otimista: cada saldo carrega uma versão, e nos caminhos de repagamento de overdraft uma divergência de versão 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 falta de fundos disponíveis. Cada transação ainda é confirmada atomicamente. Todas as operações são aplicadas, ou nenhuma é.

Escalonamento horizontal de serviços

O Midaz usa uma arquitetura de microsserviços. Você escala cada componente de forma independente, 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, implante várias instâncias do serviço de transações atrás de um load balancer. Use o escalonamento 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 leitura. Você otimiza cada caminho de forma independente. Direcione cargas pesadas de relatórios e consultas para réplicas de leitura. Isso mantém as confirmações de transações rápidas. As leituras não desaceleram as escritas, e as escritas não desaceleram as leituras.

Processamento em lote e transações N:N

Quando possível, agrupe operações relacionadas em uma única transação. Isso reduz a sobrecarga. Use transações N:N para trabalhos em massa, como pagamentos em massa. Por exemplo, um lote de 100 débitos e 100 créditos costuma ser mais rápido do 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 uma única confirmação atômica.

Monitoramento e escalonamento iterativo

Monitore as métricas principais: latência de transação, 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 sua própria 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 apenas das partes que precisa.

Lidando com Operações multimoeda e multientidade


Estratégias multimoeda

O Midaz aceita transações multimoeda com uma conta de ativo separada para cada moeda. Para escalar bem:
  • Configure cada ativo de moeda que você precisa.
  • Trate a lógica específica de moeda (como arredondamento e taxas de conversão) na sua camada de integração.
  • Para conversão frequente de moeda, como negociação 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 de câmbio fornece as taxas.
  • Raramente você precisa de um ledger separado por moeda, a menos que a política exija. Em vez disso, use tipos de conta e a API de roteamento de transações para agrupar contas por moeda para relatórios claros.
  • Se uma moeda cobre a maioria das transações, mantenha todas as moedas no mesmo ledger. Se as operações multimoeda ficarem complexas demais, divida-as em um ledger separado por grupo de moeda.

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 organizações para segmentar entidades. Dê a cada entidade sua própria moeda base, ativos locais e ledgers.
  • Modele transações entre entidades como movimentos externos. Uma organização credita sua conta externa, e a outra debita a própria conta.
  • Você pode rodar várias organizações em uma única instância do Midaz. Aloque recursos suficientes: os microsserviços processam todas as requisições juntas, então o volume total importa.
  • Você pode fazer o deploy de uma instância separada do Midaz por entidade isolada, mas perde a visibilidade unificada. Um único cluster com separação interna de organizações costuma ser mais prático.

Boas 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 principais: contas, portfólios e transações.

Indexação de campos de metadados personalizados

O Midaz não cria índice padrão nas coleções de metadados. Os documentos de metadados são chaveados por entity_id. Crie os índices que você precisa explicitamente pela API de Índice de Metadados. Por padrão, o Midaz não indexa campos de metadados 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 regularmente um campo de metadados personalizado em filtros de busca ou ordenaçã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 metadados que você consulta ou ordena com frequência.
  • Não indexe campos raramente acessados, porque cada índice extra adiciona sobrecarga de escrita.
Gerencie índices de metadados por APIs dedicadas:

Testes em escala

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