SlideShare uma empresa Scribd logo
1 de 27
Baixar para ler offline
1
Arquiteturas híbridas de atendimento em
 Cloud Computing para otimizar o uso de
           recursos (Node.js)
          Thiago Henrique de Oliveira




                                          2
Introdução




                Nuvem,
                 “A
além da Infraestrutura.“
                      (Rodrigo Gazzaneo)




                                           3
Introdução


         Qual   Sistema
                Gerenciador de
                Banco de
                Dados utilizar?



Qual   Linguagem
         utilizar?



                                  4
Introdução

Quando podemos
prever a quantidade de acessos...




                         tudo fica   mais simples!

                                                     5
Introdução


Mas... e quando esse número não é preciso?




                                             6
Use Case



Que tal conhecermos o “use case” dessa palestra...
                                                       Petshop?
      Pizzaria?



                                           Farmácia?
             Cinemas?



  Sistema de monitoramento?                      Taxi?




                                                                  7
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
Use Case

1º) Atendimento médico;
2º) Prescrição médica;
3º) Onde localizar o medicamento?




                                    9
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
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
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
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
O que fazemos agora?




Como melhorar essa estatística?

     Escalabilidade vertical?



     Ou, escalabilidade horizontal?




                                      14
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
E quem faz esse trabalho para nós?




         (http://www.nodejs.org)




                                     16
O que é                      ?



Resumidamente, essa tecnologia nos permite:

●
    Alta escalabilidade da aplicação desenvolvida;

●
    Desenvolvimento server-side em javascript.




                                                     17
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
Chega de teoria, e vamos para prática?




                                         19
O                               em ação

    webservice_node.php?id=12




             JSON
            (ou xml)




                                          20
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
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
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
Até onde vai o poder do               ?




As requisições não param de   crescer?




                                             24
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
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
Obrigado




Thiago Henrique de Oliveira
thiago.oliveira@4linux.com.br


          @4LinuxBR

           /4linux




                                27

Mais conteúdo relacionado

Semelhante a Arquiteturas híbridas de atendimento em Cloud Computing para otimizar o uso de recursos (Node.js)

TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on AzureTDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azuretdc-globalcode
 
Light Talk: Introdução sobre Node.js
Light Talk: Introdução sobre Node.jsLight Talk: Introdução sobre Node.js
Light Talk: Introdução sobre Node.jsCaio Ribeiro Pereira
 
Matando web forms e modernizando um grande varejista
Matando web forms e modernizando um grande varejistaMatando web forms e modernizando um grande varejista
Matando web forms e modernizando um grande varejistaJosé Roberto Araújo
 
Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)
Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)
Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)Tiago Marchetti Dolphine
 
Planejamento de capacidade em ambiente virtualizado, por Bruno Domingues
Planejamento de capacidade em ambiente virtualizado, por Bruno DominguesPlanejamento de capacidade em ambiente virtualizado, por Bruno Domingues
Planejamento de capacidade em ambiente virtualizado, por Bruno DominguesJoao Galdino Mello de Souza
 
Como criar infraestrutura de sites para receber milhões de usuários?
Como criar infraestrutura de sites para receber milhões de usuários?Como criar infraestrutura de sites para receber milhões de usuários?
Como criar infraestrutura de sites para receber milhões de usuários?Marcelo Dieder
 
HTTP, Requisição e Resposta
HTTP, Requisição e RespostaHTTP, Requisição e Resposta
HTTP, Requisição e RespostaThiago Rondon
 
Integração com webservices usando MVC e mágica
Integração com webservices usando MVC e mágicaIntegração com webservices usando MVC e mágica
Integração com webservices usando MVC e mágicaLeocadio Tiné
 
ExpressoBR para Um Milhão (de Usuários)
ExpressoBR para Um Milhão (de Usuários)ExpressoBR para Um Milhão (de Usuários)
ExpressoBR para Um Milhão (de Usuários)Flávio Lisboa
 
Conhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkConhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkMario Guedes
 
TDC - Qual o tamanho adequado de um micro serviço?
TDC - Qual o tamanho adequado de um micro serviço?TDC - Qual o tamanho adequado de um micro serviço?
TDC - Qual o tamanho adequado de um micro serviço?Rafael Salerno de Oliveira
 
Introdução a Microservices com Node.JS
Introdução  a Microservices com Node.JSIntrodução  a Microservices com Node.JS
Introdução a Microservices com Node.JSEduardo Nunes Pereira
 
