SlideShare ist ein Scribd-Unternehmen logo
1 von 232
Downloaden Sie, um offline zu lesen
Beyond
With
#whoami
#ruby
I
Ruby
class Product < ActiveRecord::Base
after_create :set_initial_inventory
has_many :variants, :dependent => :destroy
has_many :images, :as => :viewable, :order => :position,
:dependent => :destroy
has_many :properties, :through => :product_properties
belongs_to :tax_category
validates_presence_of :name
validates_presence_of :master_price
validates_presence_of :description
make_permalink :with => :name, :field => :permalink
end
Model
Friday, August 7, 2009
“Tornar as coisas
simples fáceis e as
coisas difíceis possíveis”
Fisolofia Ruby
Código Bonito
Código Bonito
Don’t RepeatYourself
Código Bonito
Don’t RepeatYourself
Convention Over Configuration
class Booking < ActiveRecord::Base
belongs_to :hotel
belongs_to :user
validates_presence_of :hotel
validates_presence_of :user
validates_presence_of :credit_card
validates_presence_of :credit_card_name
validates_length_of :credit_card, :within => 16..16
validates_format_of :credit_card, :with => /^d*$/
validates_length_of :credit_card_name, :within => 3..70
def total
hotel.price * nights
end
def nights
((checkout_date - checkin_date) / 1.day).round
end
def to_s
"Booking(#{user},#{hotel})"
end
end
#números
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
0
22,5
45
67,5
90
Brasil Italia Espanha Japão EUA Inglaterra França AustráliaAlemanha Suiça
59 %
63 %
72 %73 %74 %74 %75 %
77 %78 %
86 %
% de usuários ativos nas Redes Sociais
Fonte:The Nielsen Company
2014
~ 70% dos adultos
serão usuários
regulares de
redes sociais
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
write
read
write write
read
Escalando DB na horizontal
Shard
Database
Shard
Database
Shard
Database
Shard
Database
Shard
Database
Shard
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
Por que então mais
uma tecnologia ?
Escalando na horizontal
Escalando na horizontal
Evented, non-blocking I/O
GoogleV8 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
Ruby on Rails
HTTPD Database
Ruby on Rails
HTTPD Database
Ruby on Rails
HTTPD Database
Ruby on Rails
HTTPD
RUBY
PROCESS
Database
Ruby on Rails
HTTPD
RUBY
PROCESS
Database
BLOCK
Ruby on Rails
HTTPD
RUBY
PROCESS
RUBY
PROCESS
RUBY
PROCESS
EUBY
PROCESS
Database
BLOCK
BLOCK
BLOCK
BLOCK
Java
HTTPD Database
Servlet Container
Servlet
Java
HTTPD Database
Servlet Container
Servlet
Java
HTTPD Database
Servlet Container
Servlet
Java
HTTPD Database
Servlet Container
Thread
Servlet
Java
HTTPD Database
Servlet Container
Thread
Servlet
BLOCK
Java
HTTPD Database
Servlet Container
Thread
Thread
Thread
Thread
Thread
Thread
Thread
Servlet
BLOCK
BLOCK
BLOCK
BLOCK
BLOCK
BLOCK
BLOCK
Apenas um processo
abrindo uma thread
para cada request
Produtividade do
programador mais que
performance da
tecnologia
Java Rumble ?!?
:p
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 ?
Apache vs NGINX
concurrency × reqs/sec
http://blog.webfaction.com/a-little-holiday-present
concurrency × reqs/sec
http://blog.webfaction.com/a-little-holiday-present
Apache vs NGINX
concurrency × memory
http://blog.webfaction.com/a-little-holiday-present
concurrency × reqs/sec
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
Pense bem antes de
usar uma thread por
request quando
precisar suportar alta
concorrência
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
Evite threads
Pattern para atender
alta concorrência
Evite threads
Use um Event Loop
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
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
Latência de I/O
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 não bloqueante
I/O bloqueante
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 bloqueante
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
Arquitetura
event
loop
(libev)
thread
pool
(libeio)
V8
Node Bindings
Node standard libraryJavascript
C
#reactor
ev_loop()
Pilha de execução
I/O em disco (bloqueante)
ev_loop()
socket_readdable(1)
Pilha de execução
I/O em disco (bloqueante)
ev_loop()
socket_readdable(1)
http_parse(1)
Pilha de execução
I/O em disco (bloqueante)
ev_loop()
socket_readdable(1)
http_parse(1)
Pilha de execução
load(“index.html”)
I/O em disco (bloqueante)
ev_loop()
socket_readdable(1)
http_parse(1)
Pilha de execução
I/O em disco (bloqueante)
ev_loop()
socket_readdable(1)
Pilha de execução
I/O em disco (bloqueante)
ev_loop()
Pilha de execução
I/O em disco (bloqueante)
ev_loop()
Pilha de execução
I/O em RAM (não bloqueante)
ev_loop()
socket_readdable(2)
Pilha de execução
I/O em RAM (não bloqueante)
ev_loop()
socket_readdable(2)
http_parse(2)
Pilha de execução
I/O em RAM (não bloqueante)
ev_loop()
socket_readdable(2)
http_parse(2)
Pilha de execução
http_respond(2)
I/O em RAM (não bloqueante)
ev_loop()
socket_readdable(2)
http_parse(2)
Pilha de execução
I/O em RAM (não bloqueante)
ev_loop()
socket_readdable(2)
Pilha de execução
I/O em RAM (não bloqueante)
ev_loop()
Pilha de execução
I/O em RAM (não bloqueante)
ev_loop()
Pilha de execução
Arquivo carregou do disco
ev_loop()
file_loaded()
Pilha de execução
Arquivo carregou do disco
ev_loop()
file_loaded()
http_respond(1)
Pilha de execução
Arquivo carregou do disco
ev_loop()
file_loaded()
Pilha de execução
Arquivo carregou do disco
ev_loop()
Pilha de execução
Arquivo carregou do disco
Arquitetura Web
Arquitetura Web
Nginx
Arquitetura Web
Ruby
on
Rails
Ruby
on
Rails
Ruby
on
Rails
Ruby
on
Rails
Ruby
on
Rails
Nginx
Arquitetura Web
Ruby
on
Rails
Ruby
on
Rails
Ruby
on
Rails
Ruby
on
Rails
Ruby
on
Rails
Nginx
NodeJS
Arquitetura Web
Nginx
#bizarrices
Isso é bonito?
em-syslog
em-spec
em-dns
em-syslog
em-proxy
em-spec
em-dns
em-syslog
em-ruby-irc
em-memcache-client
em-mysql
em-proxy
em-syncrony
em-spec
em-dns
em-syslog
em-ruby-irc
em-mongo
em-memcache-client em-simplechat
em-mysql
em-http-request em-websocket
em-proxy
em-syncrony
em-redis
em-spec
em-ftpd
em-dns
em-jabberbot
em-resolv-replace
em-syslog
em-dir-watcher
em-ruby-irc
em-net-http
em-s3 em-mongo
em-memcache-client em-simplechat
EM-*
WS-*
#simplicidade
Código bloqueante
Código bloqueante
Código não-bloqueante
Callback
Callback
Callback
#evolução
Don’t RepeatYourself
XML
Properties
YAML
Configurações
XML
Properties
YAML
Configurações
JSON
Transporte
Configurações
JSON
Configurações
JSON
Configurações
JSON
Transporte
Configurações
Javascript Object Notation
Transporte
Java Ruby Python
Server Side
PHP
Java Ruby Python
Server Side
PHP
Client Side
JavaScript
Server Side
JavaScript
Server Side
JavaScript
Server Side
JavaScript
Client Side
#ecossistema
Sinatra detected !
TDD / BDD
TDD / BDD
#http://github.com/visionmedia/expresso/
TDD / BDD
#vows - http://vowsjs.org/
#last-thing
on
Client Ruby on Rails
Client Ruby on Rails
Servidor em Node.js
Servidor em Node.js
Código Client-Side ( JS )
Código Client-Side ( JS )
Código Server Coffeescript
#conclusão
I
Ruby
Obrigado !!!
Emerson Macedo
@emerleite
http://nodecasts.org
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
http://en.wikipedia.org/wiki/Reactor_pattern

