SlideShare uma empresa Scribd logo
1 de 241
Baixar para ler offline
A performance que eu sempre quis ter
                 Emerson Macedo
                    @emerleite
              http://codificando.com
http://visaoagil.wordpress.com/author/emerleite/
#whoami
2000
360 milhões de
usuários de internet
  em todo mundo
9,8 milhões de usuários
9,8 milhões de usuários

4,8 milhões são ativos
Com poucos usuários
 qualquer tecnologia
      funciona
2010
~ 2 bilhões de
usuários de internet
  em todo mundo
68 milhões de usuários
68 milhões de usuários

37 milhões são ativos
Com muitos usuários
nem toda tecnologia
     funciona
Tecnologias
  atuais
Todas essas tecnologias
 tem algo em comum
PHP   1995
PHP      1995
Java EE   1998
PHP      1995
Java EE   1998
ASP.Net   2002
PHP         1995
   Java EE      1998
  ASP.Net       2002

Ruby on Rails   2005
PHP         1995
   Java EE      1998
  ASP.Net       2002

Ruby on Rails   2005
   Django       2005
Por que então mais
 uma tecnologia ?
Usuários de Internet no Mundo (em milhões)
                                      2.000 milhões
2000


1500


1000


 500     360 milhões


   0
           2000                          2010
Usuários de Internet no Brasil (em milhões)
                                        70 milhões
 70


52,5


 35


17,5
         10 milhões


  0
           2000                           2010
Mas já escalamos muito
  bem nossos sites
Estrutura física de
servidores para escalar
Escalando na vertical
Escalando na vertical
Escalando na horizontal
Escalando na horizontal
Escalando na horizontal
Escalando na horizontal
Escalando DB na horizontal


                                   re
                                      ad
      ad
   re




                   write




           write           write
Escalando DB na horizontal




 Shard      Shard      Shard      Shard      Shard      Shard
Database   Database   Database   Database   Database   Database
Arquitetura pra fazer
 o software escalar
Pattern para atender
  muitos requests
Pattern para atender
  muitos requests

Finalize a requisição o
 mais rápido possível
HTTP GET
HTTP POST
Pattern para atender
  muitos requests

Finalize a requisição o
 mais rápido possível
Por que então mais
 uma tecnologia ?
2014
~ 70% dos adultos
 serão usuários
  regulares de
  redes sociais
Como manter
conectados 10, 20 ou
   30 mil usuários
    simultâneos ?
Escalando na horizontal
Escalando na horizontal
Evented, non-blocking I/O
    Google V8 Engine
Qual é o problema
das tecnologias atuais ?
Como manter
conectados 10, 20 ou
   30 mil usuários
    simultâneos ?
Nosso código costuma
  ser escrito assim
Nosso código costuma
  ser escrito assim



O que o software está fazendo
 enquanto a querie executa ?
Na maioria dos casos
está travado esperando
       a resposta
Rails ou Django


 HTTPD            Database
Rails ou Django


 HTTPD            Database
Rails ou Django


 HTTPD            Database
Rails ou Django
          RUNTIME
          PROCESS




 HTTPD              Database
Rails ou Django
          RUNTIME
                    BLOCK
          PROCESS




 HTTPD                      Database
Rails ou Django
          RUNTIME
                    BLOCK
          PROCESS




          RUNTIME
                    BLOCK
          PROCESS

 HTTPD                      Database
          RUNTIME
                    BLOCK
          PROCESS




          RUNTIME
          PROCESS   BLOCK
Java
           Servlet Container




HTTPD          Servlet         Database
Java
           Servlet Container




HTTPD          Servlet         Database
Java
           Servlet Container




HTTPD          Servlet         Database
Java
                  Servlet Container
         Thread




HTTPD                 Servlet         Database
Java
                  Servlet Container
         Thread                 BLOCK




HTTPD                 Servlet           Database
Java
                  Servlet Container
         Thread                 BLOCK


         Thread                 BLOCK


         Thread                 BLOCK
HTTPD                 Servlet           Database
         Thread                 BLOCK


         Thread                 BLOCK


         Thread                 BLOCK


         Thread                 BLOCK
Apenas um processo
abrindo uma thread
 para cada request
Produtividade do
programador mais que
   performance da
      tecnologia
Apenas um processo
abrindo uma thread
 para cada request
Parece bom mas ...
Como manter
conectados 10, 20 ou
   30 mil usuários
    simultâneos ?
Como manter
conectados 10, 20 ou
   30 mil usuários
    simultâneos ?
  30 mil threads ?
concurrency × reqs/sec

 Apache vs NGINX
 concurrency × reqs/sec




 http://blog.webfaction.com/a-little-holiday-present
http://blog.webfaction.com/a-little-holiday-present
concurrency × reqs/sec

 Apache vs NGINX
 concurrency × memory




  http://blog.webfaction.com/a-little-holiday-present