Tdc 2013 eric lemes - integracoes entre sistemas-2
Tdc 2013   eric lemes - integracoes entre sistemas-2Tdc 2013   eric lemes - integracoes entre sistemas-2
Tdc 2013 eric lemes - integracoes entre sistemas-2Eric Lemes
 
TDC2018SP | Trilha Node.js - Melhores praticas de desempenho utilizando Node....
TDC2018SP | Trilha Node.js - Melhores praticas de desempenho utilizando Node....TDC2018SP | Trilha Node.js - Melhores praticas de desempenho utilizando Node....
TDC2018SP | Trilha Node.js - Melhores praticas de desempenho utilizando Node....tdc-globalcode
 
AWS Meetup - Processando dados em alta escala com Node.js e AWS Lambda
AWS Meetup - Processando dados em alta escala com Node.js e AWS LambdaAWS Meetup - Processando dados em alta escala com Node.js e AWS Lambda
AWS Meetup - Processando dados em alta escala com Node.js e AWS LambdaDaniel Baptista Dias
 
Aplicações Profissionais para Internet com Zend Framework
Aplicações Profissionais para Internet com Zend FrameworkAplicações Profissionais para Internet com Zend Framework
Aplicações Profissionais para Internet com Zend FrameworkFlávio Lisboa
 
DevOps com Exemplos Práticos - QConRio 2014
DevOps com Exemplos Práticos - QConRio 2014DevOps com Exemplos Práticos - QConRio 2014
DevOps com Exemplos Práticos - QConRio 2014Leo Lorieri
 
Node não é filme de Terror
Node não é filme de TerrorNode não é filme de Terror
Node não é filme de TerrorPaulo Pires
 

Semelhante a Arquiteturas híbridas de atendimento em Cloud Computing para otimizar o uso de recursos (Node.js) (20)

TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on AzureTDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
 
Node.js no Pagar.me
Node.js no Pagar.meNode.js no Pagar.me
Node.js no Pagar.me
 
Light Talk: Introdução sobre Node.js
Light Talk: Introdução sobre Node.jsLight Talk: Introdução sobre Node.js
Light Talk: Introdução sobre Node.js
 
NodeJS
NodeJSNodeJS
NodeJS
 
Matando web forms e modernizando um grande varejista
Matando web forms e modernizando um grande varejistaMatando web forms e modernizando um grande varejista
Matando web forms e modernizando um grande varejista
 
Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)
Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)
Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)
 
Planejamento de capacidade em ambiente virtualizado, por Bruno Domingues
Planejamento de capacidade em ambiente virtualizado, por Bruno DominguesPlanejamento de capacidade em ambiente virtualizado, por Bruno Domingues
Planejamento de capacidade em ambiente virtualizado, por Bruno Domingues
 
Como criar infraestrutura de sites para receber milhões de usuários?
Como criar infraestrutura de sites para receber milhões de usuários?Como criar infraestrutura de sites para receber milhões de usuários?
Como criar infraestrutura de sites para receber milhões de usuários?
 
HTTP, Requisição e Resposta
HTTP, Requisição e RespostaHTTP, Requisição e Resposta
HTTP, Requisição e Resposta
 
Integração com webservices usando MVC e mágica
Integração com webservices usando MVC e mágicaIntegração com webservices usando MVC e mágica
Integração com webservices usando MVC e mágica
 
ExpressoBR para Um Milhão (de Usuários)
ExpressoBR para Um Milhão (de Usuários)ExpressoBR para Um Milhão (de Usuários)
ExpressoBR para Um Milhão (de Usuários)
 
Conhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkConhecendo o Novo REST Framework
Conhecendo o Novo REST Framework
 
TDC - Qual o tamanho adequado de um micro serviço?
TDC - Qual o tamanho adequado de um micro serviço?TDC - Qual o tamanho adequado de um micro serviço?
TDC - Qual o tamanho adequado de um micro serviço?
 
Introdução a Microservices com Node.JS
Introdução  a Microservices com Node.JSIntrodução  a Microservices com Node.JS
Introdução a Microservices com Node.JS
 
Tdc 2013 eric lemes - integracoes entre sistemas-2
Tdc 2013   eric lemes - integracoes entre sistemas-2Tdc 2013   eric lemes - integracoes entre sistemas-2
Tdc 2013 eric lemes - integracoes entre sistemas-2
 
