tcc - escalabilidade em aplicações web

47
Trabalho de Conclusão de Curso Vagner José Santana Prof. Dr. Ronaldo Celso Messias Correia Escalabilidade em Aplicações Web Utilizando Banco de Dados Não-Relacional e Programação Orientada a Eventos na Camada Server-Side com Node.JS Disponível em vagnersantana.com/tcc

Upload: vagner-santana

Post on 25-May-2015

812 views

Category:

Technology


2 download

DESCRIPTION

Escalabilidade em Aplicações Web Utilizando Banco de Dados Não-Relacional e Programação Orientada a Eventos na Camada Server-Side com Node.JS

TRANSCRIPT

Page 1: TCC - Escalabilidade em Aplicações Web

Trabalho de Conclusão de Curso!Vagner José Santana

Prof. Dr. Ronaldo Celso Messias Correia

Escalabilidade em Aplicações Web Utilizando Banco de Dados Não-Relacional e

Programação Orientada a Eventos na Camada Server-Side com Node.JS

Disponível em vagnersantana.com/tcc

Page 2: TCC - Escalabilidade em Aplicações Web

• Formulação do Problema e Motivação • Objetivos • Escalabilidade • Modelo Cliente-Servidor • Programação Orientada a Eventos e Node.js • Bancos de Dados Não-Relacionais e MongoDB • Modelo Proposto • Estudo de Caso • Implementação • Testes e Resultados • Conclusões

�2

Agenda

Page 3: TCC - Escalabilidade em Aplicações Web

�3

Formulação do Problema e Motivação

• Aumento de usuários e dispositivos conectados à Internet

• Estrutura escaláveis: vertical e horizontal

• Modelo atual possui limitações

• Repensar o desenvolvimento de aplicações web

Page 4: TCC - Escalabilidade em Aplicações Web

�4

Objetivos• Desenvolvimento de uma aplicação utilizando

orientação a eventos em Node.js • Utilização do banco de dados não-relacional

MongoDB. • Desenvolvimento de uma aplicação com propósito

de comparação • Realização de testes • Análise dos resultados obtidos

Page 5: TCC - Escalabilidade em Aplicações Web

�5

Escalabilidade

“Escalabilidade é uma característica desejável em todo o sistema, em uma rede ou em um processo, que

indica sua habilidade de manipular uma porção crescente de trabalho de forma uniforme, ou estar

preparado para crescer.” André B. Bondi, 'Characteristics of scalability and their impact on performance', Proceedings of the 2nd

international workshop on Software and performance, Ottawa, Ontário, Canadá, 2000, ISBN 1-58113-195-X, pagina 195 - 203

Page 6: TCC - Escalabilidade em Aplicações Web

!6

Page 7: TCC - Escalabilidade em Aplicações Web

�7

Modelo Cliente-Servidor• Dividir em camadas as partes que interagem com

um aplicação • Protocolo TCP/IP • Software web server • Requisições HTTP • Apache HTTP Server • I/O

Page 8: TCC - Escalabilidade em Aplicações Web

�8

Modelo Cliente-Servidor

Modelo Cliente-Servidor de três camadas

Page 9: TCC - Escalabilidade em Aplicações Web

�9

Operações I/O

• I/O Bloqueante • I/O Não-Bloqueante • Polling / Async

Page 10: TCC - Escalabilidade em Aplicações Web

�10

C10K Problem• Dan Kegel, 1999 • Servidores suportam no máximo 10

mil conexões simultâneas • Hardware não é o único problema • Concorrência utilizando threads

Page 11: TCC - Escalabilidade em Aplicações Web

�11

Programação Orientada a Eventos• Paradigma: maneira como uma linguagem

estrutura seu fluxo

• Fluxo de controle guiado por sinais externos

• Normalmente utilizada no desenvolvimento de interfaces de usuário

• Aguarda pelo disparo de um evento

Page 12: TCC - Escalabilidade em Aplicações Web

�12

Programação Orientada a Eventos• Evento: maneira de indicar que algo

aconteceu • Permite criar fluxos assíncronos • Request / Response • Event Producer / Event Consumer • Callbacks

Page 13: TCC - Escalabilidade em Aplicações Web

�13Exemplo do fluxo de execução de uma aplicação assíncrona

Programação Orientada a Eventos

Page 14: TCC - Escalabilidade em Aplicações Web

�14

Node.js• JavaScript Server Side • Async • Event-Driven I/O • Non-blocking • V8 Engine (Google

Chrome) • C libev / libeio Arquitetura do Node.js

Page 15: TCC - Escalabilidade em Aplicações Web

�15

Node.js• Módulos • Não existe garantia da ordem de execução

de chamadas • Single Thread • Constante atualização

Page 16: TCC - Escalabilidade em Aplicações Web

�16

Bancos de Dados Não-Relacionais• Suprir as limitações presentes no modelo relacional • Grande volumes de dados • Foco em escalabilidade e performance • Multiplas vertentes e bancos de dados

desenvolvidos • Modelagem Flexível • Acesso via APIs simples

Page 17: TCC - Escalabilidade em Aplicações Web

�17

Bancos de Dados Não-Relacionais• Eventual Consistency • Ausência de ACID • BASE: Disponibilidade, Estado Leve e

Consistência em Momento Indeterminado • Prioriza escalabilidade e disponibilidade • Menor tempo de resposta em consultas • Maior grau de concorrência