http://blog.webfaction.com/a-little-holiday-present
Apache cria uma
thread por request
Troca de contexto
entre theads tem
    um custo
Cada OS Thread
cria uma pilha de
 execução nova
Não devemos usar
uma thread por request
  quando precisamos
     suportar alta
     concorrência
Como manter
conectados 10, 20 ou
   30 mil usuários
    simultâneos ?
Pattern para atender
  muitos requests

Finalize a requisição o
 mais rápido possível
Pattern para atender
 alta concorrência
Pattern para atender
 alta concorrência

 Não crie threads
Pattern para atender
 alta concorrência

 Não crie threads
Use um Event Loop
Produtividade do
programador mais que
   performance da
      tecnologia
Performance
     !=
Escalabilidade
Performance
     !=
Escalabilidade
  mas ...
Uma performance
melhor ajuda a escalar
com menos recursos
Precisamos fazer I/O
 de outra maneira
Latência de I/O
Latência de I/O
L1          3 ciclos
Latência de I/O
L1          3 ciclos
L2          14 ciclos
Latência de I/O
 L1         3 ciclos
 L2         14 ciclos
RAM        250 ciclos
Latência de I/O
 L1           3 ciclos
 L2           14 ciclos
RAM          250 ciclos

Disco     41.000.000 ciclos
Latência de I/O
 L1            3 ciclos
 L2            14 ciclos
RAM           250 ciclos

Disco      41.000.000 ciclos
Rede      240.000.000 ciclos
Latência de I/O
 L1            3 ciclos
 L2            14 ciclos
RAM           250 ciclos

Disco      41.000.000 ciclos
Rede      240.000.000 ciclos
I/O não bloqueante
I/O não bloqueante
 L1          3 ciclos
 L2          14 ciclos
RAM         250 ciclos
I/O não bloqueante
 L1          3 ciclos
 L2          14 ciclos
RAM         250 ciclos
  I/O bloqueante
I/O não bloqueante
 L1           3 ciclos
 L2           14 ciclos
RAM          250 ciclos
   I/O bloqueante
Disco     41.000.000 ciclos
Rede     240.000.000 ciclos
Infraestrutura não bloqueante, puramente
  baseada em eventos, para desenvolver
      software de alta concorrência
Servidor TCP simples
      em NodeJS



O código acima faz com que a execução
 retorne imediatamente ao event loop
Por que já não
faziamos dessa forma ?
POSIX Assync I/O não
 suportado por todos
       os S.Os
POSIX Assync I/O não
 suportado por todos
       os S.Os

 libmysql_client não
permite query async
Filosofia do NodeJS
Filosofia do NodeJS


Todo I/O deveria ser feito desta forma
Para qualquer
operação que acesse o
 disco ou a rede deve
  existir um callback
Arquitetura
Javascript   Node standard library




    C             Node Bindings


                    thread     event
                     pool      loop
             V8
                    (libeio)   (libev)
Pilha de execução




          ev_loop()




 I/O em disco (bloqueante)
Pilha de execução



      socket_readdable(1)


           ev_loop()




 I/O em disco (bloqueante)
Pilha de execução


         http_parse(1)


      socket_readdable(1)


           ev_loop()




 I/O em disco (bloqueante)
Pilha de execução

       load(“index.html”)


         http_parse(1)


      socket_readdable(1)


           ev_loop()




 I/O em disco (bloqueante)
Pilha de execução


         http_parse(1)


      socket_readdable(1)


           ev_loop()




 I/O em disco (bloqueante)
Pilha de execução



      socket_readdable(1)


           ev_loop()




 I/O em disco (bloqueante)
Pilha de execução




          ev_loop()




 I/O em disco (bloqueante)
Pilha de execução




         ev_loop()




 I/O em RAM (não bloqueante)
Pilha de execução



      socket_readdable(2)


           ev_loop()




 I/O em RAM (não bloqueante)
Pilha de execução


         http_parse(2)


      socket_readdable(2)


           ev_loop()




 I/O em RAM (não bloqueante)
Pilha de execução

        http_respond(2)


         http_parse(2)


      socket_readdable(2)


           ev_loop()




 I/O em RAM (não bloqueante)
Pilha de execução


         http_parse(2)


      socket_readdable(2)


           ev_loop()




 I/O em RAM (não bloqueante)
Pilha de execução



      socket_readdable(2)


           ev_loop()




 I/O em RAM (não bloqueante)
Pilha de execução




         ev_loop()




 I/O em RAM (não bloqueante)
Pilha de execução




          ev_loop()




 Arquivo carregou do disco
Pilha de execução



        file_loaded()


          ev_loop()




 Arquivo carregou do disco
Pilha de execução


        http_respond(1)


         file_loaded()


           ev_loop()




 Arquivo carregou do disco
