Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

112
Uma história de guerra: Enfrentando problemas reais em aplicações Web 2.0 Manoel Lemos Ronaldo Ferraz Nando Vieira Rails Summit Latin America 2008 São Paulo, Brasil, 16.Outubro

description

Apresentação do pessoal da WebCo Internet (BlogBlogs e Brasigo) no Rails Summit Latin America 2008. Manoel Lemos, Ronaldo Ferraz e Nando Vieira falam de desafios reais vividos por empreendimentos Web 2.0. Desde o início do BlogBlogs até a formação da WebCo.

Transcript of Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

Page 1: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

Uma história de guerra: Enfrentando problemas reais em aplicações Web 2.0

Manoel Lemos

Ronaldo Ferraz

Nando Vieira

Rails Summit Latin America 2008São Paulo, Brasil, 16.Outubro

Page 2: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0
Page 3: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

1983

Page 4: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

1983

1984

Page 5: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

1983

1984

1993

Page 6: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

1983

1984 1994

1993

Page 7: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

1983

1984 1994

1993

1997

Page 8: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

1983

1984 1994

1993

1997

1999

Page 9: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

1983

1984 1994

1993

1997

1999

Page 10: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

1983

1984 1994

1993

1997 2000

1999

Page 11: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

1983

1984 1994

1993

1997 2000

1999 2006

Page 12: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0
Page 13: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

Abr.06

Page 14: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

Abr.06

Nov.06

Page 15: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

Abr.06

Nov.06

Fev.07

Page 16: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

Abr.06

Nov.06

Fev.07

Fev.08

Page 17: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

Abr.06

Nov.06

Fev.07

Ago.08

Fev.08

Page 18: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

Abr.06

Nov.06

Fev.07

Ago.08

Fev.08

Page 19: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0
Page 20: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

BlogBlogs Status

Business Numbers

110.000 usuários

200.000 blogs

2.000.000 posts

250 usuários / dia

150 blogs / dia

5.000 posts / dia

Traffic Numbers

5.2M PageViews

2.6M Uniques

Top 4000 Alexa Global

Top 120 Alexa Brasil

Top 102 IBOPE Brasil

50M Widget Impressions

Page 21: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

Crescer é um processo complicado e doloroso!

É impossível de se prever com precisão

Existem gargalos escondidos

Às vezes você precisa voltar atrás

Às vezes você precisa mudar tudo

Não existem “silver-bullets”

A complexidade vai crescer com você

Page 22: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

Crescimento real nunca acontece em um só eixo!

Tráfego : mais usuários, transações, imagens...

Tamanho : banco, memória, cache...

Complexidade : algoritmos, arquitetura, infraestrutura...

Organização : equipe, comunicação, processos...

Negócio : modelos, parceiros, fornecedores...

Na maioria dos casos os problemas crescem mais que linearmente!!!

Page 23: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0
Page 24: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0
Page 25: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0
Page 26: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

Hoje1.5 Milhões

por dia

Page 27: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0
Page 28: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0
Page 29: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0
Page 30: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0
Page 31: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0
Page 32: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0
Page 33: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0
Page 34: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0
Page 35: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

httpdmongrel

mysql

Page 36: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

httpdmongrel

mysql

mongrelmongrel

Page 37: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

httpdmongrel

mysql

mongrelmongrel

memcached

Page 38: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

httpdmongrel

mysql

mongrelmongrel

memcached

Page 39: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

httpdmongrel

mysql

mongrelmongrel

memcached

Page 40: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

httpdmongrel

mysql

mongrelmongrel

memcached

httpdmongrelmongrelmongrel

memcached

load balancing

Page 41: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

httpdmongrel

mysql

mongrelmongrel

memcached

httpdmongrelmongrelmongrel

memcached

httpdmongrelmongrelmongrel

memcached

load balancing

Page 42: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

httpdmongrelmongrelmongrel

memcached

httpdmongrelmongrelmongrel

memcached