Weitere ähnliche Inhalte

Was ist angesagt?

Integrando sua App ao Mundo via REST/JSON
Integrando sua App ao Mundo via REST/JSONIntegrando sua App ao Mundo via REST/JSON
Integrando sua App ao Mundo via REST/JSONMario Guedes
 
Deploy automático em projeto PHP - PHPSPIMA 2016
Deploy automático em projeto PHP - PHPSPIMA 2016Deploy automático em projeto PHP - PHPSPIMA 2016
Deploy automático em projeto PHP - PHPSPIMA 2016Felipe Klerk Signorini
 
Conhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkConhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkMario Guedes
 
9 erros que desenvolvedores Node.js cometem
9 erros que desenvolvedores Node.js cometem9 erros que desenvolvedores Node.js cometem
9 erros que desenvolvedores Node.js cometemFernando Henriques
 
T03_LM3: Javascript (2013-2014)
T03_LM3: Javascript (2013-2014)T03_LM3: Javascript (2013-2014)
T03_LM3: Javascript (2013-2014)Carlos Santos
 
Big data da teoria à prática
Big data  da teoria à práticaBig data  da teoria à prática
Big data da teoria à práticaMario Guedes
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAThiago Cifani
 
Evitando a fadiga com Laravel Homestead
Evitando a fadiga com Laravel HomesteadEvitando a fadiga com Laravel Homestead
Evitando a fadiga com Laravel HomesteadDanilo Esser
 