Pilha de execução



        file_loaded()


          ev_loop()




 Arquivo carregou do disco
Pilha de execução




          ev_loop()




 Arquivo carregou do disco
Arquitetura Web
Arquitetura Web


      Nginx
Arquitetura Web


                      Nginx




 Ruby     Ruby     Ruby        Ruby     Ruby
  or       or       or          or       or
Python   Python   Python      Python   Python
Arquitetura Web


                      Nginx




 Ruby     Ruby     Ruby        Ruby     Ruby
  or       or       or          or       or     NodeJS
Python   Python   Python      Python   Python
Arquitetura Web


      Nginx
Arquitetura Web


      Nginx




      NodeJS
Arquitetura Web


      NodeJS
Arquitetura Web


                 NodeJS




Quando NodeJS estiver bem maduro, a
idéia de Ryan é que ele seja a porta de
            entrada. Será ?
Por que Javascript ?
Não é burocrático,
assim como Ruby ou
       Python
Não é burocrático,
assim como Ruby ou
       Python
     Especialistas
 Javascript Client-Side
já pensam assíncrono
Instalação
Instalação
http://nodejs.org/#download
Instalação
http://nodejs.org/#download

$ ./configure
$ make
$ make install
Desenvolvendo
aplicações web
Express JS
http://expressjs.com/
Express JS
http://expressjs.com/




        Sinatra ???
Express JS
#múltiplos ambientes
Express JS
#markup
Express JS
#markup
Express JS
#stylesheet
Express JS
#comportamento
Express JS
#comportamento
Database
Database
http://wiki.github.com/ry/node/modules#database
Database
http://wiki.github.com/ry/node/modules#database

MongoDB
CouchDB
MySQL Assíncrono
Sqlite
Redis
Postgres
Test driven development
#vows - http://vowsjs.org/
Test driven development
Test driven development
#http://github.com/visionmedia/expresso/
Node package manager
http://github.com/isaacs/npm
Node package manager
http://github.com/isaacs/npm
#instalação
$ curl http://npmjs.org/install.sh | sh
Node package manager
http://github.com/isaacs/npm
#instalação
$ curl http://npmjs.org/install.sh | sh
#utilização
$ npm install pacote
Node package manager
http://github.com/isaacs/npm
#instalação
$ curl http://npmjs.org/install.sh | sh
#utilização
$ npm install pacote
#desinstalação
$ npm uninstall npm
Node package manager
http://github.com/isaacs/npm
Node package manager
http://github.com/isaacs/npm
#stable - expressjs
$ npm install express
Node package manager
http://github.com/isaacs/npm
#stable - expressjs
$ npm install express
#unstable - hamljs
$ npm install hamljs@latest
Node package manager
http://github.com/isaacs/npm
#stable - expressjs
$ npm install express
#unstable - hamljs
$ npm install hamljs@latest
#versão - vows
$ npm install vows@0.4.6
Node package manager
Node package manager
http://github.com/isaacs/npm
Node package manager
http://github.com/isaacs/npm
#listando
$ npm list
Node package manager
http://github.com/isaacs/npm
#listando
$ npm list
#instalado
$ npm list @installed
Node package manager
http://github.com/isaacs/npm
#listando
$ npm list
#instalado
$ npm list @installed
#autor
$ npm list =ry
Node package manager
Node package manager
http://github.com/isaacs/npm
Node package manager
http://github.com/isaacs/npm
#atualizando
$ npm update
Node package manager
http://github.com/isaacs/npm
#atualizando
$ npm update
#porpacote
$ npm update pacote
Node package manager
http://github.com/isaacs/npm
#atualizando
$ npm update
#porpacote
$ npm update pacote
#ondefica
~/.node_libraries
Deployment
em produção
Spark + Nginx
http://github.com/senchalabs/spark
Spark + Nginx
http://github.com/senchalabs/spark
#instalação
$ npm install spark@latest
Spark + Nginx
http://github.com/senchalabs/spark
#instalação
$ npm install spark@latest
#utilização
$ spark -p [port] -n [processes]
Spark + Nginx
Spark + Nginx
#config.js
Spark + Nginx
#config.js




#nginx
Oportunidades
Upload de arquivos
Upload de arquivos




Streaming de vídeo
Upload de arquivos

  Real-time
web applications

Streaming de vídeo
Alternativas
Status atual
Status atual
Versão         0.1.103
Status atual
 Versão           0.1.103

Javascript     ~ 6000 linhas
Status atual
 Versão           0.1.103

Javascript     ~ 6000 linhas
   C++         ~ 11000 linhas
Status atual
 Versão            0.1.103

Javascript      ~ 6000 linhas
   C++          ~ 11000 linhas
Mailin list     ~ 1200 pessoas
Status atual
    Versão          0.1.103

  Javascript     ~ 6000 linhas
     C++         ~ 11000 linhas
  Mailin list    ~ 1200 pessoas
