Suche senden
Hochladen
RubyMasters 2011 - Beyond Ruby with NodeJS
•
5 gefällt mir
•
876 views
Emerson Macedo
Folgen
Palestra online feita na RubyMasters Conf 2011
Weniger lesen
Mehr lesen
Technologie
Melden
Teilen
Melden
Teilen
1 von 238
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Recomendados
Secomp 2011 - Node.JS - Introdução
Secomp 2011 - Node.JS - Introdução
Emerson Macedo
Containers com docker #CPRecife4
Containers com docker #CPRecife4
David Ruiz
Imergindo jvm[Apresentação ]
Imergindo jvm[Apresentação ]
Otávio Santana
Minicurso groovy grails
Minicurso groovy grails
Victor Hugo Germano
Um milhao de usuários simultâneos
Um milhao de usuários simultâneos
Fernando Ike
Docker 101 e Ambientes Imutáveis
Docker 101 e Ambientes Imutáveis
Wallison Marra
Pouch db tdc2016
Pouch db tdc2016
Itacir Pompeu
Introdução ao Windows Azure - Sessão 2 (mais prática)
Introdução ao Windows Azure - Sessão 2 (mais prática)
Giovanni Bassi
Más contenido relacionado
Was ist angesagt?
Docker Everywhere - MTAC Week
Docker Everywhere - MTAC Week
Luiz Carlos Faria
NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.
Filipe Morelli
Hangout Tempo Real Eventos - Nodejs - Os Primeiros Passos
Hangout Tempo Real Eventos - Nodejs - Os Primeiros Passos
Jackson F. de A. Mafra
Java no linux
Java no linux
Luciana Cristina
Talk no Meetup LaravelSP #3
Talk no Meetup LaravelSP #3
Wellington Silva
Node.js - #1 - Introdução - Rodrigo Branas
Node.js - #1 - Introdução - Rodrigo Branas
Rodrigo Branas
Was ist angesagt?
(6)
Docker Everywhere - MTAC Week
Docker Everywhere - MTAC Week
NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.
Hangout Tempo Real Eventos - Nodejs - Os Primeiros Passos
Hangout Tempo Real Eventos - Nodejs - Os Primeiros Passos
Java no linux
Java no linux
Talk no Meetup LaravelSP #3
Talk no Meetup LaravelSP #3
Node.js - #1 - Introdução - Rodrigo Branas
Node.js - #1 - Introdução - Rodrigo Branas
Andere mochten auch
Jogos com NodeJS e Browser - QCON SP 2011
Jogos com NodeJS e Browser - QCON SP 2011
Emerson Macedo
Microservices Case: GloboTV e Globosat Play
Microservices Case: GloboTV e Globosat Play
Emerson Macedo
Javascript Orientado a Objetos - Fisl12
Javascript Orientado a Objetos - Fisl12
Emerson Macedo
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Emerson Macedo
Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010
Emerson Macedo
DevInRio 2010 - NodeJS
DevInRio 2010 - NodeJS
Emerson Macedo
Andere mochten auch
(6)
Jogos com NodeJS e Browser - QCON SP 2011
Jogos com NodeJS e Browser - QCON SP 2011
Microservices Case: GloboTV e Globosat Play
Microservices Case: GloboTV e Globosat Play
Javascript Orientado a Objetos - Fisl12
Javascript Orientado a Objetos - Fisl12
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010
DevInRio 2010 - NodeJS
DevInRio 2010 - NodeJS
Ähnlich wie RubyMasters 2011 - Beyond Ruby with NodeJS
Nodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis ter
Emerson Macedo
Node.js no Pagar.me
Node.js no Pagar.me
Pedro Franceschi
Node.js: 5 razões para começar a utilizar
Node.js: 5 razões para começar a utilizar
Filipe Falcão
Uma visão rápida sobre Nodejs
Uma visão rápida sobre Nodejs
Rafael Soares
TDC2015 - Internet das Coisas - OpenDevice
TDC2015 - Internet das Coisas - OpenDevice
Ricardo Rufino
Web Sphere
Web Sphere
Fabricio Carvalho
O bom, o mau, o vilão... e o node.js
O bom, o mau, o vilão... e o node.js
Nuno Paz
Netbeans Slides
Netbeans Slides
Renato Puccini
Você não deveria escrever uma API para isso
Você não deveria escrever uma API para isso
Junior Conte
SAPO Broker
SAPO Broker
codebits
Criando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & Docker
Giovanni Kenji Shiroma
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
Thiago Cifani
Desenvolvimento web com python e web2py
Desenvolvimento web com python e web2py
Relsi Maron
Rest Teoria E Pratica
Rest Teoria E Pratica
Sergio Azevedo
Conhecendo o Novo REST Framework
Conhecendo o Novo REST Framework
Mario Guedes
Navegando em um mar de siglas do mundo java
Navegando em um mar de siglas do mundo java
Andrei Tognolo
Rest Java One
Rest Java One
Dextra
Rest workshop
Rest workshop
Diogo Gomes
Continuous Deployment e DevOps na Nuvem
Continuous Deployment e DevOps na Nuvem
Amazon Web Services LATAM
Desenvolvimento web com Ruby on Rails (parte 1)
Desenvolvimento web com Ruby on Rails (parte 1)
Joao Lucas Santana
Ähnlich wie RubyMasters 2011 - Beyond Ruby with NodeJS
(20)
Nodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis ter
Node.js no Pagar.me
Node.js no Pagar.me
Node.js: 5 razões para começar a utilizar
Node.js: 5 razões para começar a utilizar
Uma visão rápida sobre Nodejs
Uma visão rápida sobre Nodejs
TDC2015 - Internet das Coisas - OpenDevice
TDC2015 - Internet das Coisas - OpenDevice
Web Sphere
Web Sphere
O bom, o mau, o vilão... e o node.js
O bom, o mau, o vilão... e o node.js
Netbeans Slides
Netbeans Slides
Você não deveria escrever uma API para isso
Você não deveria escrever uma API para isso
SAPO Broker
SAPO Broker
Criando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & Docker
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
Desenvolvimento web com python e web2py
Desenvolvimento web com python e web2py
Rest Teoria E Pratica
Rest Teoria E Pratica
Conhecendo o Novo REST Framework
Conhecendo o Novo REST Framework
Navegando em um mar de siglas do mundo java
Navegando em um mar de siglas do mundo java
Rest Java One
Rest Java One
Rest workshop
Rest workshop
Continuous Deployment e DevOps na Nuvem
Continuous Deployment e DevOps na Nuvem
Desenvolvimento web com Ruby on Rails (parte 1)
Desenvolvimento web com Ruby on Rails (parte 1)
Mehr von Emerson Macedo
ElixirConf 2019 - 10M Monthly Ad Insertions with Phoenix and Broadway
ElixirConf 2019 - 10M Monthly Ad Insertions with Phoenix and Broadway
Emerson Macedo
The Conf 2019 - Elixir - Emerson Macedo
The Conf 2019 - Elixir - Emerson Macedo
Emerson Macedo
Wanna be a manager? Not today - QCon São Paulo 2019
Wanna be a manager? Not today - QCon São Paulo 2019
Emerson Macedo
TheConf 2018 - How does your app behave when everything goes wrong
TheConf 2018 - How does your app behave when everything goes wrong
Emerson Macedo
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 2017
Emerson Macedo
Beyond your daily coding - The Conf Brazil 2017 Keynote
Beyond your daily coding - The Conf Brazil 2017 Keynote
Emerson Macedo
CEJS 2016 - Please learn that shit
CEJS 2016 - Please learn that shit
Emerson 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 Olympics
Emerson Macedo
QCon SP 2016 - Video Authorization: from chaos to 25ms response time
QCon SP 2016 - Video Authorization: from chaos to 25ms response time
Emerson Macedo
Qcon Rio 2015 - Microservices
Qcon Rio 2015 - Microservices
Emerson Macedo
1 encontro Node.JS Brasil
1 encontro Node.JS Brasil
Emerson Macedo
BrazilJS - Node.JS Realtime Web Applications
BrazilJS - Node.JS Realtime Web Applications
Emerson Macedo
Mehr von Emerson Macedo
(13)
ElixirConf 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 Macedo
Wanna 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 wrong
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 2017
Beyond 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 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 Olympics
QCon 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 - Microservices
1 encontro Node.JS Brasil
1 encontro Node.JS Brasil
BrazilJS - Node.JS Realtime Web Applications
BrazilJS - Node.JS Realtime Web Applications
RubyMasters 2011 - Beyond Ruby with NodeJS
1.
Beyond With
2.
#whoami
4.
#ruby
5.
I Ruby
6.
Model
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 Friday, August 7, 2009
7.
“Tornar as coisas
simples fáceis e as coisas difíceis possíveis” Fisolofia Ruby
8.
Código Bonito
9.
Código Bonito Don’t Repeat
Yourself
10.
Código Bonito
Don’t Repeat Yourself Convention Over Configuration
11.
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
14.
#números
15.
2010
16.
~ 2 bilhões
de usuários de internet em todo mundo
18.
68 milhões de
usuários
19.
68 milhões de
usuários 37 milhões são ativos
20.
Usuários de Internet
no Mundo (em milhões) 2.000 milhões 2000 1500 1000 500 360 milhões 0 2000 2010
21.
Usuários de Internet
no Brasil (em milhões) 70 milhões 70 52,5 35 17,5 10 milhões 0 2000 2010
22.
% de usuários
ativos nas Redes Sociais 90 86 % 78 % 77 % 75 % 74 % 74 % 73 % 72 % 67,5 63 % 59 % 45 22,5 0 Brasil Italia Espanha Japão EUA Inglaterra França Austrália Alemanha Suiça Fonte: The Nielsen Company
24.
2014
25.
~ 70% dos
adultos serão usuários regulares de redes sociais
30.
Estrutura física de servidores
para escalar
31.
Escalando na vertical
32.
Escalando na vertical
33.
Escalando na horizontal
34.
Escalando na horizontal
35.
Escalando na horizontal
36.
Escalando na horizontal
38.
Escalando DB na
horizontal re ad ad re write write write
39.
Escalando DB na
horizontal Shard Shard Shard Shard Shard Shard Database Database Database Database Database Database
41.
Arquitetura pra fazer
o software escalar
42.
Pattern para atender
muitos requests
43.
Pattern para atender
muitos requests Finalize a requisição o mais rápido possível
44.
HTTP GET
49.
HTTP POST
55.
Por que então
mais uma tecnologia ?
57.
Escalando na horizontal
58.
Escalando na horizontal
61.
Qual é o
problema das tecnologias atuais ?
62.
Como manter conectados 10,
20 ou 30 mil usuários simultâneos ?
63.
Nosso código costuma
ser escrito assim
64.
Nosso código costuma
ser escrito assim O que o software está fazendo enquanto a querie executa ?
65.
Na maioria dos
casos está travado esperando a resposta
66.
Ruby on Rails HTTPD
Database
67.
Ruby on Rails HTTPD
Database
68.
Ruby on Rails HTTPD
Database
69.
Ruby on Rails
RUBY PROCESS HTTPD Database
70.
Ruby on Rails
RUBY BLOCK PROCESS HTTPD Database
71.
Ruby on Rails
RUBY BLOCK PROCESS RUBY BLOCK PROCESS HTTPD Database RUBY BLOCK PROCESS EUBY PROCESS BLOCK
76.
Java
Servlet Container HTTPD Servlet Database
77.
Java
Servlet Container HTTPD Servlet Database
78.
Java
Servlet Container HTTPD Servlet Database
79.
Java
Servlet Container Thread HTTPD Servlet Database
80.
Java
Servlet Container Thread BLOCK HTTPD Servlet Database
81.
Java
Servlet Container Thread BLOCK Thread BLOCK Thread BLOCK HTTPD Servlet Database Thread BLOCK Thread BLOCK Thread BLOCK Thread BLOCK
82.
Apenas um processo abrindo
uma thread para cada request
85.
Produtividade do programador mais
que performance da tecnologia
86.
Apenas um processo abrindo
uma thread para cada request
87.
Parece bom mas
...
88.
Como manter conectados 10,
20 ou 30 mil usuários simultâneos ?
89.
Como manter conectados 10,
20 ou 30 mil usuários simultâneos ? 30 mil threads ?
90.
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
91.
concurrency × reqs/sec
Apache vs NGINX concurrency × memory http://blog.webfaction.com/a-little-holiday-present http://blog.webfaction.com/a-little-holiday-present
92.
Apache cria uma thread
por request
93.
Troca de contexto entre
theads tem um custo
94.
Cada OS Thread cria
uma pilha de execução nova
95.
Pense bem antes
de usar uma thread por request quando precisar suportar alta concorrência
97.
Pattern para atender
muitos requests Finalize a requisição o mais rápido possível
98.
Pattern para atender
alta concorrência
99.
Pattern para atender
alta concorrência Evite threads
100.
Pattern para atender
alta concorrência Evite threads Use um Event Loop
101.
Performance
!= Escalabilidade
102.
Performance
!= Escalabilidade mas ...
103.
Uma performance melhor ajuda
a escalar com menos recursos
106.
Precisamos fazer I/O
de outra maneira
107.
Latência de I/O
108.
Latência de I/O L1
3 ciclos
109.
Latência de I/O L1
3 ciclos L2 14 ciclos
110.
Latência de I/O
L1 3 ciclos L2 14 ciclos RAM 250 ciclos
111.
Latência de I/O
L1 3 ciclos L2 14 ciclos RAM 250 ciclos Disco 41.000.000 ciclos
112.
Latência de I/O
L1 3 ciclos L2 14 ciclos RAM 250 ciclos Disco 41.000.000 ciclos Rede 240.000.000 ciclos
113.
Latência de I/O
L1 3 ciclos L2 14 ciclos RAM 250 ciclos Disco 41.000.000 ciclos Rede 240.000.000 ciclos
114.
I/O não bloqueante
115.
I/O não bloqueante
L1 3 ciclos L2 14 ciclos RAM 250 ciclos
116.
I/O não bloqueante
L1 3 ciclos L2 14 ciclos RAM 250 ciclos I/O bloqueante
117.
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
118.
Infraestrutura não bloqueante,
puramente baseada em eventos, para desenvolver software de alta concorrência
119.
Servidor TCP simples
em NodeJS O código acima faz com que a execução retorne imediatamente ao event loop
120.
Por que já
não faziamos dessa forma ?
122.
POSIX Assync I/O
não suportado por todos os S.Os
123.
POSIX Assync I/O
não suportado por todos os S.Os libmysql_client não permite query async
124.
Filosofia do NodeJS
125.
Filosofia do NodeJS Todo
I/O deveria ser feito desta forma
126.
Arquitetura Javascript
Node standard library C Node Bindings thread event pool loop V8 (libeio) (libev)
127.
#reactor
129.
Pilha de execução
ev_loop() I/O em disco (bloqueante)
130.
Pilha de execução
socket_readdable(1) ev_loop() I/O em disco (bloqueante)
131.
Pilha de execução
http_parse(1) socket_readdable(1) ev_loop() I/O em disco (bloqueante)
132.
Pilha de execução
load(“index.html”) http_parse(1) socket_readdable(1) ev_loop() I/O em disco (bloqueante)
133.
Pilha de execução
http_parse(1) socket_readdable(1) ev_loop() I/O em disco (bloqueante)
134.
Pilha de execução
socket_readdable(1) ev_loop() I/O em disco (bloqueante)
135.
Pilha de execução
ev_loop() I/O em disco (bloqueante)
136.
Pilha de execução
ev_loop() I/O em RAM (não bloqueante)
137.
Pilha de execução
socket_readdable(2) ev_loop() I/O em RAM (não bloqueante)
138.
Pilha de execução
http_parse(2) socket_readdable(2) ev_loop() I/O em RAM (não bloqueante)
139.
Pilha de execução
http_respond(2) http_parse(2) socket_readdable(2) ev_loop() I/O em RAM (não bloqueante)
140.
Pilha de execução
http_parse(2) socket_readdable(2) ev_loop() I/O em RAM (não bloqueante)
141.
Pilha de execução
socket_readdable(2) ev_loop() I/O em RAM (não bloqueante)
142.
Pilha de execução
ev_loop() I/O em RAM (não bloqueante)
143.
Pilha de execução
ev_loop() Arquivo carregou do disco
144.
Pilha de execução
file_loaded() ev_loop() Arquivo carregou do disco
145.
Pilha de execução
http_respond(1) file_loaded() ev_loop() Arquivo carregou do disco
146.
Pilha de execução
file_loaded() ev_loop() Arquivo carregou do disco
147.
Pilha de execução
ev_loop() Arquivo carregou do disco
148.
Arquitetura Web
149.
Arquitetura Web
Nginx
150.
Arquitetura Web
Nginx Ruby Ruby Ruby Ruby Ruby on on on on on Rails Rails Rails Rails Rails
151.
Arquitetura Web
Nginx Ruby Ruby Ruby Ruby Ruby on on on on on NodeJS Rails Rails Rails Rails Rails
152.
Arquitetura Web
Nginx
153.
Arquitetura Web
Nginx NodeJS
154.
Arquitetura Web
NodeJS
157.
#bizarrices
162.
Isso é bonito?
164.
em-syslog
165.
em-dns
em-syslog em-spec
166.
em-proxy
em-dns em-syslog em-ruby-irc em-spec em-memcache-client
167.
em-mysql
em-proxy em-dns em-mongo em-syncrony em-syslog em-ruby-irc em-spec em-memcache-client em-simplechat
168.
em-mysql
em-resolv-replace em-http-request em-websocket em-proxy em-dns em-s3 em-mongo em-syncrony em-syslog em-dir-watcher em-ftpd em-jabberbot em-redis em-ruby-irc em-spec em-net-http em-memcache-client em-simplechat
169.
EM-*
170.
WS-*
171.
#simplicidade
172.
Código bloqueante
173.
Código bloqueante Código não-bloqueante
177.
Callback
178.
Callback Callback
179.
#evolução
182.
Don’t Repeat Yourself
189.
Configurações
Properties XML YAML
190.
Configurações
Properties XML YAML JSON Transporte
191.
Configurações
JSON
192.
Configurações
JSON
193.
Configurações
JSON Transporte
194.
Configurações Javascript Object Notation
Transporte
195.
Server Side Java
Ruby Python PHP
196.
Server Side Java
Ruby Python PHP Client Side JavaScript
197.
Server Side JavaScript
198.
Server Side JavaScript
199.
Server Side JavaScript Client
Side
200.
#ecossistema
204.
Sinatra detected !
206.
Testes Automatizados
207.
Testes Automatizados #https://github.com/caolan/nodeunit
222.
#LIVE
223.
on
224.
Client Ruby on
Rails
225.
Client Ruby on
Rails
226.
Servidor em Node.js
227.
Servidor em Node.js
228.
Código Client-Side (
JS )
229.
Código Client-Side (
JS )
230.
Código Server Coffeescript
231.
#conclusão
232.
I Ruby
238.
Obrigado !!!
Emerson Macedo @emerleite http://nodecasts.org http://codificando.com
Jetzt herunterladen