Page 18: TCC - Escalabilidade em Aplicações Web

�18

MongoDB• Desenvolvido em linguagem C++ • Alta Performance • Integração com a linguagem JavaScript • Schema baseado em coleções • Coleções armazenam Documentos

Page 19: TCC - Escalabilidade em Aplicações Web

�19

MongoDB• Documentos são baseado no conjunto de

chaves e valores • Formato JSON (JavaScript Object Notation) • Ausência de tabelas adicionais para

armazenar relações • Documentos podem ter diferentes

estruturas

Page 20: TCC - Escalabilidade em Aplicações Web

�20

MongoDB

• ObjectID • Sharding • GridFS

Page 21: TCC - Escalabilidade em Aplicações Web

Collection 1 Collection 2 Collection 3

JSON JSON

JSON JSON

JSON JSON

JSON JSON

JSON JSON

JSON JSON

JSON JSON

JSON JSON

JSON JSON

Page 22: TCC - Escalabilidade em Aplicações Web

Modelo Proposto

Page 23: TCC - Escalabilidade em Aplicações Web

�23

Estrutura do modelo proposto

Page 24: TCC - Escalabilidade em Aplicações Web

�24

Estudo de Caso• Validar a proposta • Módulo de um sistema acadêmico • Foco em disponibilização de materiais • Professores, Alunos, Turmas, Disciplinas,

Cursos, Materiais

Page 25: TCC - Escalabilidade em Aplicações Web

Implementação

Page 26: TCC - Escalabilidade em Aplicações Web

�26

Aplicação 1• Modelo proposto • Banco de Dados Não-Relacional

(MongoDB) • Linguagem JavaScript • Node.js

Page 27: TCC - Escalabilidade em Aplicações Web

�27

Aplicação 2

• Modelo básico • Banco de Dados Relacional (MySQL) • Linguagem PHP • Apache HTTP Server

Page 28: TCC - Escalabilidade em Aplicações Web

Modelagem Relacional

Modelo Entidade-Relacionamento

�28

Page 29: TCC - Escalabilidade em Aplicações Web

�29

Modelagem Não-Relacional

• Análise do estudo de caso • Ausência de normalização • Elementos chaves serão Coleções • Documentos armazenam Documentos

Page 30: TCC - Escalabilidade em Aplicações Web

�30

Estrutura de um documento da coleção "cursos"

Modelagem Não-Relacional

Page 31: TCC - Escalabilidade em Aplicações Web

�31

Estrutura de um documento da coleção "alunos"

Modelagem Não-Relacional

Page 32: TCC - Escalabilidade em Aplicações Web

�32

Estrutura de um documento da coleção "materiais"

Modelagem Não-Relacional

Page 33: TCC - Escalabilidade em Aplicações Web

�33

Implementação em JavaScript

• Rotas • Modelos • Restify • Mongoose

Page 34: TCC - Escalabilidade em Aplicações Web

�34Arquivo “app.js”

Implementação em JavaScript

Page 35: TCC - Escalabilidade em Aplicações Web

�35

Definição de rota em “routes/aluno.js"

Implementação em JavaScript

Definição da estrutura de um documento em um modelo

Page 36: TCC - Escalabilidade em Aplicações Web

�36

Definição de um método em um modelo

Implementação em JavaScript

Page 37: TCC - Escalabilidade em Aplicações Web

Testes Realizados

Page 38: TCC - Escalabilidade em Aplicações Web

�38

Testes

• Métrica 1: Requisições Sequenciais • Métrica 2: Requisições Concorrentes

Page 39: TCC - Escalabilidade em Aplicações Web

Resultados

Page 40: TCC - Escalabilidade em Aplicações Web

�40

Resultados - Métrica 1

Inserção de Dados - 10.000 requisições

Page 41: TCC - Escalabilidade em Aplicações Web

�41

Consulta de Dados - 10.000 requisições

Resultados - Métrica 1

Page 42: TCC - Escalabilidade em Aplicações Web

�42

Atualização de Dados - 10.000 requisições

Resultados - Métrica 1

Page 43: TCC - Escalabilidade em Aplicações Web

�43

Consulta de Dados - 10.000 requisições / 100 concorrentes

Resultados - Métrica 2

Page 44: TCC - Escalabilidade em Aplicações Web

�44

Atualização de Dados - 10.000 requisições / 100 concorrentes

Resultados - Métrica 2

Page 45: TCC - Escalabilidade em Aplicações Web

Conclusões

Page 46: TCC - Escalabilidade em Aplicações Web

�46

Conclusões• Desenvolvimento em Node.js pode ser feito de

maneira simples, modular e projetável • Operações não-bloqueantes obtiveram desempenho

superior (de seis a oito vezes) ao modelo bloqueante • Node.js pode ser usado em produção (ex. PayPal) • Flexibilidade do modelo não-relacional • Busca em MongoDB tempo de resposta alto • Trabalhos futuros: utilização de Sharding e

clusterização do Node.js

Page 47: TCC - Escalabilidade em Aplicações Web

Trabalho de Conclusão de Curso!Vagner José Santana • [email protected]

Prof. Dr. Ronaldo Celso Messias Correia • [email protected]

Escalabilidade em Aplicações Web Utilizando Banco de Dados Não-Relacional e

Programação Orientada a Eventos na Camada Server-Side com Node.JS

Obrigado!