Workshop react + adonis.js
Workshop react + adonis.jsWorkshop react + adonis.js
Workshop react + adonis.jsDenis Velrino
 
(A04 e A05) LabMM3 - JavaScript
(A04 e A05) LabMM3 - JavaScript(A04 e A05) LabMM3 - JavaScript
(A04 e A05) LabMM3 - JavaScriptCarlos Santos
 
Laravel 5: Entenda o ambiente e a estrutura MVC
 Laravel 5: Entenda o ambiente e a estrutura MVC Laravel 5: Entenda o ambiente e a estrutura MVC
Laravel 5: Entenda o ambiente e a estrutura MVCMichael Douglas
 
APIs do Jeito Certo
APIs do Jeito CertoAPIs do Jeito Certo
APIs do Jeito CertoRavan Scafi
 
Cacheamento Lado Servidor
Cacheamento Lado ServidorCacheamento Lado Servidor
Cacheamento Lado ServidorMario Guedes
 
Integração Contínua com Cruise Control e phpUnderControl
Integração Contínua com Cruise Control e phpUnderControlIntegração Contínua com Cruise Control e phpUnderControl
Integração Contínua com Cruise Control e phpUnderControlDiego Tremper
 

Was ist angesagt? (20)

Integrando sua App ao Mundo via REST/JSON
Integrando sua App ao Mundo via REST/JSONIntegrando sua App ao Mundo via REST/JSON
Integrando sua App ao Mundo via REST/JSON
 
Curso de ReactJS
Curso de ReactJSCurso de ReactJS
Curso de ReactJS
 
Deploy automático em projeto PHP - PHPSPIMA 2016
Deploy automático em projeto PHP - PHPSPIMA 2016Deploy automático em projeto PHP - PHPSPIMA 2016
Deploy automático em projeto PHP - PHPSPIMA 2016
 
Conhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkConhecendo o Novo REST Framework
Conhecendo o Novo REST Framework
 
9 erros que desenvolvedores Node.js cometem
9 erros que desenvolvedores Node.js cometem9 erros que desenvolvedores Node.js cometem
9 erros que desenvolvedores Node.js cometem
 
T03_LM3: Javascript (2013-2014)
T03_LM3: Javascript (2013-2014)T03_LM3: Javascript (2013-2014)
T03_LM3: Javascript (2013-2014)
 
