APLICAÇÕES NA NUVEM E SAASO QUE É MULTITENANCY E COMO SEPARAR OS
DADOS DE SEUS USUÁRIOS
Mário Amaral@mario_fts
QUE MÁRIO?
• Desenvolvedor Java desde 2004
• Instrutor e desenvolvedor na Caelum
• Open Source
• Stella
• Vraptor
O QUE É SAAS?
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.
COMO ISOLAR OS DADOS DOS USUÁRIOS ?
+ Isolado
+ Compartilhado
+ Compartilhado
+ Isolado
Banco Schema Coluna
SEPARANDO OS CLIENTES POR BANCO
SEPARAÇÃO POR BANCO DE DADOS
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
SEPARANDO OS CLIENTES POR SCHEMA
SEPARAÇÃO POR SCHEMATenant 1
Tenant 2
Tenant 3
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
SEPARAÇÃO POR COLUNA
TenantID ProductID Name
1271134212346578
TenantID CustomerID FullName
1271 2234 John Doe131734568790
TenantID Shipment Date
1271 112627 2014-01-031317 224454 2015-03-013456 837647 2014-12-251271 243454 2015-03-15
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
COMO ESCOLHER QUAL USAR?
Comparação entre dados isolados x dados compartilhados
https://msdn.microsoft.com/en-us/library/aa479086.aspx
ISOLADO X COMPARTILHADO
Isolado Compartilhado
Quantidade de tenants
Baixa Alta
Volume de dados por tenant
Alto Baixo
Necessidade de customização
Alta Baixa
MAS E A PARTE TÉCNICA?
FALANDO EM JAVA…
• JPA - Sem suporte ainda.
• Hibernate - Suporte parcial (Banco e Schema)
• EclipseLink - Suporte total (Banco, Schema e Coluna)
HIBERNATE• Implementar 2 interfaces
• MultiTenantConnectionProvider
• Cria as conexões para cada tentant (banco ou schema)
• CurrentTenantIdentifierResolver
• Descobre qual o tenant atual
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
OBRIGADO!
github.com/mariofts @mario_fts [email protected]
Top Related