TDC2018SP | Trilha Node.js - Melhores praticas de desempenho utilizando Node....
TDC2018SP | Trilha Node.js - Melhores praticas de desempenho utilizando Node....TDC2018SP | Trilha Node.js - Melhores praticas de desempenho utilizando Node....
TDC2018SP | Trilha Node.js - Melhores praticas de desempenho utilizando Node....
 
AWS Meetup - Processando dados em alta escala com Node.js e AWS Lambda
AWS Meetup - Processando dados em alta escala com Node.js e AWS LambdaAWS Meetup - Processando dados em alta escala com Node.js e AWS Lambda
AWS Meetup - Processando dados em alta escala com Node.js e AWS Lambda
 
Aplicações Profissionais para Internet com Zend Framework
Aplicações Profissionais para Internet com Zend FrameworkAplicações Profissionais para Internet com Zend Framework
Aplicações Profissionais para Internet com Zend Framework
 
DevOps com Exemplos Práticos - QConRio 2014
DevOps com Exemplos Práticos - QConRio 2014DevOps com Exemplos Práticos - QConRio 2014
DevOps com Exemplos Práticos - QConRio 2014
 
Node não é filme de Terror
Node não é filme de TerrorNode não é filme de Terror
Node não é filme de Terror
 

Mais de Diego Santos

Práticas DevOps com Zend Server
Práticas DevOps com Zend ServerPráticas DevOps com Zend Server
Práticas DevOps com Zend ServerDiego Santos
 
HTML5 – O que tem de novo?
HTML5 – O que tem de novo?HTML5 – O que tem de novo?
HTML5 – O que tem de novo?Diego Santos
 
Criando Mapas de rede para monitoramento com Zabbix
Criando Mapas de rede para monitoramento com ZabbixCriando Mapas de rede para monitoramento com Zabbix
Criando Mapas de rede para monitoramento com ZabbixDiego Santos
 
Como lidar com cargas de trabalho mistas - PostgreSQL
Como lidar com cargas de trabalho mistas - PostgreSQLComo lidar com cargas de trabalho mistas - PostgreSQL
Como lidar com cargas de trabalho mistas - PostgreSQLDiego Santos
 
OpenLDAP, criando e explorando um overlay
OpenLDAP, criando e explorando um overlayOpenLDAP, criando e explorando um overlay
OpenLDAP, criando e explorando um overlayDiego Santos
 
KDC Spoofing com Kerberos MIT
KDC Spoofing com Kerberos MITKDC Spoofing com Kerberos MIT
KDC Spoofing com Kerberos MITDiego Santos
 
IaaS: Implantação e gerenciamento de configurações de ambientes Cloud usando...
 IaaS: Implantação e gerenciamento de configurações de ambientes Cloud usando... IaaS: Implantação e gerenciamento de configurações de ambientes Cloud usando...
IaaS: Implantação e gerenciamento de configurações de ambientes Cloud usando...Diego Santos
 
Tenha mais tempo e gerencie seus processos com a Bonita
Tenha mais tempo e gerencie seus processos com a BonitaTenha mais tempo e gerencie seus processos com a Bonita
Tenha mais tempo e gerencie seus processos com a BonitaDiego Santos
 
Socialize os sites da sua empresa com eXo Platform
Socialize os sites da sua empresa com eXo PlatformSocialize os sites da sua empresa com eXo Platform
Socialize os sites da sua empresa com eXo PlatformDiego Santos
 
Programando Software Livre em C
Programando Software Livre em CProgramando Software Livre em C
Programando Software Livre em CDiego Santos
 
Análise estática de malware com o pev
Análise estática de malware com o pevAnálise estática de malware com o pev
Análise estática de malware com o pevDiego Santos
 
Testes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizadosTestes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizadosDiego Santos
 
Formando Desenvolvedores Efetivos
Formando Desenvolvedores EfetivosFormando Desenvolvedores Efetivos
Formando Desenvolvedores EfetivosDiego Santos
 
As grandes novidades do JSF 2.0!
As grandes novidades do JSF 2.0!As grandes novidades do JSF 2.0!
As grandes novidades do JSF 2.0!Diego Santos
 
Webcast Tutorial: Análise de dumps de memória no GNU/Linux
Webcast Tutorial: Análise de dumps de memória no GNU/LinuxWebcast Tutorial: Análise de dumps de memória no GNU/Linux
Webcast Tutorial: Análise de dumps de memória no GNU/LinuxDiego Santos
 
