O documento discute multitenancy em aplicações na nuvem e SaaS. Explica que a multitenancy permite que vários usuários compartilhem a mesma infraestrutura e código, mas com seus dados isolados. Detalha três abordagens para isolamento de dados: por banco de dados, por schema e por coluna. Discute as vantagens e desvantagens de cada uma e como implementá-las usando Hibernate e Eclipse Link no Java.
5. MULTITENANT
• Todos os usuários compartilham a mesma
infraestrutura e base de código.
• Um usuário não enxerga os dados do outro.
• É como se cada usuário tivesse sua própria
“instalação” do software.
11. SEPARAÇÃO POR BANCO DE
DADOS
• Fácil restaurar backup
• Isolamento total
• Fácil de implementar
• Custo maior de hardware
(infraestrutura)
• Backup mais complexo
• Duplicação de dados
comuns
Vantagens Desvantagens
14. SEPARAÇÃO POR SCHEMA
• Fácil fazer backup
• Isolamento quase total
• Relativamente fácil de
implementar
• Custo menor de hardware
(infraestrutura)
• Restore mais complexo
• Duplicação de dados
comuns
Vantagens Desvantagens
15. SEPARAÇÃO POR COLUNA
TenantID ProductID Name
1271
1342
1234
6578
TenantID CustomerID FullName
1271 2234 John Doe
1317
3456
8790
TenantID Shipment Date
1271 112627 2014-01-03
1317 224454 2015-03-01
3456 837647 2014-12-25
1271 243454 2015-03-15
16. SEPARAÇÃO POR COLUNAS
• Custo baixo de hardware
(infraestrutura)
• Fácil extrair relatórios
envolvendo dados de
múltiplos clientes
• Backup é fácil
• Implementação mais
complexa
• Isolamento fraco
• Restore é muito complexo
Vantagens Desvantagens
21. FALANDO EM JAVA…
• JPA - Sem suporte ainda.
• Hibernate - Suporte parcial (Banco e Schema)
• EclipseLink - Suporte total (Banco, Schema e
Coluna)
22. HIBERNATE
• Implementar 2 interfaces
• MultiTenantConnectionProvider
• Cria as conexões para cada tentant (banco ou
schema)
• CurrentTenantIdentifierResolver
• Descobre qual o tenant atual
23. ECLIPSE LINK
• Anotar as classes com @Multitenant e escolher o formato
• @Multitenant(SINGLE_TABLE)
• Separação por coluna
• @Multitenant(TABLE_PER_TENANT)
• Separação por Schema
• @Multitenant(VPD)
• Delega para o banco de dados o filtro dos dados do tenant