Contribuidores   ~ 70 pessoas
Conclusão
I/O não deve ser feito
da forma que fazemos
     hoje em dia
Muito promissor
Muito promissor

Podemos usar já !!!
Produtividade do
programador mais que
   performance da
      tecnologia
Obrigado !!!

    Emerson Macedo
        @emerleite
  http://codificando.com
Referências
http://www.internetworldstats.com/emarketing.htm
http://en.wikipedia.org/wiki/Event_loop
http://lse.sourceforge.net/io/aio.html
http://code.google.com/p/v8/
http://opengroup.org/onlinepubs/007908775/xsh/select.html
http://en.wikipedia.org/wiki/Thread_pool_pattern
http://www.commonjs.org/specs/modules/1.0/
http://en.wikipedia.org/wiki/File_descriptor

Mais conteúdo relacionado

Mais procurados

Object Oriented Programming with Laravel - Session 1
Object Oriented Programming with Laravel - Session 1Object Oriented Programming with Laravel - Session 1
Object Oriented Programming with Laravel - Session 1Shahrzad Peyman
 
Desvendando a linguagem JavaScript
Desvendando a linguagem JavaScriptDesvendando a linguagem JavaScript
Desvendando a linguagem JavaScriptRodrigo Branas
 
Automação e virtualização de serviços
Automação e virtualização de serviçosAutomação e virtualização de serviços
Automação e virtualização de serviçosElias Nogueira
 
Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)Bruno Grange
 
Papel do QA na Transformação Ágil
Papel do QA na Transformação ÁgilPapel do QA na Transformação Ágil
Papel do QA na Transformação ÁgilElias Nogueira
 
Automação de testes de API utilizando Postman
Automação de testes de API utilizando PostmanAutomação de testes de API utilizando Postman
Automação de testes de API utilizando PostmanLucas Amaral
 
Advance Java Programming (CM5I) 6.Servlet
Advance Java Programming (CM5I) 6.ServletAdvance Java Programming (CM5I) 6.Servlet
Advance Java Programming (CM5I) 6.ServletPayal Dungarwal
 
A Deeper look into Javascript Basics
A Deeper look into Javascript BasicsA Deeper look into Javascript Basics
A Deeper look into Javascript BasicsMindfire Solutions
 
JAVASCRIPT PPT [Autosaved].pptx
JAVASCRIPT PPT [Autosaved].pptxJAVASCRIPT PPT [Autosaved].pptx
JAVASCRIPT PPT [Autosaved].pptxAchieversITAravind
 

Mais procurados (20)

Object Oriented Programming with Laravel - Session 1
Object Oriented Programming with Laravel - Session 1Object Oriented Programming with Laravel - Session 1
Object Oriented Programming with Laravel - Session 1
 
Introdução ao React
Introdução ao ReactIntrodução ao React
Introdução ao React
 
Desvendando a linguagem JavaScript
Desvendando a linguagem JavaScriptDesvendando a linguagem JavaScript
Desvendando a linguagem JavaScript
 
Automação e virtualização de serviços
Automação e virtualização de serviçosAutomação e virtualização de serviços
Automação e virtualização de serviços
 
Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)
 
Papel do QA na Transformação Ágil
Papel do QA na Transformação ÁgilPapel do QA na Transformação Ágil
Papel do QA na Transformação Ágil
 
Automação de testes de API utilizando Postman
Automação de testes de API utilizando PostmanAutomação de testes de API utilizando Postman
Automação de testes de API utilizando Postman
 
Aula javascript
Aula  javascriptAula  javascript
Aula javascript
 
Aula03 - JavaScript
Aula03 - JavaScriptAula03 - JavaScript
Aula03 - JavaScript
 
Node js for beginners
Node js for beginnersNode js for beginners
Node js for beginners
 
Arquitetura Node com NestJS
Arquitetura Node com NestJSArquitetura Node com NestJS
Arquitetura Node com NestJS
 
Ruby
RubyRuby
Ruby
 
Advance Java Programming (CM5I) 6.Servlet
Advance Java Programming (CM5I) 6.ServletAdvance Java Programming (CM5I) 6.Servlet
Advance Java Programming (CM5I) 6.Servlet
 
Introdução ao JavaScript
Introdução ao JavaScriptIntrodução ao JavaScript
Introdução ao JavaScript
 
A Deeper look into Javascript Basics
A Deeper look into Javascript BasicsA Deeper look into Javascript Basics
A Deeper look into Javascript Basics
 
JAVASCRIPT PPT [Autosaved].pptx
JAVASCRIPT PPT [Autosaved].pptxJAVASCRIPT PPT [Autosaved].pptx
JAVASCRIPT PPT [Autosaved].pptx
 
Laravel Eloquent ORM
Laravel Eloquent ORMLaravel Eloquent ORM
Laravel Eloquent ORM
 