Big data da teoria à prática
Big data  da teoria à práticaBig data  da teoria à prática
Big data da teoria à prática
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
Evitando a fadiga com Laravel Homestead
Evitando a fadiga com Laravel HomesteadEvitando a fadiga com Laravel Homestead
Evitando a fadiga com Laravel Homestead
 
Workshop react + adonis.js
Workshop react + adonis.jsWorkshop react + adonis.js
Workshop react + adonis.js
 
(A04 e A05) LabMM3 - JavaScript
(A04 e A05) LabMM3 - JavaScript(A04 e A05) LabMM3 - JavaScript
(A04 e A05) LabMM3 - JavaScript
 
Laravel 5: Entenda o ambiente e a estrutura MVC
 Laravel 5: Entenda o ambiente e a estrutura MVC Laravel 5: Entenda o ambiente e a estrutura MVC
Laravel 5: Entenda o ambiente e a estrutura MVC
 
Plack
PlackPlack
Plack
 
Html5
Html5Html5
Html5
 
APIs do Jeito Certo
APIs do Jeito CertoAPIs do Jeito Certo
APIs do Jeito Certo
 
MongoDB + PHP
MongoDB + PHPMongoDB + PHP
MongoDB + PHP
 
Security & PHP
Security & PHPSecurity & PHP
Security & PHP
 
Cacheamento Lado Servidor
Cacheamento Lado ServidorCacheamento Lado Servidor
Cacheamento Lado Servidor
 
Integração Contínua com Cruise Control e phpUnderControl
Integração Contínua com Cruise Control e phpUnderControlIntegração Contínua com Cruise Control e phpUnderControl
Integração Contínua com Cruise Control e phpUnderControl
 
Jugvale
JugvaleJugvale
Jugvale
 

Andere mochten auch

NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.Filipe Morelli
 
Método criado por paraense pode servir de base tecnológica para criar soluçõe...
Método criado por paraense pode servir de base tecnológica para criar soluçõe...Método criado por paraense pode servir de base tecnológica para criar soluçõe...
Método criado por paraense pode servir de base tecnológica para criar soluçõe...João Gabriel Lima
 
IoTizando com JavaScript
IoTizando com JavaScriptIoTizando com JavaScript
IoTizando com JavaScriptHeider Lopes
 
Angular Nodejs e com mongolab
Angular Nodejs e com mongolabAngular Nodejs e com mongolab
Angular Nodejs e com mongolabWende Mendes
 
DevInRio 2010 - NodeJS
DevInRio 2010 - NodeJSDevInRio 2010 - NodeJS
DevInRio 2010 - NodeJSEmerson Macedo
 
GDG NodeJS Sem Segredos
GDG NodeJS Sem SegredosGDG NodeJS Sem Segredos
GDG NodeJS Sem SegredosCaio Cutrim
 
EasyTaxi e MongoDB - Showcase
EasyTaxi e MongoDB - ShowcaseEasyTaxi e MongoDB - Showcase
EasyTaxi e MongoDB - ShowcaseYuri Teixeira
 
Equipe Origami City
Equipe Origami CityEquipe Origami City
Equipe Origami CityCEPMBB
 
Node js - O poder do JavaScript do lado do servidor
Node js  - O poder do JavaScript do lado do servidorNode js  - O poder do JavaScript do lado do servidor
Node js - O poder do JavaScript do lado do servidorRomulo Fagundes
 
Conhecendo o Nodejs
Conhecendo o NodejsConhecendo o Nodejs
Conhecendo o NodejsCaio Cutrim
 
MEAN Full Stack JavaScript - TaSafoConf 2015
MEAN Full Stack JavaScript - TaSafoConf 2015MEAN Full Stack JavaScript - TaSafoConf 2015
MEAN Full Stack JavaScript - TaSafoConf 2015Kaio Valente
 
