Upload
vagner-santana
View
815
Download
2
Embed Size (px)
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
Citation preview
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 • [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!