- IaaS dev @ Locaweb
- Java 2005 - 2008
- Android 2011-2012
- Ruby 2008 - Today
- @coralton
- github.com/lucasuyezu
- 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.
Reactor Pattern (http://www.dre.vanderbilt.edu/~schmidt/PDF/reactor-siemens.pdf)
- 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.
- 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.
- A ordem de execução não é a que estamos acostumados.
- Debugar mentalmente é mais complicado.
- Sync code
- Async code
- log all the things!!!