httpdmongrelmongrelmongrel

memcached

load balancing

mysql

Page 43: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

httpdmongrelmongrelmongrel

memcached

httpdmongrelmongrelmongrel

memcached

httpdmongrelmongrelmongrel

memcached

load balancing

mysql

Page 44: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

httpdmongrelmongrelmongrel

memcached

httpdmongrelmongrelmongrel

memcached

httpdmongrelmongrelmongrel

memcached

load balancing

mysql

Page 45: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

httpdmongrelmongrelmongrel

httpdmongrelmongrelmongrel

httpdmongrelmongrelmongrel

load balancing

mysql

memcached memcachedmemcached

Page 46: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

httpdmongrelmongrelmongrel

httpdmongrelmongrelmongrel

httpdmongrelmongrelmongrel

load balancing

mysql

memcached memcachedmemcached

mongrel mongrelmongrel

Page 47: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

mysql

httpdmongrelmongrelmongrel

httpdmongrelmongrelmongrel

httpdmongrelmongrelmongrel

load balancing

memcached memcachedmemcached

mongrel mongrelmongrel

Page 48: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

mysql

httpdmongrelmongrelmongrel

httpdmongrelmongrelmongrel

httpdmongrelmongrelmongrel

load balancing

memcached memcachedmemcached

mongrel mongrelmongrel

Page 49: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

httpdmongrelmongrelmongrel

httpdmongrelmongrelmongrel

httpdmongrelmongrelmongrel

load balancing 1 (web)

memcached memcachedmemcached

mongrel mongrelmongrel

mysql

Page 50: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

httpdmongrelmongrelmongrel

httpdmongrelmongrelmongrel

httpdmongrelmongrelmongrel

load balancing 1 (web)

memcached memcachedmemcached

mongrel mongrelmongrel

httpdmongrelmongrelmongrel

httpdmongrelmongrelmongrel

httpdmongrelmongrelmongrel

load balancing 2 (widgets)

memcached memcachedmemcached

mongrel mongrelmongrel

mysql

Page 51: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

httpdmongrelmongrelmongrel

httpdmongrelmongrelmongrel

httpdmongrelmongrelmongrel

load balancing 1 (web)

memcached memcachedmemcached

mongrel mongrelmongrel

httpdmongrelmongrelmongrel

httpdmongrelmongrelmongrel

httpdmongrelmongrelmongrel

load balancing 2 (widgets)

memcached memcachedmemcached

mongrel mongrelmongrel

mysql (slave)

mysql (master)

Page 52: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

httpdmongrelmongrelmongrel

httpdmongrelmongrelmongrel

httpdmongrelmongrelmongrel

load balancing 1 (web)

memcached memcachedmemcached

mongrel mongrelmongrel

mysql

httpdmongrelmongrelmongrel

httpdmongrelmongrelmongrel

httpdmongrelmongrelmongrel

load balancing 2 (widgets)

memcached memcachedmemcached

mongrel mongrelmongrel

mysql (slave)

mysql (master)

Page 53: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

httpdmongrelmongrelmongrel

httpdmongrelmongrelmongrel

httpdmongrelmongrelmongrel

load balancing 1 (web)

memcached memcachedmemcached

mongrel mongrelmongrel

mysql

httpdmongrelmongrelmongrel

httpdmongrelmongrelmongrel

httpdmongrelmongrelmongrel

load balancing 2 (widgets)

memcached memcachedmemcached

mongrel mongrelmongrel

mysql (slave)

mysql (master)

Page 54: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

httpdmongrelmongrelmongrel

httpdmongrelmongrelmongrel

httpdmongrelmongrelmongrel

load balancing 1 (web)

mongrel mongrelmongrel

mysql

httpdmongrelmongrelmongrel

httpdmongrelmongrelmongrel

httpdmongrelmongrelmongrel

load balancing 2 (widgets)

memcached memcachedmemcached memcached memcachedmemcached

mongrel mongrelmongrel

