tcc - escalabilidade em aplicações web

Post on 25-May-2015

812 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

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

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

• 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

�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

�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

�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

!6

�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

�8

Modelo Cliente-Servidor

Modelo Cliente-Servidor de três camadas

�9

Operações I/O

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

�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

�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

�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

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

Programação Orientada a Eventos

�14

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

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

�15

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

de chamadas • Single Thread • Constante atualização

�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

�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

�18

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

�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

�20

MongoDB

• ObjectID • Sharding • GridFS

Collection 1 Collection 2 Collection 3

JSON JSON

JSON JSON

JSON JSON

JSON JSON

JSON JSON

JSON JSON

JSON JSON

JSON JSON

JSON JSON

Modelo Proposto

�23

Estrutura do modelo proposto

�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

Implementação

�26

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

(MongoDB) • Linguagem JavaScript • Node.js

�27

Aplicação 2

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

Modelagem Relacional

Modelo Entidade-Relacionamento

�28

�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

�30

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

Modelagem Não-Relacional

�31

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

Modelagem Não-Relacional

�32

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

Modelagem Não-Relacional

�33

Implementação em JavaScript

• Rotas • Modelos • Restify • Mongoose

�34Arquivo “app.js”

Implementação em JavaScript

�35

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

Implementação em JavaScript

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

�36

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

Implementação em JavaScript

Testes Realizados

�38

Testes

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

Resultados

�40

Resultados - Métrica 1

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

�41

Consulta de Dados - 10.000 requisições

Resultados - Métrica 1

�42

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

Resultados - Métrica 1

�43

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

Resultados - Métrica 2

�44

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

Resultados - Métrica 2

Conclusões

�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

Trabalho de Conclusão de Curso!Vagner José Santana • vagnervjs@gmail.com

Prof. Dr. Ronaldo Celso Messias Correia • ronaldo@fct.unesp.br

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!

top related