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
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
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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
• 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
�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
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]