SlideShare uma empresa Scribd logo
Event Machine
                       I/O não bloqueante escalável em Ruby




Friday, August 5, 11
Sobre Mim

                • Wilker Lúcio
                • Consultor para Kajabi (Ruby on Rails)
                • http://github.com/wilkerlucio
                • @wilkerlucio
                • wilkerlucio@gmail.com


Friday, August 5, 11
Problema C10K




Friday, August 5, 11
O que é Event Machine?



                • Implementação da “design pattern” Reactor
                       • Similar a Node (Javascript) ou Twisted (Python)




Friday, August 5, 11
Quem usa Event Machine?

                • Engine Yard
                • Heroku
                • Github
                • Campfire
                • ...


Friday, August 5, 11
O que é I/O?
                • Arquivos
                • Network
                       • respostas de query mysql
                       • respostas http
                       • respostas memcache
                • A maioria das aplicações web são ligadas a I/O e
                       não a CPU


Friday, August 5, 11
Um simples servidor TCP

       TCPSocket#read*
       bloqueia




       Solução comum: usar
       uma thread por cliente



Friday, August 5, 11
I/O não bloqueante


          Alternativa para Threads:
          simplesmente não bloqueie!




Friday, August 5, 11
O que é o Reactor?


                • Reactor é simplesmente um loop while single
                       thread, chamado de “loop reactor”

                • Seu código “reage” a eventos
                • Se seu evento demora muito para ser tratado,
                       outros eventos não podem ocorrer durante esse
                       período




Friday, August 5, 11
Lição: NUNCA bloqueie o
                           reactor!

                • Não use sleep(x)
                • Não faça loops demorados (100_000.times)
                • Não use I/O bloqueante (queries em database)
                • Não faça pooling (while !condição)



Friday, August 5, 11
Escrevendo código assíncrono
        Código síncrono usa retorno de valores:



        Eventos async usam blocos de código:


        Diferente de blocos comuns, os blocos de eventos são
        gravados para serem invocados futuramente:




Friday, August 5, 11
Demo - Chat com
                EventMachine + WebSockets




Friday, August 5, 11
Experimento - MiniWar




Friday, August 5, 11
Fibers



                • Goliath
                • EM-Synchrony




Friday, August 5, 11
Obrigado!




Friday, August 5, 11

Mais conteúdo relacionado

PDF
Microservices em Python: desafios e soluções
PPTX
Node.js - Worksigma
PDF
Vagrant sti
PDF
Java ee com apache tom ee e tomee+ tdc - 2014
PDF
As aventuras psicodélicas de Guilherme no mundo open source
PDF
Apresentacao institucional Frevo on Rails
PDF
Ruby e o Mundo Mágico dos Unicórnios
PPTX
Sample
Microservices em Python: desafios e soluções
Node.js - Worksigma
Vagrant sti
Java ee com apache tom ee e tomee+ tdc - 2014
As aventuras psicodélicas de Guilherme no mundo open source
Apresentacao institucional Frevo on Rails
Ruby e o Mundo Mágico dos Unicórnios
Sample

Semelhante a Event machine (20)

PPTX
Síncrono vs Assíncrono
PDF
Nodejs - A performance que eu sempre quis ter
PDF
Secomp 2011 - Node.JS - Introdução
PDF
Beyond Ruby with NodeJS - RubyConf Brasil 2010
PDF
Node.JS - Campus Party Brasil 2011
PDF
PDF
RubyMasters 2011 - Beyond Ruby with NodeJS
PDF
Twisted Framework: desenvolver aplicações distribuídas nunca foi tão fácil
KEY
Uma visão rápida sobre Nodejs
PPTX
Concorrência e Paralelismo em Elixir (e outras linguagens)
PPT
PDF
PHP, Gearman e Memcache
PPTX
Introdução ao desenvolvimento web - 2 - iDez 2010
PPTX
IntroduçãO Ao Desenvolvimento Web 2
PDF
FFI - História, performance e felicidade com Ruby
PDF
Tornado mais do que um framework bonitinho
PDF
Softwares no Cluster - Ney Lemke
PDF
Ao infinito e além com PHP memcached e Gearman
PPT
O poder do JavaScript
PDF
Node.js no Pagar.me
Síncrono vs Assíncrono
Nodejs - A performance que eu sempre quis ter
Secomp 2011 - Node.JS - Introdução
Beyond Ruby with NodeJS - RubyConf Brasil 2010
Node.JS - Campus Party Brasil 2011
RubyMasters 2011 - Beyond Ruby with NodeJS
Twisted Framework: desenvolver aplicações distribuídas nunca foi tão fácil
Uma visão rápida sobre Nodejs
Concorrência e Paralelismo em Elixir (e outras linguagens)
PHP, Gearman e Memcache
Introdução ao desenvolvimento web - 2 - iDez 2010
IntroduçãO Ao Desenvolvimento Web 2
FFI - História, performance e felicidade com Ruby
Tornado mais do que um framework bonitinho
Softwares no Cluster - Ney Lemke
Ao infinito e além com PHP memcached e Gearman
O poder do JavaScript
Node.js no Pagar.me
Anúncio