mysql (slave)

mysql (master)

Page 55: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

httpdmongrelmongrelmongrel

httpdmongrelmongrelmongrel

httpdmongrelmongrelmongrel

load balancing 1 (web)

mongrel mongrelmongrel

mysql

httpdmongrelmongrelmongrel

httpdmongrelmongrelmongrel

httpdmongrelmongrelmongrel

load balancing 2 (widgets)

mongrel mongrelmongrel

mysql (slave)

mysql (master)

memcached memcached

memcached memcached

Page 56: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

httpdmongrelmongrelmongrel

httpdmongrelmongrelmongrel

httpdmongrelmongrelmongrel

load balancing 1 (web)

mongrel mongrelmongrel

mysql

httpdmongrelmongrelmongrel

httpdmongrelmongrelmongrel

httpdmongrelmongrelmongrel

load balancing 2 (widgets)

mongrel mongrelmongrel

mysql (slave)

mysql (master)

memcached memcached

memcached memcached

mongrel mongrelmongrel mongrel mongrelmongrel

Page 57: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

httpdmongrelmongrelmongrel

httpdmongrelmongrelmongrel

httpdmongrelmongrelmongrel

load balancing 1 (web)

mongrel mongrelmongrel

mysql

httpdmongrelmongrelmongrel

httpdmongrelmongrelmongrel

httpdmongrelmongrelmongrel

load balancing 2 (widgets)

mongrel mongrelmongrel

mysql (slave)

mysql (master)

memcached memcached

memcached memcached

Robot

Robot

mongrel mongrelmongrel mongrel mongrelmongrel

Robot

Robot

Page 58: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

httpdmongrelmongrelmongrel

httpdmongrelmongrelmongrel

httpdmongrelmongrelmongrel

load balancing 1 (web)

mongrel mongrelmongrel

mysql

httpdmongrelmongrelmongrel

httpdmongrelmongrelmongrel

httpdmongrelmongrelmongrel

load balancing 2 (widgets)

mongrel mongrelmongrel

mysql (slave)

mysql (master)

memcached memcached

memcached memcached

Robot

Robot

mongrel mongrelmongrel mongrel mongrelmongrel

Robot

Robot

Indexer(Search)

Indexer(Search)

Page 59: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

httpdmongrelmongrelmongrel

httpdmongrelmongrelmongrel

httpdmongrelmongrelmongrel

load balancing 1 (web)

mongrel mongrelmongrel

mysql

httpdmongrelmongrelmongrel

httpdmongrelmongrelmongrel

httpdmongrelmongrelmongrel

load balancing 2 (widgets)

mongrel mongrelmongrel

mysql (slave)

mysql (master)

memcached memcached

memcached memcached

Robot

Robot

mongrel mongrelmongrel mongrel mongrelmongrel

Robot

Robot

Indexer(Search)

httpdmongrelmongrelmongrelmongrelmongrel

httpdmongrelmongrelmongrelmongrelmongrel

Indexer(Search)

load balancing 3 (API)

Page 60: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

load balancing 1 (web)

mysql

load balancing 2 (widgets)

mysql (slave)

mysql (master)

memcached memcached

memcached memcached

Robot

Robot

mongrels

Robot

Robot

Indexer(Search)

Indexer(Search)

load balancing 3 (API)

mongrels mongrels mongrels mongrels mongrels

mongrels mongrels

Page 61: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

load balancing

memcached

Robot

mongrels

Indexer(Search)

Indexer(Search)

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

Robot

memcached

memcached

memcached

mysql (master)

mysql (master)

Page 62: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

load balancing

memcached

Robot

mongrels

Indexer(Search)

Indexer(Search)

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

Robot

memcached

memcached

memcached

mysql (master)

mysql (master)

Page 63: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

load balancing

memcached

Robot

mongrels

Indexer(Search)

Indexer(Search)

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

Robot

memcached

memcached

memcached

mysql (master)

mysql (master)

load balancing

