event machine

15
Event Machine I/O não bloqueante escalável em Ruby Friday, August 5, 11

Upload: frevo-on-rails

Post on 28-May-2015

847 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Event machine

Event MachineI/O não bloqueante escalável em Ruby

Friday, August 5, 11

Page 2: Event machine

Sobre Mim

• Wilker Lúcio

• Consultor para Kajabi (Ruby on Rails)

• http://github.com/wilkerlucio

• @wilkerlucio

[email protected]

Friday, August 5, 11

Page 3: Event machine

Problema C10K

Friday, August 5, 11

Page 4: Event machine

O que é Event Machine?

• Implementação da “design pattern” Reactor

• Similar a Node (Javascript) ou Twisted (Python)

Friday, August 5, 11

Page 5: Event machine

Quem usa Event Machine?

• Engine Yard

• Heroku

• Github

• Campfire

• ...

Friday, August 5, 11

Page 6: Event machine

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

Page 7: Event machine

Um simples servidor TCP

TCPSocket#read*bloqueia

Solução comum: usaruma thread por cliente

Friday, August 5, 11

Page 8: Event machine

I/O não bloqueante

Alternativa para Threads:simplesmente não bloqueie!

Friday, August 5, 11

Page 9: Event machine

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

Page 10: Event machine

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

Page 11: Event machine

Escrevendo código assíncronoCódigo síncrono usa retorno de valores:

Eventos async usam blocos de código:

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

Friday, August 5, 11

Page 12: Event machine

Demo - Chat com EventMachine + WebSockets

Friday, August 5, 11

Page 13: Event machine

Experimento - MiniWar

Friday, August 5, 11

Page 14: Event machine

Fibers

• Goliath

• EM-Synchrony

Friday, August 5, 11

Page 15: Event machine

Obrigado!

Friday, August 5, 11