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

# Boas práticas para produção com Midaz

> Configure o Midaz para produção com deployment multi-AZ, autoscaling, serviços gerenciados e os padrões de resiliência em Kubernetes recomendados.

O Midaz foi construído para escala, segurança e clareza operacional. Este guia ajuda você a configurá-lo corretamente desde o início, para que possa minimizar o tempo de inatividade, proteger seus dados e lidar com confiança com cargas de trabalho de alto volume em produção.

## Configuração ideal

***

Para aproveitar ao máximo o Midaz em produção, comece com:

* Implantação em múltiplas zonas de disponibilidade.
* Uso de pelo menos 3 nós de trabalho com autoscaling.
* Separação de cargas de trabalho (aplicação vs. banco de dados).
* Uso de serviços gerenciados como RDS, ElastiCache e MongoDB Atlas.
* Aplicação de boas práticas do Kubernetes para resiliência, segurança e observabilidade.
* Automação de backups e alertas desde o primeiro dia.

## Planejamento de infraestrutura

***

### Arquitetura do cluster

Para garantir resiliência e desempenho:

* **Implante em múltiplas zonas de disponibilidade**.
* **Use pelo menos 3 nós de trabalho** para alta disponibilidade.
* **Habilite o autoscaling de nós** para absorver picos de carga.
* **Separe cargas de trabalho de aplicação e banco de dados** quando possível.

### Dimensionamento de recursos

* **Dimensione os nós de acordo com as cargas de trabalho esperadas**.
* **Priorize serviços críticos** com recursos suficientes.
* **Aplique cotas de recursos** para evitar contenção.
* **Monitore e ajuste continuamente** com base no uso.

### Armazenamento

* **Use armazenamento com SSD** para todos os componentes de banco de dados.
* **Defina classes de armazenamento adequadas** por provedor de nuvem.
* **Provisione volumes com margem** para crescimento.
* **Para dados críticos**, use opções de armazenamento replicado ou altamente durável.

## Arquitetura de banco de dados e alta disponibilidade

***

O Midaz utiliza **CQRS (Command Query Responsibility Segregation)** para separar leituras de escritas de forma clara. Isso ajuda você a escalar de forma eficiente e construir serviços tolerantes a falhas.

### PostgreSQL

* Use um **primário dedicado para escritas** e **réplicas para leituras**.
* Habilite a **replicação síncrona** para dados críticos.
* Configure o **failover automático** (ex.: Patroni, AWS RDS).
* Monitore o **atraso de replicação** e a consistência.
* Prefira **serviços gerenciados** como AWS RDS ou GCP Cloud SQL para resiliência e automação.

### Redis / Valkey

* Implante em **modo cluster** em múltiplas zonas.
* Habilite o **failover automático** (ex.: Redis Sentinel ou clustering nativo).
* Use **serviços gerenciados** como AWS ElastiCache ou GCP Memorystore para simplicidade e disponibilidade.

### MongoDB

* Use **replica sets** com membros distribuídos entre zonas.
* Monitore **transições de papel** e atraso.
* Agende **backups regulares**.
* **Evite escrever em secundários** a menos que seja intencional.
* Use **serviços gerenciados** como MongoDB Atlas ou AWS DocumentDB para observabilidade, escalabilidade e resiliência.

## Infraestrutura de mensageria

***

O **RabbitMQ** é essencial para **desacoplar serviços** e possibilitar **consistência eventual** na arquitetura CQRS do Midaz:

* Serviços de comando **publicam eventos** após processar escritas.
* O RabbitMQ **roteia eventos** para consumidores interessados através de exchanges e filas.
* Consumidores **atualizam modelos de leitura**, **disparam workflows** ou **integram com sistemas externos** com base nos eventos recebidos.

Recomendamos usar um **serviço gerenciado de RabbitMQ** (como AWS MQ ou CloudAMQP) em produção para simplificar as operações e melhorar a confiabilidade.