React - Introdução
React - IntroduçãoReact - Introdução
React - Introdução
 
BDD with Cucumber
BDD with CucumberBDD with Cucumber
BDD with Cucumber
 
Node.js Express Framework
Node.js Express FrameworkNode.js Express Framework
Node.js Express Framework
 

Semelhante a Nodejs - A performance que eu sempre quis ter

Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011Emerson Macedo
 
Secomp 2011 - Node.JS - Introdução
Secomp 2011 - Node.JS - IntroduçãoSecomp 2011 - Node.JS - Introdução
Secomp 2011 - Node.JS - IntroduçãoEmerson Macedo
 
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJSRubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJSEmerson Macedo
 
Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010Emerson Macedo
 
O bom, o mau, o vilão... e o node.js
O bom, o mau, o vilão... e o node.jsO bom, o mau, o vilão... e o node.js
O bom, o mau, o vilão... e o node.jsNuno Paz
 
Uma visão rápida sobre Nodejs
Uma visão rápida sobre NodejsUma visão rápida sobre Nodejs
Uma visão rápida sobre NodejsRafael Soares
 
TDC2015 - Internet das Coisas - OpenDevice
TDC2015 - Internet das Coisas - OpenDeviceTDC2015 - Internet das Coisas - OpenDevice
TDC2015 - Internet das Coisas - OpenDeviceRicardo Rufino
 
Navegando em um mar de siglas do mundo java
Navegando em um mar de siglas do mundo javaNavegando em um mar de siglas do mundo java
Navegando em um mar de siglas do mundo javaAndrei Tognolo
 
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaTécnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaAlexandre Tarifa
 
Desenvolvimento web com python e web2py
Desenvolvimento web com python e web2pyDesenvolvimento web com python e web2py
Desenvolvimento web com python e web2pyRelsi Maron
 
Desenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsDesenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsIgo Coelho
 
Criando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerCriando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerGiovanni Kenji Shiroma
 
Java Web Dev Introdução
Java Web Dev IntroduçãoJava Web Dev Introdução
Java Web Dev IntroduçãoMarcio Marinho
 
Hangout Tempo Real Eventos - Nodejs - Os Primeiros Passos
Hangout  Tempo Real Eventos - Nodejs - Os Primeiros PassosHangout  Tempo Real Eventos - Nodejs - Os Primeiros Passos
Hangout Tempo Real Eventos - Nodejs - Os Primeiros PassosJackson F. de A. Mafra
 
Integração de Sistemas usando tecnologias open source
Integração de Sistemas usando tecnologias open sourceIntegração de Sistemas usando tecnologias open source
Integração de Sistemas usando tecnologias open sourceTiago Peczenyj
 

Semelhante a Nodejs - A performance que eu sempre quis ter (20)

Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
 
Secomp 2011 - Node.JS - Introdução
Secomp 2011 - Node.JS - IntroduçãoSecomp 2011 - Node.JS - Introdução
Secomp 2011 - Node.JS - Introdução
 
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJSRubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
 
Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010
 
O bom, o mau, o vilão... e o node.js
O bom, o mau, o vilão... e o node.jsO bom, o mau, o vilão... e o node.js
O bom, o mau, o vilão... e o node.js
 
Node.js no Pagar.me
Node.js no Pagar.meNode.js no Pagar.me
Node.js no Pagar.me
 
Web Sphere
Web SphereWeb Sphere
Web Sphere
 
Cakephp 2.0 - O que mudou
Cakephp 2.0 - O que mudouCakephp 2.0 - O que mudou
Cakephp 2.0 - O que mudou
 
Uma visão rápida sobre Nodejs
Uma visão rápida sobre NodejsUma visão rápida sobre Nodejs
Uma visão rápida sobre Nodejs
 
TDC2015 - Internet das Coisas - OpenDevice
TDC2015 - Internet das Coisas - OpenDeviceTDC2015 - Internet das Coisas - OpenDevice
TDC2015 - Internet das Coisas - OpenDevice
 
Navegando em um mar de siglas do mundo java
Navegando em um mar de siglas do mundo javaNavegando em um mar de siglas do mundo java
Navegando em um mar de siglas do mundo java
 
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaTécnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
 
Desenvolvimento web com python e web2py
Desenvolvimento web com python e web2pyDesenvolvimento web com python e web2py
Desenvolvimento web com python e web2py
 
Rest workshop
Rest workshopRest workshop
Rest workshop
 
Desenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsDesenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e Servlets
 
Criando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerCriando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & Docker
 
XPT Framework
XPT FrameworkXPT Framework
XPT Framework
 
Java Web Dev Introdução
Java Web Dev IntroduçãoJava Web Dev Introdução
Java Web Dev Introdução
 
