You are on page 1of 28

Uma biblioteca Multi-Tenant

para o framework Django


Aluno: Jos de Arimatea Rocha Neto
Orientador: Vinicius Cardoso Garcia

Agenda

Motivao
Objetivos do Trabalho
Referencial Terico
Multi-Tenancy
Django Multi-Tenant
Demonstrao
Concluso
Trabalhos Futuros

Motivao
90% das empresas brasileiras de mdio porte tem algum tipo de aplicao em
Cloud Computing.
Fonte: Global Technology Adoption Index, 2014.

SaaS cresceu em 2014 cinco vezes mais rpido do que o mercado de software
tradicional.
Fonte: Worldwide SaaS and Cloud Software 20152019 Forecast and 2014 Vendor Shares.

Motivao
Python a quarta linguagem de programao 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 tcnicas de
implementao;
Estudo comparativo com outros trabalhos da rea;
Investigar e propor uma biblioteca Multi-Tenant para Django.

Referencial Terico: Computao em Nuvem


Computao em Nuvem um modelo que provm acesso conveniente e sobre
demanda a um conjunto de servios computacionais configurveis, que podem ser
rapidamente provisionados e lanados com o mnimo de esforo e interao com o
provedor (NIST, 2011).

Referencial Terico: Computao em Nuvem


Caractersticas Essenciais:

Alocao de recursos on-demand;


Amplo acesso rede;
Pooling de recursos;
Elasticidade rpida;
Medio do servio.

Referencial Terico: Computao em Nuvem


Modelos de Servio:
Software como um Servio (SaaS);
Plataforma como um Servio (PaaS);
Infraestrutura como um Servio (IaaS).

Referencial Terico: Computao em Nuvem


Modelos de Implantao:

Nuvem privada;
Nuvem comunitria;
Nuvem pblica;
Nuvem hbrida.

Referencial Terico: Software como um Servio


O modelo de servio SaaS provm ao consumidor a capacidade de usar a
aplicao do provedor localizada em uma infraestrutura de nuvem. As aplicaes
esto acessveis de vrias maneiras, como navegadores ou interface de sistemas
(NIST, 2011).

Referencial Terico: Software como um Servio

Multi-Tenancy: Definio
Multi-Tenancy um modelo organizacional de aplicaes SaaS que permite servir
mtiplos tenants (clientes) atravs de uma nica instncia da aplicao e do banco
de dados. Alm disso, possvel configurar essa aplicao para atender as
necessidades de cada tenant (Bezemer e Zaidman, 2010).

Multi-Tenancy: Arquiteturas Correlatas


Multi-Tenancy VS Multi-User

Grau de configurabilidade;
Diferenciao na interface e no fluxo no sistema;
SLA pode diferir para cada tenant.

Multi-Tenancy VS Multi-Instance

Multi-Instance pode simular Multi-Tenancy atravs de virtualizao;


Mtiplas instncias VS Instncia nica.

Multi-Tenancy: Caractersticas Chave


Compartilhamento de hardware:

Compartilhamento do servidor e do banco de dados por vrios tenants;

Compartilhamento da aplicao e do banco de dados:

Aplicao compartilhada, banco de dados separados;


Aplicao compartilhada, banco de dados compartilhado, tabelas separadas;
Aplicao compartilhada, banco de dados compartilhado, tabelas compartilhadas;

Alto nvel de configurabilidade

Multi-Tenancy: Gerenciamento de dados


BD Separado

Esquema Separado

Esquema Compartilhado

Multi-Tenancy: Vantagens VS Desvantagens


Vantagens:

Economia de custos relacionados infraestrutura;


Reduo dos custos de manuteno do sistema;
Facilidade de atualizao e deploy do sistema;
Capacidade de elasticidade que pode ser aumentada ou diminuda de acordo com a demanda.

Desvantagens:

Identificao de fatores limitantes e gargalos nos recursos;


Custo inicial para reestruturar aplicaes legadas;
Preocupao de que a arquitetura introduza problemas de manuteno.

Django Multi-Tenant
Arquitetura de dados:

Banco de dados compartilhado com tabelas compartilhadas;

Controle de acesso:

Funcionalidades de retrio de acesso.

Customizao do sistema:

Customizao atravs da escolha do tema da interface do sistema.

Funes auxiliares:

Adio de informaes 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 (funo que verifica se um usurio pertence a um tenant)

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

Django Multi-Tenant: Customizao

Theme (Modelo para registrar os temas do sistema)

Django Multi-Tenant: Funes Auxiliares

RequestContext (adicionam informaes no contexto)

Middleware (adicionam informaes no request)

Demonstrao...

Demonstrao: Items filtrados por tenant

Item (Modelo que representa o objeto Item do exemplo)


SimpleItemListView (View que lista os items filtrados pro tenant)

Demonstrao: Restrio de Acesso

RestrictedItemListView (View para listagem de items com restrio de acesso)

Usurio

Tenant

user1

Tenant 1

user2

Tenant 1 e Tenant 2

user3

Tenant 2
Tabela de restrio de acesso do exemplo.

Demonstrao: Escolha do Tema

ThemeUpdateView (View para atualizao do tema)


TenantThemeForm (Formulrio para atualizao do tema)

Concluso
Benefcios ao utilizar a biblioteca multi-tenant:

Maior utilizao de recursos;


Facilidade na manutano;
Reduo de custos.

A biblioteca Django Multi-Tenant viabiliza o trabalho de desenvolvedores


Django ao implementar software sem gastar tempo e esforo para
implementar e garantir o funcionamento da arquitetura Multi-Tenant, focando
nas regras de negcio do sistema.

Trabalhos Futuros

Implementar a biblioteca proposta em outros frameworks;


Avaliar empiricamente a importncia desta biblioteca para projetos Django;
Adicionar mais ferramentas de customizao na biblioteca;
Disponibilizar outras arquiteturas de dados na biblioteca;
Disponibilizar a biblioteca de forma open source.

Obrigado!