Um breve resumo sobre multi-tenant e como implementar
fabriciolugao
0 views
30 slides
Oct 04, 2025
Slide 1 of 30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
About This Presentation
Um breve resumo sobre multi-tenant
Size: 18.29 MB
Language: pt
Added: Oct 04, 2025
Slides: 30 pages
Slide Content
Multi Tenant Porque preciso de vários inquilinos?
Você já viu esse sistema?
Single- tenant
Single-tenant : Cada cliente possui sua própria infraestrutura. Isolada dos demais clientes
Single- tenant
Vantagens e desafios Desafios Vantagens Manutenção cara; Cada atualização é um esforço manual Isolamento total; Customização fácil;
E se você crescer?
Multi-tenant te auxiliar a escalar em infra e operação
Vantagens Uma única infraestrutura atende a múltiplos clientes Escalabilidade Eficiência operacional Atualizações e manutenções são realizadas em uma única instância Custos reduzidos Compartilhamento de recursos reduz despesas operacionais Agilidade Novas funcionalidades são disponibilizadas rapidamente para todos os clientes 01 02 03 04
❌ O que não é multi-tenant Não significa múltiplos subdomínios. Ter empresa1.meusistema.com e empresa2.meusistema.com não torna sua aplicação multi-tenant por si só. Não significa um banco de dados por empresa. Isso é uma forma de isolar dados, mas não é o conceito do multi-tenant
✔️ Multi-tenant Múltiplas empresas utilizando a mesma infraestrutura. Com seus dados e configurações isolados.
Como implementar?
Formas mais utilizadas Separação lógica dentro do mesmo banco de dados Adicionando colunas como IdTenant em todas as tabelas. Separação por schema dentro do mesmo BD Cada cliente tem seu próprio schema Bancos de dados separados Cada cliente tem seu próprio BD, gerenciados pela mesma aplicação 01 03 02
Vantagens “coluna IdTenant” Não é necessário múltiplos BDs ou schemas . Facilita manutenção e deploy Simplicidade Escalabilidade Adicionar novos clientes sem provisionar nova infraestrutura Facilidade de evolução Atualizações são feitas uma vez só, para todos os clientes Menor custo operacional Todos os clientes compartilham a mesma infraestrutura física e lógica 01 02 03 04
Minha 1ª experiência com multi-tenant
Migração de Single para Multi-Tenant
Cenário
Implementação Adicionar a coluna IdTenant em todas as tabelas Com Code First, é bem simples: Basta criar uma classe abstrata (Ex.: BaseEntity) com a propriedade IdTenant e herdamos ela em todos os models do sistema 01
Implementação public abstract class BaseEntity { public Guid IdTenant { get ; set ; } }
Implementação public class Person : BaseEntity { public string Name { get ; set ; } public string Email { get ; set ; } public DateTime BirthDate { get ; set ; } }
Filtro global Vantagem de utilizar ORM: permite aplicar filtros globais Não é necessário adicionar manualmente WHERE IdTenant = ... em todas as queries. O ORM aplica automaticamente o filtro para todas as consultas.
Filtro global public class AppDbContext : DbContext { ... protected override void OnModelCreating ( ModelBuilder builder ) { foreach ( var entityType in builder . Model . GetEntityTypes ()) { ... builder . Entity ( entityType . ClrType ) . HasQueryFilter ( tenantFilter ); } } }
Recebendo o IdTenant via Header Para que o filtro global funcione, precisamos sempre saber qual tenant está fazendo a requisição. Uma prática comum é receber o IdTenant no header da requisição HTTP e, através de um middleware , identificar e setar esse valor para ser usado pelo DbContext
Middleware
Como receber o IdTenant? Para APIs públicas funciona bem receber o IdTenant via header HTTP. Quando estamos lidando com áreas do sistema que exigem login do usuário, outra prática bastante utilizada é incluir o IdTenant dentro do JWT
Como obter o IdTenant no frontend ? Configuração fixa por ambiente Cada deploy já sabe qual tenant ele atende Informação no login Backend retorna o IdTenant junto com o token JWT Consulta inicial ao backend Frontend envia algum identificador (como domínio) e recebe o IdTenant correspondente 01 03 02