arquiteturas híbridas de atendimento em cloud computing para otimizar o uso de recursos (node.js)
TRANSCRIPT
1
2
Arquiteturas híbridas de atendimento em Cloud Computing para otimizar o uso de
recursos (Node.js)
Thiago Henrique de Oliveira
3
Introdução
“A Nuvem,além da Infraestrutura.“
(Rodrigo Gazzaneo)
4
Introdução
Qual Sistema
Gerenciador de
Banco de
Dados utilizar?
Qual Linguagemutilizar?
5
Introdução
tudo fica mais simples!
Quando podemos
prever a quantidade de acessos...
6
Introdução
Mas... e quando esse número não é preciso?
7
Use Case
Que tal conhecermos o “use case” dessa palestra...
Pizzaria?
Taxi?
Petshop?
Cinemas?
Sistema de monitoramento?
Farmácia?
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.
9
Use Case
1º) Atendimento médico;2º) Prescrição médica;3º) Onde localizar o medicamento?
10
Use Case
Através de um serviço online de consulta, o sistema indica qual unidade possui os medicamentos da prescrição.
100%
75%
75%
75%
50%
50%25%
0%
0%
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?
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!
13
Simulando o problema(resultados obtidos)
Em “testes de stress”, foi obtido os seguintes resultados:
Document Path: /CloudConf/homol_php.phpDocument Length: 0 bytes
Concurrency Level: 200Time taken for tests: 298.898 secondsComplete requests: 10000Failed requests: 0Write errors: 0Total transferred: 2110000 bytesHTML 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
14
O que fazemos agora?
Como melhorar essa estatística?
Escalabilidade vertical?
Ou, escalabilidade horizontal?
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.
16
E quem faz esse trabalho para nós?
(http://www.nodejs.org)
17
O que é ?
Resumidamente, essa tecnologia nos permite:
● Alta escalabilidade da aplicação desenvolvida;
● Desenvolvimento server-side em javascript.
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.
19
Chega de teoria, e vamos para prática?
20
O em ação
webservice_node.php?id=12
JSON(ou xml)
21
Performance da nossa nova arquitetura
Fazendo uso do node.js, obtemos a seguinte estatística:
Document Path: /CloudConf/homol_node.phpDocument Length: 0 bytes
Concurrency Level: 200
Time taken for tests: 60.513 seconds
Complete requests: 10000Failed requests: 0Write errors: 0Total transferred: 2110000 bytesHTML 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
22
Comparação das duas soluçõesApache/PHP5 vs Node.js
Document Path: /CloudConf/homol_node.phpDocument Length: 0 bytes
Concurrency Level: 200
Time taken for tests: 60.513 seconds
Complete requests: 10000Failed requests: 0Write errors: 0Total transferred: 2110000 bytesHTML 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
Document Path: /CloudConf/homol_php.phpDocument Length: 0 bytes
Concurrency Level: 200
Time taken for tests: 298.898 seconds
Complete requests: 10000Failed requests: 0Write errors: 0Total transferred: 2110000 bytesHTML 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
~5 min 1min→
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.
24
Até onde vai o poder do ?
As requisições não param de crescer?
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.
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.