Skip to content

GitLab

  • Menu
Projects Groups Snippets
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • W wiki
  • Project information
    • Project information
    • Activity
    • Labels
    • Planning hierarchy
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Monitor
    • Monitor
    • Incidents
  • Packages & Registries
    • Packages & Registries
    • Package Registry
    • Infrastructure Registry
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • Pró-Mata
  • wiki
  • Wiki
  • Banco de Dados

Last edited by João Henrique Pires Bergallo Sep 15, 2025
Page history

Banco de Dados

Home Escopo Processo Sprints Design Arquitetura Repositórios Banco de Dados

Arquitetura Pró-Mata - Infraestrutura e Banco de Dados

Modelagem do Banco de Dados

modelagem_bd

O diagrama pode ser visualizado em: https://dbdiagram.io/d/68a0cd5d1d75ee360add7565

Banco de Dados PostgreSQL

Desenvolvimento: Um container PostgreSQL simples que roda localmente. O Prisma ORM gerencia as migrações automaticamente.

Produção: PostgreSQL com replicação master-slave, backups automáticos criptografados, e monitoramento futuro com Grafana e PostgreSQL exporter.

Como os Repositórios se Conectam

Backend: Precisa do PostgreSQL e se conecta via variáveis de ambiente do .env

Frontend: Só conversa com o backend através da API, não toca no banco diretamente

Infrastructure: O "maestro" que orquestra tudo:

  • Terraform: Cria a infraestrutura no Azure (VMs, redes, IPs)
  • Ansible: Configura as máquinas e instala Docker Swarm
  • Docker Swarm: Gerencia os containers em produção

Segredos com Ansible Vault

É como um cofre digital. Cada ambiente tem uma senha em .vault_pass que desbloqueia os segredos criptografados. No CI/CD, os segredos ficam no GitHub Secrets e são usados temporariamente durante o deploy.

Fluxo de Deploy

  1. Terraform cria/atualiza infraestrutura
  2. Ansible pega os IPs criados e configura as máquinas
  3. Docker Swarm orquestra os containers
  4. CI/CD detecta mudanças na tag latest e redeploya automaticamente

Cloudflare

Funciona como DNS + CDN + proteção. Só precisa apontar os nameservers do registro.br para o Cloudflare.

Benefícios: SSL gratuito, proteção DDoS, aceleração, esconde IP real do servidor.

Estratégias PostgreSQL em Homologação

Arquitetura Master-Slave

Banco Principal (Master): Recebe todas as escritas de dados. Roda em uma máquina com label database.primary = true no Docker Swarm.

Réplicas (Slaves): Copiam dados do master automaticamente. Servem apenas consultas de leitura. Quantidade configurável por variável postgres_replica_count.

Sincronização: A replicação é automática via streaming replication do PostgreSQL. Se o master falhar, uma réplica pode ser promovida manualmente.

PgBouncer - Pool de Conexões

Função: Atua como um "porteiro" entre aplicações e banco, controlando quantas conexões simultâneas são permitidas.

Configuração em Homologação:

  • Pool Mode: transaction (mais eficiente, compartilha conexões entre transações)
  • Max Client Conn: 200 conexões cliente simultâneas
  • Pool Size: 25 conexões reais ao banco por pool
  • Replicas: 2-3 instâncias PgBouncer para alta disponibilidade

Benefícios: Evita sobrecarga do banco com muitas conexões, reutiliza conexões existentes, distribui carga entre múltiplas instâncias.

PostgreSQL Alta Disponibilidade

Tolerância a Falhas

Auto-Recovery: Docker Swarm reinicia automaticamente containers PostgreSQL que falharem. Configuração restart_policy com 3 tentativas e delay de 10-15 segundos.

Replication Slots: Garantem que o master preserve WAL (Write-Ahead Logs) necessários para réplicas, mesmo se a réplica ficar offline temporariamente.

Health Checks: Verificações pg_isready a cada 30 segundos com 5 tentativas before declaring failure. Se um nó falhar, é automaticamente removido do load balancing.

WAL Archiving: Logs de transações são arquivados automaticamente para recuperação point-in-time em caso de corrupção de dados.

Disponibilidade Contínua

Hot Standby: Réplicas ficam ativas e podem servir consultas de leitura mesmo durante sincronização com o master.

Physical Replication Slots: Impedem que o master descarte WAL logs que réplicas ainda precisam, evitando quebra de sincronização.

Streaming Replication: Dados são replicados em tempo real via conexão TCP contínua, mantendo réplicas sempre atualizadas.

Placement Constraints: Docker Swarm garante que master e réplicas rodem em nós físicos diferentes (node.labels.database.primary vs node.labels.database.replica).

Recuperação de Desastres

Base Backup Automático: Script pg_basebackup cria cópias completas do banco que podem ser usadas para restaurar réplicas ou criar novos masters.

Point-in-Time Recovery: Combinação de backups + WAL archives permite restaurar banco para qualquer momento específico no passado.

Replication Slot Cleanup: Limpa automaticamente slots órfãos para evitar acúmulo de WAL logs que consomem espaço em disco.

Failover Manual: Se master falhar, uma réplica pode ser promovida manualmente a master usando comandos pg_promote().

Esta arquitetura garante que o sistema suporte falhas de hardware, rede ou software com perda mínima de dados e downtime reduzido.

Clone repository
  • Arquitetura
  • Banco de Dados
  • Design
  • Escopo
  • Processo
  • Repositórios
  • Sprints
  • Home