Skip to content

Arquitetura Multi-tenancy

O que é Multi-tenancy?

Multi-tenancy é uma arquitetura de software onde uma única instância de uma aplicação serve múltiplos clientes independentes, chamados de tenants (inquilinos). Cada tenant opera como se tivesse sua própria instância dedicada da aplicação, mas na realidade, compartilha a infraestrutura subjacente.

No contexto do Cidade Gov, cada prefeitura (município) representa um tenant separado, com seus dados completamente isolados dos demais. Isso significa que os dados de saúde, usuários e configurações de uma cidade não são acessíveis por outra, garantindo privacidade e conformidade com regulamentações como a LGPD.

Como Funciona no Cidade Gov

A plataforma utiliza o pacote stancl/tenancy para Laravel, que implementa multi-tenancy através de bancos de dados separados:

  • Central: Uma instância compartilhada que gerencia catálogos nacionais, configurações globais e administração de tenants.
  • Tenant: Cada município possui seu próprio banco de dados dedicado, identificado por um domínio/subdomínio único.

Quando um usuário acessa o sistema:

  1. O middleware identifica o tenant baseado no domínio (ex: cidade1.cidadegov.com.br).
  2. O banco de dados do tenant é automaticamente selecionado.
  3. Todas as operações ocorrem no contexto isolado do tenant.

Benefícios da Arquitetura Multi-tenant

🔒 Isolamento de Dados

  • Segurança máxima: Dados de um município nunca se misturam com outro.
  • Conformidade regulatória: Facilita auditorias e compliance com leis de proteção de dados.
  • Privacidade: Cidadãos e profissionais de saúde têm garantia de que seus dados estão protegidos.

📈 Escalabilidade

  • Adição fácil de novos tenants: Uma nova prefeitura pode ser onboardada rapidamente, apenas criando um novo banco de dados.
  • Performance consistente: Cada tenant tem recursos dedicados, evitando gargalos compartilhados.
  • Crescimento horizontal: A infraestrutura pode ser escalada conforme o número de municípios cresce.

🛠️ Manutenção Centralizada

  • Atualizações automáticas: Correções de bugs e novas funcionalidades são aplicadas a todos os tenants simultaneamente.
  • Gestão simplificada: Uma única base de código para manter, reduzindo custos operacionais.
  • Monitoramento unificado: Logs e métricas podem ser centralizados para análise.

💰 Eficiência de Custos

  • Compartilhamento de infraestrutura: Servidores, licenças e recursos são otimizados para múltiplos clientes.
  • Redução de overhead: Não há necessidade de instâncias separadas para cada município.
  • Economia de escala: Custos de desenvolvimento e manutenção são distribuídos entre todos os tenants.

🎨 Personalização e Flexibilidade

  • Configurações por tenant: Cada município pode ter suas próprias regras, protocolos e integrações.
  • Adaptação local: Permite customizações específicas sem afetar outros tenants.
  • Integrações modulares: Módulos podem ser ativados/desativados por município conforme necessidade.

Comparação com Outras Abordagens

AbordagemIsolamentoCustosManutençãoEscalabilidade
Multi-tenantAltoBaixoCentralizadaAlta
Instâncias SeparadasMáximoAltoDistribuídaBaixa
Single DatabaseBaixoMédioCentralizadaMédia

Implementação Técnica

Identificação de Tenant

  • Por domínio: tenant1.dominio.com
  • Por subdomínio: tenant1.dominio.com
  • Por path: dominio.com/tenant1 (menos recomendado)

Estratégias de Banco de Dados

  • Banco separado por tenant: Melhor isolamento (usado no Cidade Gov)
  • Schema separado: Mesma instância, schemas diferentes
  • Tabelas compartilhadas: Menor isolamento, maior complexidade

Middleware e Context Switching

O pacote stancl/tenancy automaticamente:

  • Alterna conexões de banco de dados
  • Carrega configurações específicas do tenant
  • Gerencia cache e sessões por tenant

Considerações de Segurança

  • Row Level Security (RLS): Políticas adicionais para garantir isolamento granular.
  • Auditoria: Todas as ações são logadas com contexto do tenant.
  • Backup: Estratégias específicas para backup e recuperação por tenant.
  • Migrações: Scripts de migração devem considerar impacto em múltiplos tenants.

Essa arquitetura permite ao Cidade Gov oferecer uma solução robusta, segura e escalável para gestão municipal de saúde, atendendo às necessidades específicas de cada prefeitura enquanto mantém eficiência operacional.