Hangout Tempo Real Eventos - Nodejs - Os Primeiros Passos
Hangout  Tempo Real Eventos - Nodejs - Os Primeiros PassosHangout  Tempo Real Eventos - Nodejs - Os Primeiros Passos
Hangout Tempo Real Eventos - Nodejs - Os Primeiros Passos
 
Integração de Sistemas usando tecnologias open source
Integração de Sistemas usando tecnologias open sourceIntegração de Sistemas usando tecnologias open source
Integração de Sistemas usando tecnologias open source
 

Mais de Emerson Macedo

ElixirConf 2019 - 10M Monthly Ad Insertions with Phoenix and Broadway
ElixirConf 2019 - 10M Monthly Ad Insertions with Phoenix and BroadwayElixirConf 2019 - 10M Monthly Ad Insertions with Phoenix and Broadway
ElixirConf 2019 - 10M Monthly Ad Insertions with Phoenix and BroadwayEmerson Macedo
 
The Conf 2019 - Elixir - Emerson Macedo
The Conf 2019 - Elixir - Emerson MacedoThe Conf 2019 - Elixir - Emerson Macedo
The Conf 2019 - Elixir - Emerson MacedoEmerson Macedo
 
Wanna be a manager? Not today - QCon São Paulo 2019
Wanna be a manager? Not today - QCon São Paulo 2019Wanna be a manager? Not today - QCon São Paulo 2019
Wanna be a manager? Not today - QCon São Paulo 2019Emerson Macedo
 
TheConf 2018 - How does your app behave when everything goes wrong
TheConf 2018 - How does your app behave when everything goes wrongTheConf 2018 - How does your app behave when everything goes wrong
TheConf 2018 - How does your app behave when everything goes wrongEmerson Macedo
 
DevConf OpenSanca 2018 - How does your application behaves when everything go...
DevConf OpenSanca 2018 - How does your application behaves when everything go...DevConf OpenSanca 2018 - How does your application behaves when everything go...
DevConf OpenSanca 2018 - How does your application behaves when everything go...Emerson Macedo
 
How your app behaves when everything goes wrong - Ruby Conf BR 2017
How your app behaves when everything goes wrong - Ruby Conf BR 2017How your app behaves when everything goes wrong - Ruby Conf BR 2017
How your app behaves when everything goes wrong - Ruby Conf BR 2017Emerson Macedo
 
Beyond your daily coding - The Conf Brazil 2017 Keynote
Beyond your daily coding - The Conf Brazil 2017 KeynoteBeyond your daily coding - The Conf Brazil 2017 Keynote
Beyond your daily coding - The Conf Brazil 2017 KeynoteEmerson Macedo
 
CEJS 2016 - Please learn that shit
CEJS 2016 - Please learn that shitCEJS 2016 - Please learn that shit
CEJS 2016 - Please learn that shitEmerson Macedo
 
How Elixir helped us scale our Video User Profile Service for the Olympics
How Elixir helped us scale our Video User Profile Service for the OlympicsHow Elixir helped us scale our Video User Profile Service for the Olympics
How Elixir helped us scale our Video User Profile Service for the OlympicsEmerson Macedo
 
QCon SP 2016 - Video Authorization: from chaos to 25ms response time
QCon SP 2016 - Video Authorization: from chaos to 25ms response timeQCon SP 2016 - Video Authorization: from chaos to 25ms response time
QCon SP 2016 - Video Authorization: from chaos to 25ms response timeEmerson Macedo
 
Qcon Rio 2015 - Microservices
Qcon Rio 2015 - MicroservicesQcon Rio 2015 - Microservices
Qcon Rio 2015 - MicroservicesEmerson Macedo
 
Microservices Case: GloboTV e Globosat Play
Microservices Case: GloboTV e Globosat PlayMicroservices Case: GloboTV e Globosat Play
Microservices Case: GloboTV e Globosat PlayEmerson Macedo
 
Jogos com NodeJS e Browser - QCON SP 2011
Jogos com NodeJS e Browser - QCON SP 2011Jogos com NodeJS e Browser - QCON SP 2011
Jogos com NodeJS e Browser - QCON SP 2011Emerson Macedo
 
Javascript Orientado a Objetos - Fisl12
Javascript Orientado a Objetos - Fisl12Javascript Orientado a Objetos - Fisl12
Javascript Orientado a Objetos - Fisl12Emerson Macedo
 
1 encontro Node.JS Brasil
1 encontro Node.JS Brasil1 encontro Node.JS Brasil
1 encontro Node.JS BrasilEmerson Macedo
 
BrazilJS - Node.JS Realtime Web Applications
BrazilJS - Node.JS Realtime Web ApplicationsBrazilJS - Node.JS Realtime Web Applications
BrazilJS - Node.JS Realtime Web ApplicationsEmerson Macedo
 
DevInRio 2010 - NodeJS
DevInRio 2010 - NodeJSDevInRio 2010 - NodeJS
DevInRio 2010 - NodeJSEmerson Macedo
 

