1. 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
Trabalho de Conclusão de Curso!
Vagner José Santana
Prof. Dr. Ronaldo Celso Messias Correia
Disponível em vagnersantana.com/tcc
2. Agenda
•
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
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
3
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
4
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-195X, pagina 195 - 203
5
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
7
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
10
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
11
12. Programação Orientada a Eventos
• Evento:
maneira de indicar que algo
aconteceu
• Permite
criar fluxos assíncronos
• Request
• Event
/ Response
Producer / Event Consumer
• Callbacks
12
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
16
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
17
18. MongoDB
•
Desenvolvido em linguagem C++
•
Alta Performance
•
Integração com a linguagem JavaScript
•
Schema baseado em coleções
•
Coleções armazenam Documentos
18
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
19
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
24
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
29
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
46
47. Obrigado!
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
Trabalho de Conclusão de Curso!
Vagner José Santana • vagnervjs@gmail.com
Prof. Dr. Ronaldo Celso Messias Correia • ronaldo@fct.unesp.br