memcached

Robot

mongrels

Indexer(Search)

Indexer(Search)

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

Robot

memcached

memcached

memcached

mysql (master)

mysql (master)

Page 64: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

load balancing

memcached

Robot

mongrels

Indexer(Search)

Indexer(Search)

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

Robot

memcached

memcached

memcached

mysql (master)

mysql (master)

load balancing

memcached

Robot

mongrels

Indexer(Search)

Indexer(Search)

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

Robot

memcached

memcached

memcached

mysql (master)

mysql (master)

Page 65: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

load balancing

memcached

Robot

mongrels

Indexer(Search)

Indexer(Search)

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

Robot

memcached

memcached

memcached

mysql (master)

mysql (master)

load balancing

memcached

Robot

mongrels

Indexer(Search)

Indexer(Search)

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

Robot

memcached

memcached

memcached

mysql (master)

mysql (master)

Eureca...Idéias...Single Sign On

Shared ResourcesIntegrated Search

E=MC2

Page 66: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

load balancing

memcached

Robot

mongrels

Indexer(Search)

Indexer(Search)

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

Robot

memcached

memcached

memcached

mysql (master)

mysql (master)

load balancing

memcached

Robot

mongrels

Indexer(Search)

Indexer(Search)

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

Robot

memcached

memcached

memcached

mysql (master)

mysql (master)

Page 67: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

load balancing

memcached

Robot

mongrels

Indexer(Search)

Indexer(Search)

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

Robot

memcached

memcached

memcached

mysql (master)

mysql (master)

load balancing

memcached

Robot

mongrels

Indexer(Search)

Indexer(Search)

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

Robot

memcached

memcached

memcached

mysql (master)

mysql (master)

E ai, #comofaz ?

Page 68: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

load balancing

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

sinatra

mongrels

load balancing

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

Page 69: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

load balancing

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

sinatra

mongrels

Robot

Robot

memcached

memcached

memcached

memcached

mysql (master)

mysql (slave)

load balancing

mongrels

Indexer(Search)

Indexer(Search)

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

Robot

Robot

memcached

memcached

mysql (slave)

Indexer(Search)

Indexer(Search)

Page 70: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

ActiveDNA (REST)

load balancing

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

sinatra

mongrels

Robot

Robot

memcached

memcached

memcached

memcached

mysql (master)

mysql (slave)

load balancing

mongrels

Indexer(Search)

Indexer(Search)

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

Robot

Robot

memcached

memcached

mysql (slave)

Indexer(Search)

Indexer(Search)

Page 71: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

ActiveDNA (REST)

ActiveDNA (REST)

load balancing

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

sinatra

mongrels

Robot

Robot

memcached

memcached

memcached

memcached

mysql (master)

mysql (slave)

load balancing

mongrels

Indexer(Search)

Indexer(Search)

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

Robot

Robot

memcached

memcached

mysql (slave)

DNACredentials

(PHP)

Indexer(Search)

Indexer(Search)

Page 72: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

ActiveDNA (REST)

ActiveDNA (REST)

load balancing

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

sinatra

mongrels

Robot

Robot

memcached

memcached

memcached

memcached

mysql (master)

mysql (slave)

load balancing

mongrels

Indexer(Search)

Indexer(Search)

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

Robot

Robot

memcached

memcached

mysql (slave)

DNACredentials

(PHP)

Indexer(Search)

Indexer(Search)

DNAProfile(PHP)

Page 73: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

ActiveDNA (REST)

ActiveDNA (REST)

load balancing

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

sinatra

mongrels

Robot

Robot

memcached

memcached

memcached

memcached

mysql (master)

mysql (slave)

load balancing

mongrels

Indexer(Search)

Indexer(Search)

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

Robot

Robot

memcached

memcached

mysql (slave)

DNACredentials

(PHP)

Indexer(Search)

Indexer(Search)

DNAProfile(PHP)

DNAAvatars(PHP)

Page 74: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