Mais de Emerson Macedo (17)

ElixirConf 2019 - 10M Monthly Ad Insertions with Phoenix and Broadway
ElixirConf 2019 - 10M Monthly Ad Insertions with Phoenix and BroadwayElixirConf 2019 - 10M Monthly Ad Insertions with Phoenix and Broadway
ElixirConf 2019 - 10M Monthly Ad Insertions with Phoenix and Broadway
 
The Conf 2019 - Elixir - Emerson Macedo
The Conf 2019 - Elixir - Emerson MacedoThe Conf 2019 - Elixir - Emerson Macedo
The Conf 2019 - Elixir - Emerson Macedo
 
Wanna be a manager? Not today - QCon São Paulo 2019
Wanna be a manager? Not today - QCon São Paulo 2019Wanna be a manager? Not today - QCon São Paulo 2019
Wanna be a manager? Not today - QCon São Paulo 2019
 
TheConf 2018 - How does your app behave when everything goes wrong
TheConf 2018 - How does your app behave when everything goes wrongTheConf 2018 - How does your app behave when everything goes wrong
TheConf 2018 - How does your app behave when everything goes wrong
 
DevConf OpenSanca 2018 - How does your application behaves when everything go...
DevConf OpenSanca 2018 - How does your application behaves when everything go...DevConf OpenSanca 2018 - How does your application behaves when everything go...
DevConf OpenSanca 2018 - How does your application behaves when everything go...
 
How your app behaves when everything goes wrong - Ruby Conf BR 2017
How your app behaves when everything goes wrong - Ruby Conf BR 2017How your app behaves when everything goes wrong - Ruby Conf BR 2017
How your app behaves when everything goes wrong - Ruby Conf BR 2017
 
Beyond your daily coding - The Conf Brazil 2017 Keynote
Beyond your daily coding - The Conf Brazil 2017 KeynoteBeyond your daily coding - The Conf Brazil 2017 Keynote
Beyond your daily coding - The Conf Brazil 2017 Keynote
 
CEJS 2016 - Please learn that shit
CEJS 2016 - Please learn that shitCEJS 2016 - Please learn that shit
CEJS 2016 - Please learn that shit
 
How Elixir helped us scale our Video User Profile Service for the Olympics
How Elixir helped us scale our Video User Profile Service for the OlympicsHow Elixir helped us scale our Video User Profile Service for the Olympics
How Elixir helped us scale our Video User Profile Service for the Olympics
 
QCon SP 2016 - Video Authorization: from chaos to 25ms response time
QCon SP 2016 - Video Authorization: from chaos to 25ms response timeQCon SP 2016 - Video Authorization: from chaos to 25ms response time
QCon SP 2016 - Video Authorization: from chaos to 25ms response time
 
Qcon Rio 2015 - Microservices
Qcon Rio 2015 - MicroservicesQcon Rio 2015 - Microservices
Qcon Rio 2015 - Microservices
 
Microservices Case: GloboTV e Globosat Play
Microservices Case: GloboTV e Globosat PlayMicroservices Case: GloboTV e Globosat Play
Microservices Case: GloboTV e Globosat Play
 
Jogos com NodeJS e Browser - QCON SP 2011
Jogos com NodeJS e Browser - QCON SP 2011Jogos com NodeJS e Browser - QCON SP 2011
Jogos com NodeJS e Browser - QCON SP 2011
 
Javascript Orientado a Objetos - Fisl12
Javascript Orientado a Objetos - Fisl12Javascript Orientado a Objetos - Fisl12
Javascript Orientado a Objetos - Fisl12
 
1 encontro Node.JS Brasil
1 encontro Node.JS Brasil1 encontro Node.JS Brasil
1 encontro Node.JS Brasil
 
BrazilJS - Node.JS Realtime Web Applications
BrazilJS - Node.JS Realtime Web ApplicationsBrazilJS - Node.JS Realtime Web Applications
BrazilJS - Node.JS Realtime Web Applications
 
DevInRio 2010 - NodeJS
DevInRio 2010 - NodeJSDevInRio 2010 - NodeJS
DevInRio 2010 - NodeJS
 

Último

EAD Curso - CIÊNCIA DE DADOS NA INDÚSTTRIA
EAD Curso - CIÊNCIA DE DADOS NA INDÚSTTRIAEAD Curso - CIÊNCIA DE DADOS NA INDÚSTTRIA
EAD Curso - CIÊNCIA DE DADOS NA INDÚSTTRIAMarcio Venturelli
 
ATIVIDADE 1 - GESTÃO DE PESSOAS E DESENVOLVIMENTO DE EQUIPES - 52_2024.docx
ATIVIDADE 1 - GESTÃO DE PESSOAS E DESENVOLVIMENTO DE EQUIPES - 52_2024.docxATIVIDADE 1 - GESTÃO DE PESSOAS E DESENVOLVIMENTO DE EQUIPES - 52_2024.docx
ATIVIDADE 1 - GESTÃO DE PESSOAS E DESENVOLVIMENTO DE EQUIPES - 52_2024.docx2m Assessoria
 
