Skip to content

Instantly share code, notes, and snippets.

@lucasuyezu
Created February 2, 2015 06:19
Show Gist options
  • Save lucasuyezu/6757b220a97c09e5561b to your computer and use it in GitHub Desktop.
Save lucasuyezu/6757b220a97c09e5561b to your computer and use it in GitHub Desktop.

Apresentação

Lucas Uyezu

  • IaaS dev @ Locaweb
  • Java 2005 - 2008
  • Android 2011-2012
  • Ruby 2008 - Today
  • @coralton
  • github.com/lucasuyezu

Rack & Reactor pattern

Rack

  • No começo, cada framework e servidor Ruby trabalhava de um jeito.
  • Rack é uma interface que unifica a forma como frameworks e servidores Ruby conversam.
  • Você pode testar um servidor/PaaS novo sem mudar uma linha do seu código. (JElastic, Heroku, unicorn, puma, etc).
  • Você pode testar um framework novo sem mudar de servidor (Sinatra, RoR).
  • Esse conceito existe em outras linguagens: Python tem WSGI, Java tem Servlets.
  • Definição do professor Chatoff: "The reactor design pattern is an event handling pattern for handling service requests delivered concurrently to a service handler by one or more inputs. The service handler then demultiplexes the incoming requests and dispatches them synchronously to the associated request handlers."
  • Metáfora: Imagine malabarismo com Threads bloqueadas (por IO), aproveitando recursos não bloqueados (cpu).
  • Beneficia linguagens interpretadas que possuem GIL e acabam rodando num processador só.
  • Pró: Te economiza dinheiro com hospedagem
  • Contra: Adiciona complexidade que pode ser desnecessária
  • Código síncrono
  • Código async
  • Ruby tem Event Machine, Python tem Twisted.

Lições aprendidas

Threads vs Processos

  • Variáveis globais: pensar antes de usar
  • Num ambiente de nuvem, você pode ter variáveis globais diferentes para processos ou servidores diferentes.
  • Problema
  • Solução
  • Solução: DB, Redis.

Programação assíncrona

  • A ordem de execução não é a que estamos acostumados.
  • Debugar mentalmente é mais complicado.
  • Sync code
  • Async code
  • log all the things!!!
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment