You are on page 1of 70
Uma biblioteca Multi-Tenant para o framework Django por Jose´ de Arimatea Rocha Neto Trabalho de

Uma biblioteca Multi-Tenant para o framework Django por Jose´ de Arimatea Rocha Neto Trabalho de Graduac¸ ao˜

por Jose´ de Arimatea Rocha Neto Trabalho de Graduac¸ ao˜ UNIVERSIDADE FEDERAL DE PERNAMBUCO ´ CIN

UNIVERSIDADE FEDERAL DE PERNAMBUCO

´

CIN - CENTRO DE INFORM ATICA

˜

ˆ

˜

GRADUAC¸ AO EM CI ENCIA DA COMPUTAC¸ AO

www.cin.ufpe.br

RECIFE, JULHO DE 2016

UNIVERSIDADE FEDERAL DE PERNAMBUCO ´ CIN - CENTRO DE INFORM ATICA ˜ ˆ ˜ GRADUAC¸
UNIVERSIDADE FEDERAL DE PERNAMBUCO ´ CIN - CENTRO DE INFORM ATICA ˜ ˆ ˜ GRADUAC¸

UNIVERSIDADE FEDERAL DE PERNAMBUCO

´

CIN - CENTRO DE INFORM ATICA

˜

ˆ

˜

GRADUAC¸ AO EM CI ENCIA DA COMPUTAC¸ AO

Jose´ de Arimatea Rocha Neto

UMA BIBLIOTECA MULTI-TENANT PARA O FRAMEWORK DJANGO

Projeto de Graduac¸ao˜ apresentado no Cen-

tro de Informatica´ da Universidade Federal

de Pernambuco, como requisito parcial para

a obtenc¸ao˜ do grau de Bacharel em Cienciaˆ

da Computac¸ao.˜

Orientador: Vin´ıcius Cardoso Garcia

RECIFE, JULHO DE 2016

“A menos que modifiquemos a nossa maneira de pensar, nao˜ seremos capazes de resolver os problemas causados pela forma como nos acostumamos a ver o mundo”.

Albert Einstein

Agradecimentos

Agradec¸o a` minha fam´ılia pelo amor, dedicac¸ao˜

e paciencia.ˆ

Agradec¸o a` minha noiva Priscila por sempre estar ao meu lado me apoiando em todos os momentos.

Agradec¸o aos meus amigos pelo incentivo e apoio durante toda a graduac¸ao.˜

Agradec¸o ao meu orientador Vin´ıcius Garcia pela sua disponibilidade e por todo o apoio fornecido.

Agradec¸o a todos os professores do CIn por todo o conhecimento e dedicac¸ao˜ durante o curso.

fornecidos

Resumo

Nos ultimos´ anos o modelo de entrega de software como servic¸o, ou Software as a Ser- vice (SaaS), surgiu trazendo softwares mais flex´ıveis e reutilizaveis.´ Este modelo proveˆ suporte a diversos usuarios´ sobre uma mesma infra-estrutura configuravel,´ oferecendo funcionalidades sob demanda. Multi-Tenancy, ou multi-inquilino, e´ uma abordagem orga- nizacional do modelo SaaS. Caracter´ısticas de uma arquitetura multi-tenant sao:˜ com- partilhamento de recursos de hardware, alto grau de configurabilidade e bancos de dados compartilhados. Alguns benef´ıcios da utilizac¸ao˜ desta arquitetura sao:˜ maior utilizac¸ao˜ dos recursos de hardware, manutenc¸ao˜ da aplicac¸ao˜ facilitada e mais barata e reduc¸ao˜ nos custos globais do sistema. Tomando como base as caracter´ısticas desta arquitetura, esta pesquisa propoe˜ uma biblioteca open source para transformar projetos Django em um projeto multi-tenant, com o intuito de facilitar seu desenvolvimento. Assim, os desen- volvedores podem focar seus esforc¸os na regra de negocio´ e nao˜ com a arquitetura, ja´ implementada pela biblioteca.

Palavras-chave: Multi-Tenancy, Multi-Tenant, Software as a Service, open source, Ar- quitetura de software, Django.

i

Abstract

In recent years the Software as a Service (SaaS) model came bringing more flexible and reusable software. This model provides support for multiple users on the same configu- rable infrastructure by offering features on demand. Multi-Tenancy is an organizational approach of Software as a Service (SaaS). Some characteristics of a multi-tenant archi- tecture are: the capability to share hardware and database resources and a high degree of configurability. Additionally, the use of this architecture brings benefits. Some of them are: better use of hardware resources, simpler and cheaper application maintenance and reduction of the system global costs. Based on the architectural characteristics, this paper proposes an open source library that facilitates the development of multi-tenant projects on Django framework. Thus, the developers can focus on the business rules and less on the architecture that is already implemented by the library.