Análise de malware com software livre
Análise de malware com software livreAnálise de malware com software livre
Análise de malware com software livreDiego Santos
 

Mais de Diego Santos (17)

Práticas DevOps com Zend Server
Práticas DevOps com Zend ServerPráticas DevOps com Zend Server
Práticas DevOps com Zend Server
 
HTML5 – O que tem de novo?
HTML5 – O que tem de novo?HTML5 – O que tem de novo?
HTML5 – O que tem de novo?
 
Criando Mapas de rede para monitoramento com Zabbix
Criando Mapas de rede para monitoramento com ZabbixCriando Mapas de rede para monitoramento com Zabbix
Criando Mapas de rede para monitoramento com Zabbix
 
Como lidar com cargas de trabalho mistas - PostgreSQL
Como lidar com cargas de trabalho mistas - PostgreSQLComo lidar com cargas de trabalho mistas - PostgreSQL
Como lidar com cargas de trabalho mistas - PostgreSQL
 
Cloud é Linux
Cloud é LinuxCloud é Linux
Cloud é Linux
 
OpenLDAP, criando e explorando um overlay
OpenLDAP, criando e explorando um overlayOpenLDAP, criando e explorando um overlay
OpenLDAP, criando e explorando um overlay
 
KDC Spoofing com Kerberos MIT
KDC Spoofing com Kerberos MITKDC Spoofing com Kerberos MIT
KDC Spoofing com Kerberos MIT
 
IaaS: Implantação e gerenciamento de configurações de ambientes Cloud usando...
 IaaS: Implantação e gerenciamento de configurações de ambientes Cloud usando... IaaS: Implantação e gerenciamento de configurações de ambientes Cloud usando...
IaaS: Implantação e gerenciamento de configurações de ambientes Cloud usando...
 
Tenha mais tempo e gerencie seus processos com a Bonita
Tenha mais tempo e gerencie seus processos com a BonitaTenha mais tempo e gerencie seus processos com a Bonita
Tenha mais tempo e gerencie seus processos com a Bonita
 
Socialize os sites da sua empresa com eXo Platform
Socialize os sites da sua empresa com eXo PlatformSocialize os sites da sua empresa com eXo Platform
Socialize os sites da sua empresa com eXo Platform
 
Programando Software Livre em C
Programando Software Livre em CProgramando Software Livre em C
Programando Software Livre em C
 
Análise estática de malware com o pev
Análise estática de malware com o pevAnálise estática de malware com o pev
Análise estática de malware com o pev
 
Testes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizadosTestes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizados
 
Formando Desenvolvedores Efetivos
Formando Desenvolvedores EfetivosFormando Desenvolvedores Efetivos
Formando Desenvolvedores Efetivos
 
As grandes novidades do JSF 2.0!
As grandes novidades do JSF 2.0!As grandes novidades do JSF 2.0!
As grandes novidades do JSF 2.0!
 
Webcast Tutorial: Análise de dumps de memória no GNU/Linux
Webcast Tutorial: Análise de dumps de memória no GNU/LinuxWebcast Tutorial: Análise de dumps de memória no GNU/Linux
Webcast Tutorial: Análise de dumps de memória no GNU/Linux
 
Análise de malware com software livre
Análise de malware com software livreAnálise de malware com software livre
Análise de malware com software livre
 

Arquiteturas híbridas de atendimento em Cloud Computing para otimizar o uso de recursos (Node.js)

  • 1. 1
  • 2. Arquiteturas híbridas de atendimento em Cloud Computing para otimizar o uso de recursos (Node.js) Thiago Henrique de Oliveira 2
  • 3. Introdução Nuvem, “A além da Infraestrutura.“ (Rodrigo Gazzaneo) 3
  • 4. Introdução Qual Sistema Gerenciador de Banco de Dados utilizar? Qual Linguagem utilizar? 4
  • 5. Introdução Quando podemos prever a quantidade de acessos... tudo fica mais simples! 5
  • 6. Introdução Mas... e quando esse número não é preciso? 6
  • 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
  • 9. Use Case 1º) Atendimento médico; 2º) Prescrição médica; 3º) Onde localizar o medicamento? 9
  • 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
  • 19. Chega de teoria, e vamos para prática? 19
  • 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
  • 27. Obrigado Thiago Henrique de Oliveira thiago.oliveira@4linux.com.br @4LinuxBR /4linux 27