Entrevistas, artigos, livros & citações de Paulo Pagliusi
Entrevistas, artigos, livros & citações de Paulo PagliusiEntrevistas, artigos, livros & citações de Paulo Pagliusi
Entrevistas, artigos, livros & citações de Paulo PagliusiPaulo Pagliusi, PhD, CISM
 
Aula 01 - Introducao a Processamento de Frutos e Hortalicas.pdf
Aula 01 - Introducao a Processamento de Frutos e Hortalicas.pdfAula 01 - Introducao a Processamento de Frutos e Hortalicas.pdf
Aula 01 - Introducao a Processamento de Frutos e Hortalicas.pdfInocencioHoracio3
 
ATIVIDADE 1 - CÁLCULO DIFERENCIAL E INTEGRAL II - 52_2024.docx
ATIVIDADE 1 - CÁLCULO DIFERENCIAL E INTEGRAL II - 52_2024.docxATIVIDADE 1 - CÁLCULO DIFERENCIAL E INTEGRAL II - 52_2024.docx
ATIVIDADE 1 - CÁLCULO DIFERENCIAL E INTEGRAL II - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 
COI CENTRO DE OPERAÇÕES INDUSTRIAIS NAS USINAS
COI CENTRO DE OPERAÇÕES INDUSTRIAIS NAS USINASCOI CENTRO DE OPERAÇÕES INDUSTRIAIS NAS USINAS
COI CENTRO DE OPERAÇÕES INDUSTRIAIS NAS USINASMarcio Venturelli
 
Palestras sobre Cibersegurança em Eventos - Paulo Pagliusi
Palestras sobre Cibersegurança em Eventos - Paulo PagliusiPalestras sobre Cibersegurança em Eventos - Paulo Pagliusi
Palestras sobre Cibersegurança em Eventos - Paulo PagliusiPaulo Pagliusi, PhD, CISM
 

Último (8)

EAD Curso - CIÊNCIA DE DADOS NA INDÚSTTRIA
EAD Curso - CIÊNCIA DE DADOS NA INDÚSTTRIAEAD Curso - CIÊNCIA DE DADOS NA INDÚSTTRIA
EAD Curso - CIÊNCIA DE DADOS NA INDÚSTTRIA
 
ATIVIDADE 1 - GESTÃO DE PESSOAS E DESENVOLVIMENTO DE EQUIPES - 52_2024.docx
ATIVIDADE 1 - GESTÃO DE PESSOAS E DESENVOLVIMENTO DE EQUIPES - 52_2024.docxATIVIDADE 1 - GESTÃO DE PESSOAS E DESENVOLVIMENTO DE EQUIPES - 52_2024.docx
ATIVIDADE 1 - GESTÃO DE PESSOAS E DESENVOLVIMENTO DE EQUIPES - 52_2024.docx
 
Entrevistas, artigos, livros & citações de Paulo Pagliusi
Entrevistas, artigos, livros & citações de Paulo PagliusiEntrevistas, artigos, livros & citações de Paulo Pagliusi
Entrevistas, artigos, livros & citações de Paulo Pagliusi
 
Aula 01 - Introducao a Processamento de Frutos e Hortalicas.pdf
Aula 01 - Introducao a Processamento de Frutos e Hortalicas.pdfAula 01 - Introducao a Processamento de Frutos e Hortalicas.pdf
Aula 01 - Introducao a Processamento de Frutos e Hortalicas.pdf
 
ATIVIDADE 1 - CÁLCULO DIFERENCIAL E INTEGRAL II - 52_2024.docx
ATIVIDADE 1 - CÁLCULO DIFERENCIAL E INTEGRAL II - 52_2024.docxATIVIDADE 1 - CÁLCULO DIFERENCIAL E INTEGRAL II - 52_2024.docx
ATIVIDADE 1 - CÁLCULO DIFERENCIAL E INTEGRAL II - 52_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
COI CENTRO DE OPERAÇÕES INDUSTRIAIS NAS USINAS
COI CENTRO DE OPERAÇÕES INDUSTRIAIS NAS USINASCOI CENTRO DE OPERAÇÕES INDUSTRIAIS NAS USINAS
COI CENTRO DE OPERAÇÕES INDUSTRIAIS NAS USINAS
 
Palestras sobre Cibersegurança em Eventos - Paulo Pagliusi
Palestras sobre Cibersegurança em Eventos - Paulo PagliusiPalestras sobre Cibersegurança em Eventos - Paulo Pagliusi
Palestras sobre Cibersegurança em Eventos - Paulo Pagliusi
 

Nodejs - A performance que eu sempre quis ter