1) O documento discute arquiteturas híbridas de nuvem para otimizar o uso de recursos usando Node.js.
2) Node.js permite alta escalabilidade e desenvolvimento backend em JavaScript, funcionando com event loop para aguardar entrada de dados antes de processar.
3) Testes mostraram que Node.js teve ganho de performance de 80% sobre PHP ao lidar com grande volume de requisições simultâneas, reduzindo tempo de resposta de quase 6 minutos para 1 minuto.
7. Use Case
Que tal conhecermos o “use case” dessa palestra...
Petshop?
Pizzaria?
Farmácia?
Cinemas?
Sistema de monitoramento? Taxi?
7
8. Use Case
Baseando-se em um projeto real em fase de
desenvolvimento pela 4Linux.
Foi criado um protótipo especialmente para o CloudConf,
seguindo os pré-requisitos do projeto e os testes de
homologação que foram realizados.
Por questões de confidencialidade, o nome da empresa e os
detalhes do projeto não podem ser divulgados.
8
10. Use Case
Através de um serviço online de consulta,
o sistema indica qual unidade possui os
medicamentos da prescrição.
0% 75%
100%
75% 50%
75%
25% 50%
0%
10
11. O problema a ser solucionado
Temos nosso ambiente
determinado
A linguagem é
o menor dos problemas!
Mas, e a capacidade de
processamento de
requisições simultâneas?
11
12. Entendendo o problema
webservice_rest.php?id=12
JSON
● Para cada requisição:
● Uma thread é criada (~ 2Mb de RAM);
● Com 5.000 requisições simultâneas,
seria necessário 10Gb de RAM.
● Agravante, as requisições são bloqueantes!
12
13. Simulando o problema
(resultados obtidos)
Em “testes de stress”, foi obtido os seguintes resultados:
Document Path: /CloudConf/homol_php.php
Document Length: 0 bytes
Concurrency Level: 200
Time taken for tests: 298.898 seconds
Complete requests: 10000
Failed requests: 0
Write errors: 0
Total transferred: 2110000 bytes
HTML transferred: 0 bytes
Requests per second: 33.46 [#/sec] (mean)
Time per request: 5977.967 [ms] (mean)
Time per request: 29.890 [ms]
(mean, across all concurrent requests)
Transfer rate: 6.89 [Kbytes/sec] received
13
14. O que fazemos agora?
Como melhorar essa estatística?
Escalabilidade vertical?
Ou, escalabilidade horizontal?
14
15. Que tal um novo paradigma?
E se passarmos a pensar de uma nova forma?
●
E/S não bloqueantes;
●
Single thread;
●
E/S assincronas.
15
16. E quem faz esse trabalho para nós?
(http://www.nodejs.org)
16
17. O que é ?
Resumidamente, essa tecnologia nos permite:
●
Alta escalabilidade da aplicação desenvolvida;
●
Desenvolvimento server-side em javascript.
17
18. Como o foi construído?
O Node.js, foi desenvolvido utilizando:
●
C/C++ e Javascript;
●
Funciona baseado em “Event Loop”, ou seja, a aplicação se
mantém em espera, aguardando a entrada de dados para ai
sim, realizar um processamento.
18
20. O em ação
webservice_node.php?id=12
JSON
(ou xml)
20
21. Performance da nossa nova arquitetura
Fazendo uso do node.js, obtemos a seguinte estatística:
Document Path: /CloudConf/homol_node.php
Document Length: 0 bytes
Concurrency Level: 200
Time taken for tests: 60.513 seconds
Complete requests: 10000
Failed requests: 0
Write errors: 0
Total transferred: 2110000 bytes
HTML transferred: 0 bytes
Requests per second: 165.25 [#/sec] (mean)
Time per request: 1210.269 [ms] (mean)
Time per request: 6.051 [ms]
(mean, across all concurrent requests)
Transfer rate: 34.05 [Kbytes/sec] received
21
22. Comparação das duas soluções
Apache/PHP5 vs Node.js
Document Path: /CloudConf/homol_php.php Document Path: /CloudConf/homol_node.php
Document Length: 0 bytes Document Length: 0 bytes
Concurrency Level: 200 Concurrency Level: 200
~5 min → 1min
Time taken for tests: 298.898 seconds Time taken for tests: 60.513 seconds
Complete requests: 10000 Complete requests: 10000
Failed requests: 0 Failed requests: 0
Write errors: 0 Write errors: 0
Total transferred: 2110000 bytes Total transferred: 2110000 bytes
HTML transferred: 0 bytes HTML transferred: 0 bytes
Requests per second: 33.46 [#/sec] (mean) Requests per second: 165.25 [#/sec] (mean)
Time per request: 5977.967 [ms] (mean) Time per request: 1210.269 [ms] (mean)
Time per request: 29.890 [ms] Time per request: 6.051 [ms]
(mean, across all concurrent requests) (mean, across all concurrent requests)
Transfer rate: 6.89 [Kbytes/sec] received Transfer rate: 34.05 [Kbytes/sec] received
22
23. No que aplicar o
Podemos desenvolver pequenos módulos de fácil
manutenção em node.js para necessidades
específicas, principalmente aquelas que tratam grandes
números de requisições.
23
24. Até onde vai o poder do ?
As requisições não param de crescer?
24
25. Tranquilize-se
O node.js está preparado para isso...
Ele possui extensões que permitem o desenvolvimento
de aplicações em Cluster, dividindo a execução dos
seus processos entre as CPU's disponíveis, de forma simples
e automática.
25
26. Conclusão
O Node.js, apesar de ser um paradigma recém-criado, com menos
de 5 anos de existência, vem demonstrando ser um modelo de
desenvolvimento extremamente funcional, e de simples
utilização.
Apesar das simulações não terem sido realizadas em um
“supercomputador”, mas sim, em um servidor de médio porte, os
resultados foram muito animadores:
80% em ganho de performance!
Este ganho de performance, que é comprovado, tem chamado
atenção do nosso mercado, e, já estamos trabalhando com essa
nova demanda.
26