Uma biblioteca Multi-Tenant

para o framework Django
Aluno: José de Arimatea Rocha Neto
Orientador: Vinicius Cardoso Garcia

Agenda







Motivação
Objetivos do Trabalho
Referencial Teórico
Multi-Tenancy
Django Multi-Tenant
Demonstração
Conclusão
Trabalhos Futuros

Motivação
90% das empresas brasileiras de médio porte tem algum tipo de aplicação em
Cloud Computing.
Fonte: Global Technology Adoption Index, 2014.

SaaS cresceu em 2014 cinco vezes mais rápido do que o mercado de software
tradicional.
Fonte: Worldwide SaaS and Cloud Software 2015–2019 Forecast and 2014 Vendor Shares.

Motivação
● Python é a quarta linguagem de programação mais utilizada no mundo (TIOBE
Index)
● Django é o quinto framework web mais utilizado hoje em dia (HotFrameworks)

Objetivos do trabalho
● Realizar um estudo sobre arquitetura Multi-Tenant e analisar técnicas de
implementação;
● Estudo comparativo com outros trabalhos da área;
● Investigar e propor uma biblioteca Multi-Tenant para Django.

Referencial Teórico: Computação em Nuvem
Computação em Nuvem é um modelo que provém acesso conveniente e sobre
demanda a um conjunto de serviços computacionais configuráveis, que podem ser
rapidamente provisionados e lançados com o mínimo de esforço e interação com o
provedor (NIST, 2011).

Referencial Teórico: Computação em Nuvem
Características Essenciais:




Alocação de recursos on-demand;
Amplo acesso à rede;
Pooling de recursos;
Elasticidade rápida;
Medição do serviço.

Referencial Teórico: Computação em Nuvem
Modelos de Serviço:
● Software como um Serviço (SaaS);
● Plataforma como um Serviço (PaaS);
● Infraestrutura como um Serviço (IaaS).

Referencial Teórico: Computação em Nuvem
Modelos de Implantação:



Nuvem privada;
Nuvem comunitária;
Nuvem pública;
Nuvem híbrida.

Referencial Teórico: Software como um Serviço
O modelo de serviço SaaS provém ao consumidor a capacidade de usar a
aplicação do provedor localizada em uma infraestrutura de nuvem. As aplicações
estão acessíveis de várias maneiras, como navegadores ou interface de sistemas
(NIST, 2011).

Referencial Teórico: Software como um Serviço

Multi-Tenancy: Definição
Multi-Tenancy é um modelo organizacional de aplicações SaaS que permite servir
mútiplos tenants (clientes) através de uma única instância da aplicação e do banco
de dados. Além disso, é possível configurar essa aplicação para atender as
necessidades de cada tenant (Bezemer e Zaidman, 2010).

Multi-Tenancy: Arquiteturas Correlatas
● Multi-Tenancy VS Multi-User


Grau de configurabilidade;
Diferenciação na interface e no fluxo no sistema;
SLA pode diferir para cada tenant.

● Multi-Tenancy VS Multi-Instance

Multi-Instance pode simular Multi-Tenancy através de virtualização;
Mútiplas instâncias VS Instância única.

Multi-Tenancy: Características Chave
● Compartilhamento de hardware:

Compartilhamento do servidor e do banco de dados por vários tenants;

● Compartilhamento da aplicação e do banco de dados:


Aplicação compartilhada, banco de dados separados;
Aplicação compartilhada, banco de dados compartilhado, tabelas separadas;
Aplicação compartilhada, banco de dados compartilhado, tabelas compartilhadas;

● Alto nível de configurabilidade

Multi-Tenancy: Gerenciamento de dados
BD Separado

Esquema Separado

Esquema Compartilhado

Multi-Tenancy: Vantagens VS Desvantagens
● Vantagens:



Economia de custos relacionados à infraestrutura;
Redução dos custos de manutenção do sistema;
Facilidade de atualização e deploy do sistema;
Capacidade de elasticidade que pode ser aumentada ou diminuída de acordo com a demanda.

● Desvantagens:


Identificação de fatores limitantes e gargalos nos recursos;
Custo inicial para reestruturar aplicações legadas;
Preocupação de que a arquitetura introduza problemas de manutenção.

Django Multi-Tenant
● Arquitetura de dados:

Banco de dados compartilhado com tabelas compartilhadas;

● Controle de acesso:

Funcionalidades de retrição de acesso.

● Customização do sistema:

Customização através da escolha do tema da interface do sistema.

● Funções auxiliares:

Adição de informações do tenant no request e o no contexto.

Django Multi-Tenant: Arquitetura de Dados

Tenant (Modelo que representa o tenant do sistema)

TenantModel (Modelo abstrato para proporcionar o compartilhamento de tabelas)

TenantModelManager (manager que filtra a consulta por tenant)

Django Multi-Tenant: Controle de Acesso

Belongs_to_tenant (função que verifica se um usuário pertence a um tenant)

TenantRequiredMixin (Classe para restringir o acesso às views do sistema)

Django Multi-Tenant: Customização

Theme (Modelo para registrar os temas do sistema)

Django Multi-Tenant: Funções Auxiliares

RequestContext (adicionam informações no contexto)

Middleware (adicionam informações no request)

Demonstração...

Demonstração: Items filtrados por tenant

Item (Modelo que representa o objeto Item do exemplo)
SimpleItemListView (View que lista os items filtrados pro tenant)

Demonstração: Restrição de Acesso

RestrictedItemListView (View para listagem de items com restrição de acesso)

Usuário

Tenant

user1

Tenant 1

user2

Tenant 1 e Tenant 2

user3

Tenant 2
Tabela de restrição de acesso do exemplo.

Demonstração: Escolha do Tema

ThemeUpdateView (View para atualização do tema)
TenantThemeForm (Formulário para atualização do tema)

Conclusão
● Benefícios ao utilizar a biblioteca multi-tenant:


Maior utilização de recursos;
Facilidade na manutanção;
Redução de custos.

● A biblioteca Django Multi-Tenant viabiliza o trabalho de desenvolvedores
Django ao implementar software sem gastar tempo e esforço para
implementar e garantir o funcionamento da arquitetura Multi-Tenant, focando
nas regras de negócio do sistema.

Trabalhos Futuros




Implementar a biblioteca proposta em outros frameworks;
Avaliar empiricamente a importância desta biblioteca para projetos Django;
Adicionar mais ferramentas de customização na biblioteca;
Disponibilizar outras arquiteturas de dados na biblioteca;
Disponibilizar a biblioteca de forma open source.

Obrigado!