NodeJS - E/S não-bloqueante - Dirigido a Eventos
NodeJS - E/S não-bloqueante - Dirigido a EventosNodeJS - E/S não-bloqueante - Dirigido a Eventos
NodeJS - E/S não-bloqueante - Dirigido a EventosÁtila Camurça
 
Guia utilização e desenvolvimento de aplicação no PaaS c9.io
Guia utilização e desenvolvimento de aplicação no PaaS c9.ioGuia utilização e desenvolvimento de aplicação no PaaS c9.io
Guia utilização e desenvolvimento de aplicação no PaaS c9.iomarcochella
 
Adwords Express: como anunciar?
Adwords Express: como anunciar?Adwords Express: como anunciar?
Adwords Express: como anunciar?Mateada
 
Mean Stack - Aplicações Web Modernas com MEAN
Mean Stack - Aplicações Web Modernas com MEANMean Stack - Aplicações Web Modernas com MEAN
Mean Stack - Aplicações Web Modernas com MEANJoão Gabriel Lima
 

Andere mochten auch (20)

NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.
 
Express 4
Express 4Express 4
Express 4
 
Hack Thursday - NodeJS
Hack Thursday - NodeJSHack Thursday - NodeJS
Hack Thursday - NodeJS
 
No Llores
No LloresNo Llores
No Llores
 
Método criado por paraense pode servir de base tecnológica para criar soluçõe...
Método criado por paraense pode servir de base tecnológica para criar soluçõe...Método criado por paraense pode servir de base tecnológica para criar soluçõe...
Método criado por paraense pode servir de base tecnológica para criar soluçõe...
 
IoTizando com JavaScript
IoTizando com JavaScriptIoTizando com JavaScript
IoTizando com JavaScript
 
Node js
Node jsNode js
Node js
 
Jquery 2
Jquery 2Jquery 2
Jquery 2
 
Angular Nodejs e com mongolab
Angular Nodejs e com mongolabAngular Nodejs e com mongolab
Angular Nodejs e com mongolab
 
DevInRio 2010 - NodeJS
DevInRio 2010 - NodeJSDevInRio 2010 - NodeJS
DevInRio 2010 - NodeJS
 
GDG NodeJS Sem Segredos
GDG NodeJS Sem SegredosGDG NodeJS Sem Segredos
GDG NodeJS Sem Segredos
 
EasyTaxi e MongoDB - Showcase
EasyTaxi e MongoDB - ShowcaseEasyTaxi e MongoDB - Showcase
EasyTaxi e MongoDB - Showcase
 
Equipe Origami City
Equipe Origami CityEquipe Origami City
Equipe Origami City
 
Node js - O poder do JavaScript do lado do servidor
Node js  - O poder do JavaScript do lado do servidorNode js  - O poder do JavaScript do lado do servidor
Node js - O poder do JavaScript do lado do servidor
 
Conhecendo o Nodejs
Conhecendo o NodejsConhecendo o Nodejs
Conhecendo o Nodejs
 
MEAN Full Stack JavaScript - TaSafoConf 2015
MEAN Full Stack JavaScript - TaSafoConf 2015MEAN Full Stack JavaScript - TaSafoConf 2015
MEAN Full Stack JavaScript - TaSafoConf 2015
 
NodeJS - E/S não-bloqueante - Dirigido a Eventos
NodeJS - E/S não-bloqueante - Dirigido a EventosNodeJS - E/S não-bloqueante - Dirigido a Eventos
NodeJS - E/S não-bloqueante - Dirigido a Eventos
 
Guia utilização e desenvolvimento de aplicação no PaaS c9.io
Guia utilização e desenvolvimento de aplicação no PaaS c9.ioGuia utilização e desenvolvimento de aplicação no PaaS c9.io
Guia utilização e desenvolvimento de aplicação no PaaS c9.io
 
Adwords Express: como anunciar?
Adwords Express: como anunciar?Adwords Express: como anunciar?
Adwords Express: como anunciar?
 
Mean Stack - Aplicações Web Modernas com MEAN
Mean Stack - Aplicações Web Modernas com MEANMean Stack - Aplicações Web Modernas com MEAN
Mean Stack - Aplicações Web Modernas com MEAN
 

