Um breve resumo sobre multi-tenant e como implementar

fabriciolugao 0 views 30 slides Oct 04, 2025
Slide 1
Slide 1 of 30
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30

About This Presentation

Um breve resumo sobre multi-tenant


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

Como obter o IdTenant no frontend ?

Cases Salesforce (pioneira); Zendesk (redução drástica de custos); Office 365; Workday ; ServiceNow ; +A Educação;

Obrigado!