Keywords: Multi-Tenancy, Multi-Tenant, Software as a Service, Open Source, Software Architecture, Django.

iii

Sumario´

1 Introduc¸ ao˜

 

1

1.1 Motivac¸ao˜

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

1

1.2 Objetivos

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

3

 

1.2.1 Objetivos Gerais

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

3

1.2.2 Objetivos Espec´ıficos

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

3

1.3 Organizac¸ao˜

do Trabalho

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

3

2 Referencial Teorico´

 

5

2.1 Computac¸ao˜

em Nuvem .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

5

 

2.1.1 Caracter´ısticas Essenciais

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

9

2.1.2 Modelos de Servic¸o

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

10

2.1.3 Modelos de Implantac¸ao˜

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

10

2.2 Software como um Servic¸o (SaaS)

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

11

2.3

Django .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

13

2.3.1

Arquitetura do Framework .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

14

2.4

Considerac¸oes˜

Finais

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

15

3 Multi-Tenancy

 

17

v

 

3.1 Arquiteturas Correlatas

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

18

3.1.1 Multi-Tenancy X Multi-User

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

18

3.1.2 Multi-Tenancy X Multi-Instance

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

19

3.2 Caracter´ısticas Chave

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

19

3.2.1 Compartilhamento de Hardware

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

19

3.2.2 Alto N´ıvel de Configurabilidade

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

20

3.2.3 Compartilhamento da Aplicac¸ao˜

e do Banco de Dados .

.

.

.

.

.

.

.

21

3.3 Principais Desafios .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

25

3.3.1 Desempenho

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

25

3.3.2 Escalabilidade

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

25

3.3.3 Seguranc¸a

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

26

3.3.4 Manutenc¸ao˜

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

26

3.3.5 Disponibilidade 24/7

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

26

3.4 Vantagens X Desvantagens .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

27

3.4.1 Vantagens

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

27

3.4.2 Desvantagens

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

28

3.5 Considerac¸oes˜

Finais

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

28

4

Trabalhos Correlatos

 

29

4.1 Bancos de Dados

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

29

4.2 Customizac¸ao˜

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

30

4.3 Autenticac¸ao˜

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

30

4.4 Considerac¸noes Finais .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

31

vi

5

A Biblioteca: Django Multi-Tenant

32

5.1 Arquitetura de Dados

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

33

5.2 Customizac¸ao˜

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

34

5.3 Controle de Acesso

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

35

5.4 Funcionalidades Auxiliares

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

36

5.4.1 Middlewares

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

36

5.4.2 Context Processors

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

37

5.5 Considerac¸oes˜

Finais

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

38

6 Um exemplo de uso da biblioteca

 

39

6.1 Nome do subdom´ınio e Tenant injetados no objeto Request e no Contexto .

 

40

6.2 Itens filtrados por Tenant sem restric¸ao˜

de acesso

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

41

6.3 Itens filtrados por Tenant com restric¸ao˜

de acesso

.

.

.

.

.

.

.

.

.

.

.

.

.

.

42

6.4 Func¸ao˜

de login com checagem de Tenant

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

43

6.5 Customizac¸ao˜

de tema por Tenant

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

45

7 Conclusao˜

e trabalhos futuros

 

46

 

vii

 

Lista de Tabelas

2.1

Definic¸oes˜

de Cloud Computing. Adaptada de [29]

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

9

6.1

Tabela de controle de

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

42

viii

Lista de Figuras

2.1

Network Cloud [33] .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

6

2.2

Crescimento do Amazon S3 [15]

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

11

2.3

N´ıveis de maturidade SaaS. Chong e Carraro

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

13

2.4

Modelo Arquitetural do Django [14].

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

15

3.1

Abordagens para o gerenciamento de dados com Multi-Tenancy

 

21

3.2

Abordagem utilizando bancos de dados separados. Adaptado de Chong [5]. 22

3.3

Abordagem utilizando um unico´

 

3.4

dos. Adaptado de Chong [5].

.

banco de dados, com esquemas separa- .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Abordagem utilizando um unico´ conjunto de tabelas e um ID para associar cada inquilino a seus registros. Adaptado de Chong

.

23

24

5.1

Modelo Tenant.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

33

5.2

Modelo TenantModel.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

33

5.3

TenantModelManager.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

34

5.4

Theme.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

34

5.5

Classe Belongs to tenant.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

35

5.6

TenantRequiredMixin.

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

36

5.7

Middlewares.

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

37

 

ix

 

5.8

Context Processors.

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

38

6.1

Acesso sem tenant.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

40

6.2

Acesso com tenant.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

40

6.3

ItemModel.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

41

6.4

Listagem sem subdom´ınio.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

41

6.5

Listagem Tenant

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

42

6.6

Listagem Tenant

.

.

.

.

.

.

.

.

.