## Estratégias de alta disponibilidade

***

### Redundância de serviços

* Implante múltiplas réplicas para cada serviço.
* Use regras de anti-afinidade para distribuir serviços entre zonas.
* Aplique Pod Disruption Budgets para reduzir o tempo de inatividade durante atualizações.

### Balanceamento de carga

* Use **ingress controllers** com health checks.
* Evite **session affinity** a menos que seja necessário.
* Habilite **connection draining** para rollouts suaves.

## Considerações de segurança

***

### Segurança de rede

* Aplique **network policies do Kubernetes** para controlar o tráfego.
* Atribua **permissões mínimas** a cada service account.
* Proteja o **acesso externo com TLS**.
* Restrinja **interfaces administrativas** com listas de IPs permitidos.

### Gerenciamento de secrets

* Use **Kubernetes Secrets** para credenciais e tokens.
* **Rotacione secrets regularmente**.
* **Nunca codifique secrets diretamente** em containers ou arquivos de configuração.
* Use **gerenciadores de secrets externos** para uma postura de segurança mais forte.

## Monitoramento e observabilidade

***

### Métricas

* Monitore **KPIs principais de aplicação e infraestrutura**.
* Defina **limites de alerta acionáveis**.
* Use **dashboards** para visibilidade em tempo real.

### Logging

* **Centralize logs** entre serviços.
* Use **formatos estruturados** para melhor filtragem.
* Aplique **políticas de retenção e rotação de logs**.
* Defina **alertas baseados em logs** para eventos críticos.

### Tracing

* Habilite **tracing distribuído** entre serviços.
* **Amostre traces** para equilibrar desempenho.
* Correlacione **traces com logs e métricas** para visibilidade completa.

### Alertas

* Crie **alertas claros e confiáveis**.
* Ajuste limites para **reduzir ruído**.
* **Direcione alertas** pelos canais adequados.
* Mantenha **runbooks** para problemas recorrentes.

## Estratégia de backup

***

* Automatize **backups regulares** para sistemas críticos.
* Armazene **backups em múltiplas localidades ou regiões**.
* Teste **procedimentos de restauração** regularmente.
* Mantenha a **documentação de backup** atualizada e acessível.

## Idempotência

***

Em produção, sempre proteja operações críticas contra processamento duplicado:

* **Inclua chaves de idempotência em todas as requisições de criação de transação** usando o header `X-Idempotency`.
* **Use chaves explícitas e determinísticas** vinculadas aos IDs do seu processo de negócio (ex: IDs de pedido, referências de pagamento) em vez de depender de chaves autogeradas.
* **Valide o header de resposta `X-Idempotency-Replayed`** para distinguir transações novas de replays do cache.
* **Defina valores de TTL apropriados** que correspondam à sua janela de retentativa — 60–120s para fluxos síncronos, 300–600s para assíncronos.

<Note>
  Todos os produtos da Lerian suportam idempotência através de suas próprias convenções de headers. Para detalhes de implementação, estratégias de retentativa e uma comparação entre produtos, consulte [Retentativas e idempotência](/pt/reference/retries-idempotency).
</Note>

## Considerações finais

***

O Midaz é pronto para produção por design. Quando você alinha sua infraestrutura à arquitetura dele, você ganha:

* Separação limpa de **leitura/escrita** com CQRS.
* Compatibilidade plug-and-play com **serviços gerenciados de nuvem**.
* Suporte nativo para **observabilidade, failover e operações seguras**.

Revise sua configuração regularmente, aplique essas boas práticas proativamente e você terá uma base robusta pronta para crescer junto com o seu negócio.

## Próximos passos

***

Precisa de ajuda para escalar, migrar ou fortalecer seu ambiente de produção?

* Leia o [Guia de implantação do Midaz](/pt/midaz/deployment).
* [Entre em contato com nossa equipe](https://lerian.studio/contact) para suporte personalizado.