Mais de Frevo on Rails (13)

PDF
Introducao a Ruby on Rails
PDF
Programação GUI com jRuby
PDF
awesome_nested_fields
PDF
WebApps minimalistas com Sinatra
PDF
The elements of User Experience
PDF
Crash Course Ruby & Rails
PPT
jcheck: validações client-side sem dores
PPT
Ruby (nem tão) Básico
PDF
Perfil da Comunidade
PDF
Resolvendo problemas de dependências com o Bundler
PDF
O que vem por aí com Rails 3
PDF
Introdução a Ruby
PDF
Regras do Coding Dojo
Introducao a Ruby on Rails
Programação GUI com jRuby
awesome_nested_fields
WebApps minimalistas com Sinatra
The elements of User Experience
Crash Course Ruby & Rails
jcheck: validações client-side sem dores
Ruby (nem tão) Básico
Perfil da Comunidade
Resolvendo problemas de dependências com o Bundler
O que vem por aí com Rails 3
Introdução a Ruby
Regras do Coding Dojo
Anúncio

Último (11)

PPTX
Viasol Energia Solar -Soluções para geração e economia de energia
PPTX
Design - Introdução a Gestalt e teoria das formas
PDF
Manejo integrado de pragas na cultura do algodão
PPTX
Tipos de servidor em redes de computador.pptx
PDF
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
PDF
eBook - GUIA DE CONSULTA RAPIDA EM ROTEADORES E SWITCHES CISCO - VOL I.pdf
PPTX
Proposta de Implementação de uma Rede de Computador Cabeada.pptx
PPTX
Utilizando code blockes por andre backes
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PPTX
Arquitetura de computadores - Memórias Secundárias
PPTX
Eng. Software - pontos essenciais para o início
Viasol Energia Solar -Soluções para geração e economia de energia
Design - Introdução a Gestalt e teoria das formas
Manejo integrado de pragas na cultura do algodão
Tipos de servidor em redes de computador.pptx
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
eBook - GUIA DE CONSULTA RAPIDA EM ROTEADORES E SWITCHES CISCO - VOL I.pdf
Proposta de Implementação de uma Rede de Computador Cabeada.pptx
Utilizando code blockes por andre backes
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Arquitetura de computadores - Memórias Secundárias
Eng. Software - pontos essenciais para o início

Event machine

  • 1. Event Machine I/O não bloqueante escalável em Ruby Friday, August 5, 11
  • 2. Sobre Mim • Wilker Lúcio • Consultor para Kajabi (Ruby on Rails) • http://github.com/wilkerlucio • @wilkerlucio • wilkerlucio@gmail.com Friday, August 5, 11
  • 4. O que é Event Machine? • Implementação da “design pattern” Reactor • Similar a Node (Javascript) ou Twisted (Python) Friday, August 5, 11
  • 5. Quem usa Event Machine? • Engine Yard • Heroku • Github • Campfire • ... Friday, August 5, 11
  • 6. O que é I/O? • Arquivos • Network • respostas de query mysql • respostas http • respostas memcache • A maioria das aplicações web são ligadas a I/O e não a CPU Friday, August 5, 11
  • 7. Um simples servidor TCP TCPSocket#read* bloqueia Solução comum: usar uma thread por cliente Friday, August 5, 11
  • 8. I/O não bloqueante Alternativa para Threads: simplesmente não bloqueie! Friday, August 5, 11
  • 9. O que é o Reactor? • Reactor é simplesmente um loop while single thread, chamado de “loop reactor” • Seu código “reage” a eventos • Se seu evento demora muito para ser tratado, outros eventos não podem ocorrer durante esse período Friday, August 5, 11
  • 10. Lição: NUNCA bloqueie o reactor! • Não use sleep(x) • Não faça loops demorados (100_000.times) • Não use I/O bloqueante (queries em database) • Não faça pooling (while !condição) Friday, August 5, 11
  • 11. Escrevendo código assíncrono Código síncrono usa retorno de valores: Eventos async usam blocos de código: Diferente de blocos comuns, os blocos de eventos são gravados para serem invocados futuramente: Friday, August 5, 11
  • 12. Demo - Chat com EventMachine + WebSockets Friday, August 5, 11
  • 14. Fibers • Goliath • EM-Synchrony Friday, August 5, 11