ActiveDNA (REST)

ActiveDNA (REST)

load balancing

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

sinatra

mongrels

Robot

Robot

memcached

memcached

memcached

memcached

mysql (master)

mysql (slave)

load balancing

mongrels

Indexer(Search)

Indexer(Search)

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

Robot

Robot

memcached

memcached

mysql (slave)

DNACredentials

(PHP)

Indexer(Search)

Indexer(Search)

DNAProfile(PHP)

DNAAvatars(PHP)

DNAScoring(C++)

DNASocialGraph

(Python)

Page 75: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

ActiveDNA (REST)

ActiveDNA (REST)

load balancing

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

sinatra

mongrels

Robot

Robot

memcached

memcached

memcached

memcached

mysql (master)

mysql (slave)

load balancing

mongrels

Indexer(Search)

Indexer(Search)

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

Robot

Robot

memcached

memcached

mysql (slave)

DNACredentials

(PHP)

Indexer(Search)

Indexer(Search)

DNAProfile(PHP)

DNAAvatars(PHP)

DNAScoring(C++)

DNASocialGraph

(Python)

DNAMessaging

(Erlang)

DNAMessaging

(Erlang)

DNAMessaging

(Erlang)

DNAMessaging

(Erlang)

DNAMessaging

(Erlang)

Page 76: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

ActiveDNA (REST)

ActiveDNA (REST)

load balancing

load balancing

load balancing

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

sinatra

mongrels

Robot

Robot

memcached

memcached

memcached

memcached

mysql (master)

mysql (slave)

load balancing

mongrels

Indexer(Search)

Indexer(Search)

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

Robot

Robot

memcached

memcached

mysql (slave)

DNACredentials

(PHP)

Indexer(Search)

Indexer(Search)

DNAProfile(PHP)

DNAAvatars(PHP)

DNAScoring(C++)

DNASocialGraph

(Python)

DNAMessaging

(Erlang)

DNAMessaging

(Erlang)

DNAMessaging

(Erlang)

DNAMessaging

(Erlang)

DNAMessaging

(Erlang)

Page 77: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

load balancing

load balancing

ActiveDNA (REST)

ActiveDNA (REST)

load balancing

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

sinatra

mongrels

Robot

Robot

memcached

memcached

memcached

memcached

mysql (master)

mysql (slave)

load balancing

mongrels

Indexer(Search)

Indexer(Search)

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

Robot

Robot

memcached

memcached

mysql (slave)

DNACredentials

(PHP)

Indexer(Search)

Indexer(Search)

DNAProfile(PHP)

DNAAvatars(PHP)

DNAScoring(C++)

DNASocialGraph

(Python)

DNAMessaging

(Erlang)

DNAMessaging

(Erlang)

DNAMessaging

(Erlang)

DNAMessaging

(Erlang)

DNAMessaging

(Erlang)

Page 78: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

load balancing

load balancing

ActiveDNA (REST)

ActiveDNA (REST)

load balancing

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

sinatra

mongrels

Robot

Robot

memcached

memcached

memcached

memcached

mysql (master)

mysql (slave)

load balancing

mongrels

Indexer(Search)

Indexer(Search)

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

Robot

Robot

memcached

memcached

mysql (slave)

DNACredentials

(PHP)

Indexer(Search)

Indexer(Search)

DNAProfile(PHP)

DNAAvatars(PHP)

DNAScoring(C++)

DNASocialGraph

(Python)

DNAMessaging

(Erlang)

DNAMessaging

(Erlang)

DNAMessaging

(Erlang)

DNAMessaging

(Erlang)

DNAMessaging

(Erlang)

Page 79: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

load balancing

load balancing

ActiveDNA (REST)

ActiveDNA (REST)

load balancing

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

sinatra

mongrels

Robot

Robot

memcached

memcached

memcached

memcached

mysql (master)

mysql (slave)

load balancing

mongrels

Indexer(Search)

Indexer(Search)

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

Robot

