TCC - Escalabilidade em Aplicações Web

1,520 views
1,285 views

Published on

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

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,520
On SlideShare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
30
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

TCC - Escalabilidade em Aplicações Web

  1. 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. 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. 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. 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. 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
  6. 6. !6
  7. 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
  8. 8. Modelo Cliente-Servidor Modelo Cliente-Servidor de três camadas 8
  9. 9. Operações I/O • I/O Bloqueante • I/O Não-Bloqueante • Polling / Async 9
  10. 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. 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. 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
  13. 13. Programação Orientada a Eventos Exemplo do fluxo de execução de uma aplicação assíncrona 13
  14. 14. Node.js • JavaScript Server Side • Async • Event-Driven I/O • Non-blocking • V8 Engine (Google Chrome) • C libev / libeio Arquitetura do Node.js 14
  15. 15. Node.js • Módulos • Não existe garantia da ordem de execução de chamadas • Single Thread • Constante atualização 15
  16. 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. 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. 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. 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
  20. 20. MongoDB • ObjectID • Sharding • GridFS 20
  21. 21. Collection 1 Collection 2 Collection 3 JSON JSON JSON JSON JSON JSON JSON JSON JSON JSON JSON JSON JSON JSON JSON JSON JSON JSON
  22. 22. Modelo Proposto
  23. 23. Estrutura do modelo proposto 23
  24. 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
  25. 25. Implementação
  26. 26. Aplicação 1 • Modelo proposto • Banco de Dados Não-Relacional (MongoDB) • Linguagem JavaScript • Node.js 26
  27. 27. Aplicação 2 • Modelo básico • Banco de Dados Relacional (MySQL) • Linguagem PHP • Apache HTTP Server 27
  28. 28. Modelagem Relacional Modelo Entidade-Relacionamento 28
  29. 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
  30. 30. Modelagem Não-Relacional Estrutura de um documento da coleção "cursos" 30
  31. 31. Modelagem Não-Relacional Estrutura de um documento da coleção "alunos" 31
  32. 32. Modelagem Não-Relacional Estrutura de um documento da coleção "materiais" 32
  33. 33. Implementação em JavaScript • Rotas • Modelos • Restify • Mongoose 33
  34. 34. Implementação em JavaScript Arquivo “app.js” 34
  35. 35. Implementação em JavaScript Definição de rota em “routes/aluno.js" Definição da estrutura de um documento em um modelo 35
  36. 36. Implementação em JavaScript Definição de um método em um modelo 36
  37. 37. Testes Realizados
  38. 38. Testes • Métrica 1: Requisições Sequenciais • Métrica 2: Requisições Concorrentes 38
  39. 39. Resultados
  40. 40. Resultados - Métrica 1 Inserção de Dados - 10.000 requisições 40
  41. 41. Resultados - Métrica 1 Consulta de Dados - 10.000 requisições 41
  42. 42. Resultados - Métrica 1 Atualização de Dados - 10.000 requisições 42
  43. 43. Resultados - Métrica 2 Consulta de Dados - 10.000 requisições / 100 concorrentes 43
  44. 44. Resultados - Métrica 2 Atualização de Dados - 10.000 requisições / 100 concorrentes 44
  45. 45. Conclusões
  46. 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. 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

×