Ähnlich wie Node.js e escalabilidade de aplicações web

RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJSRubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJSEmerson Macedo
 
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011Emerson Macedo
 
Nodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terNodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terEmerson 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
 
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015  Porto Alegre - Interfaces ricas com Rails e React.JSTDC2015  Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JSRodrigo Urubatan
 
Desenvolvimento web com Ruby on Rails (parte 1)
Desenvolvimento web com Ruby on Rails (parte 1)Desenvolvimento web com Ruby on Rails (parte 1)
Desenvolvimento web com Ruby on Rails (parte 1)Joao Lucas Santana
 
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
 
Desenvolvendo para WordPress com Docker, Git e WP-CLI
Desenvolvendo para WordPress com Docker, Git e WP-CLIDesenvolvendo para WordPress com Docker, Git e WP-CLI
Desenvolvendo para WordPress com Docker, Git e WP-CLIRudá Almeida
 
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
 
Desenvolvendo com Dojo Toolkit
Desenvolvendo com Dojo ToolkitDesenvolvendo com Dojo Toolkit
Desenvolvendo com Dojo ToolkitFlávio Lisboa
 
Node.js: 5 razões para começar a utilizar
Node.js: 5 razões para começar a utilizarNode.js: 5 razões para começar a utilizar
Node.js: 5 razões para começar a utilizarFilipe Falcão
 
Caipira agil automacao front end selenium
Caipira agil automacao front end seleniumCaipira agil automacao front end selenium
Caipira agil automacao front end seleniumQualister
 
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
 

Ähnlich wie Node.js e escalabilidade de aplicações web (20)

RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJSRubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
 
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
 
Nodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terNodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis ter
 
Secomp 2011 - Node.JS - Introdução
Secomp 2011 - Node.JS - IntroduçãoSecomp 2011 - Node.JS - Introdução
Secomp 2011 - Node.JS - Introdução
 
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015  Porto Alegre - Interfaces ricas com Rails e React.JSTDC2015  Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
 
Debug de cabo a rabo
Debug de cabo a raboDebug de cabo a rabo
Debug de cabo a rabo
 
Rest workshop
Rest workshopRest workshop
Rest workshop
 
React Native - JSday
React Native - JSdayReact Native - JSday
React Native - JSday
 
Como fazer boas libs
Como fazer boas libs Como fazer boas libs
Como fazer boas libs
 
Rest Teoria E Pratica
Rest Teoria E PraticaRest Teoria E Pratica
Rest Teoria E Pratica
 
Desenvolvimento web com Ruby on Rails (parte 1)
Desenvolvimento web com Ruby on Rails (parte 1)Desenvolvimento web com Ruby on Rails (parte 1)
Desenvolvimento web com Ruby on Rails (parte 1)
 
Continuous Deployment e DevOps na Nuvem
Continuous Deployment e DevOps na NuvemContinuous Deployment e DevOps na Nuvem
Continuous Deployment e DevOps na Nuvem
 
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
 
Lab
LabLab
Lab
 
Desenvolvendo para WordPress com Docker, Git e WP-CLI
Desenvolvendo para WordPress com Docker, Git e WP-CLIDesenvolvendo para WordPress com Docker, Git e WP-CLI
Desenvolvendo para WordPress com Docker, Git e WP-CLI
 
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
 
Desenvolvendo com Dojo Toolkit
Desenvolvendo com Dojo ToolkitDesenvolvendo com Dojo Toolkit
Desenvolvendo com Dojo Toolkit
 
Node.js: 5 razões para começar a utilizar
Node.js: 5 razões para começar a utilizarNode.js: 5 razões para começar a utilizar
Node.js: 5 razões para começar a utilizar
 
Caipira agil automacao front end selenium
Caipira agil automacao front end seleniumCaipira agil automacao front end selenium
Caipira agil automacao front end selenium
 
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
 

Mehr von 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
 

Mehr von Emerson Macedo (16)

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
 

Node.js e escalabilidade de aplicações web