Robot

memcached

memcached

mysql (slave)

DNACredentials

(PHP)

Indexer(Search)

Indexer(Search)

DNAProfile(PHP)

DNAAvatars(PHP)

DNAScoring(C++)

DNASocialGraph

(Python)

DNAMessaging

(Erlang)

DNAMessaging

(Erlang)

DNAMessaging

(Erlang)

DNAMessaging

(Erlang)

DNAMessaging

(Erlang)

humm... PHP...WTF??!!

DNACredentials

(PHP)

Page 80: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

load balancing

load balancing

ActiveDNA (REST)

ActiveDNA (REST)

load balancing

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

sinatra

mongrels

Robot

Robot

memcached

memcached

memcached

memcached

mysql (master)

mysql (slave)

load balancing

mongrels

Indexer(Search)

Indexer(Search)

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

mongrels

Robot

Robot

memcached

memcached

mysql (slave)

DNACredentials

(PHP)

Indexer(Search)

Indexer(Search)

DNAProfile(PHP)

DNAAvatars(PHP)

DNAScoring(C++)

DNASocialGraph

(Python)

DNAMessaging

(Erlang)

DNAMessaging

(Erlang)

DNAMessaging

(Erlang)

DNAMessaging

(Erlang)

DNAMessaging

(Erlang)

humm... PHP...WTF??!!

Page 81: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0
Page 82: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

Active DNA

Problema: Várias features necessárias (Profile, SSO, Avatar, etc) e pouco tempo

Serendipity: Companhia irmã com vários componentes REST

Resultado: Active DNA, uma biblioteca REST flexível mais cache e serviços

Page 83: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

Active DNA

Por que não Active Resource

Interface fixa

Somente Rails sem overrides

Pouca integração com external services

Page 84: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

Busca

Ferret: FAIL

Sphinx: Muito limitado

Lucene / Solr: Java

Xapian: Interessante

Mas, e se precisarmos mudar?

Page 85: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

Busca

Solução: Sapien

Cliente / encapsulamento de servidor de busca

Driver-based, naturalmente distribuído

Drivers podem ser mudados e o índice refeito em um passo

Brasigo Query Language

Page 86: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

API

Controle de Acesso

HTTP Auth (email & senha)

OAuth para suportar usuários de OpenID e outros

Restrições de uso

Frameworks mais leves

Sinatra

Thin

Page 87: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

Dia-a-dia (SCRUM)

Scrum

Várias equipes

Coordenação e priorização

Rotacionamento de equipes

Socialização de conhecimento

Cultura compartilhada

Page 88: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

Dia-a-dia (Git)

Git

Vários repositórios internos, todos Git

Branches por estória

Repositório sempre releasable

Page 89: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

Dia-a-dia (Sharing)

Cultura de bibliotecas

Plugins

Gems / Gem server interno

Funcionalidade compartilhada via API

Page 90: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

Dia-a-dia (Testes)

Test all the f***ing time

Sem cobertura, não há conhecimento

Socialização de conhecimento

Integração contínua

Page 91: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

Continuous Integration

Dedicated integration environment with automated integration and tests execution with the most up to dated code base.

Automated Reporting

Test Cases Results

Tests Coverage

Page 92: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

Tests, tests & more tests

Page 93: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

Tests, tests & more tests

Page 94: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

Tests, tests & more tests

Page 95: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

Continuous Integration

Page 96: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

Continuous Integration

Page 97: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

Continuous Integration

Page 98: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

Continuous Integration

Page 99: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

Continuous Integration

Page 100: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

Continuous Integration

Page 101: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

Continuous Integration

Page 102: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

Continuous Integration

Page 103: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

Continuous Integration

Page 104: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

Continuous Integration

Page 105: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

Continuous Integration

Page 106: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

Continuous Integration

Page 107: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

Continuous Integration

Page 108: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

Continuous Integration

Page 109: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

Continuous Integration

Page 110: Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0

Continuous Integration