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


Manoel Lemos
Ronaldo Ferraz
Nando Vieira

Rail...
1983
1983




  1984
1983     1993




  1984
1983     1993




  1984      1994
1983     1993




  1984      1994   1997
1983     1993             1999




  1984      1994   1997
1983     1993             1999




  1984      1994   1997
1983     1993             1999




  1984      1994   1997      2000
1983     1993             1999      2006




  1984      1994   1997      2000
Abr.06
Nov.06
Abr.06
Fev.07


         Nov.06
Abr.06
Fev.08




                  Fev.07


         Nov.06
Abr.06
Ago.08




                           Fev.08




                  Fev.07


         Nov.06
Abr.06
Ago.08




                           Fev.08




                  Fev.07


         Nov.06
Abr.06
BlogBlogs Status
Business Numbers       Traffic Numbers
  110.000 usuários       5.2M PageViews
  200.000 blogs          2....
Crescer é um processo
complicado e doloroso!
É impossível de se prever com precisão
Existem gargalos escondidos
Às vezes v...
Crescimento real nunca
acontece em um só eixo!
Tráfego : mais usuários, transações, imagens...
Tamanho : banco, memória, c...
Hoje
1.5 Milhões
  por dia
httpd
mongrel




mysql
httpd
mongrel
mongrel
mongrel


mysql
httpd
 mongrel
 mongrel
 mongrel
memcached
  mysql
httpd
 mongrel
 mongrel
 mongrel
memcached
  mysql
httpd
 mongrel
 mongrel
 mongrel
memcached
  mysql
load balancing



  httpd                 httpd
 mongrel               mongrel
 mongrel               mongrel
 mongrel    ...
load balancing



  httpd       httpd            httpd
 mongrel     mongrel          mongrel
 mongrel     mongrel         ...
load balancing



  httpd       httpd            httpd
 mongrel     mongrel          mongrel
 mongrel     mongrel         ...
load balancing



  httpd       httpd            httpd
 mongrel     mongrel          mongrel
 mongrel     mongrel         ...
load balancing



  httpd       httpd            httpd
 mongrel     mongrel          mongrel
 mongrel     mongrel         ...
load balancing



  httpd         httpd          httpd
 mongrel       mongrel        mongrel
 mongrel       mongrel       ...
load balancing



  httpd         httpd          httpd
 mongrel       mongrel        mongrel
 mongrel       mongrel       ...
load balancing



  httpd         httpd          httpd
 mongrel       mongrel        mongrel
 mongrel       mongrel       ...
load balancing



  httpd         httpd          httpd
 mongrel       mongrel        mongrel
 mongrel       mongrel       ...
load balancing 1 (web)



  httpd            httpd               httpd
 mongrel          mongrel             mongrel
 mong...
load balancing 1 (web)                                   load balancing 2 (widgets)



  httpd            httpd           ...
load balancing 1 (web)                                         load balancing 2 (widgets)



  httpd            httpd     ...
load balancing 1 (web)                                         load balancing 2 (widgets)



  httpd            httpd     ...
load balancing 1 (web)                                         load balancing 2 (widgets)



  httpd            httpd     ...
load balancing 1 (web)                                         load balancing 2 (widgets)



  httpd            httpd     ...
load balancing 1 (web)                                        load balancing 2 (widgets)



  httpd            httpd      ...
load balancing 1 (web)                                        load balancing 2 (widgets)



  httpd            httpd      ...
load balancing 1 (web)                                        load balancing 2 (widgets)



  httpd            httpd      ...
load balancing 1 (web)                                        load balancing 2 (widgets)



  httpd            httpd      ...
load balancing 1 (web)                                        load balancing 2 (widgets)



  httpd            httpd      ...
load balancing 1 (web)                                          load balancing 2 (widgets)




 mongrels         mongrels ...
load balancing



mongrels   mongrels     mongrels   mongrels




mongrels   mongrels     mongrels   mongrels




 Robot

...
load balancing



mongrels   mongrels     mongrels   mongrels




mongrels   mongrels     mongrels   mongrels




 Robot

...
load balancing                                            load balancing



mongrels   mongrels     mongrels   mongrels   ...
load balancing                                            load balancing



mongrels   mongrels     mongrels   mongrels   ...
load balancing                                            load balancing



mongrels   mongrels     mongrels   mongrels   ...
load balancing                                            load balancing



mongrels   mongrels     mongrels   mongrels   ...
load balancing                                              load balancing



mongrels   mongrels     mongrels   mongrels ...
load balancing                                load balancing



mongrels   mongrels     mongrels    sinatra   mongrels   m...
load balancing                                                         load balancing



mongrels   mongrels     mongrels ...
load balancing                                                         load balancing



mongrels   mongrels     mongrels ...
load balancing                                                         load balancing



 mongrels     mongrels     mongre...
load balancing                                                         load balancing



 mongrels     mongrels     mongre...
load balancing                                                         load balancing



 mongrels     mongrels     mongre...
load balancing                                                           load balancing



 mongrels     mongrels     mong...
load balancing                                                             load balancing



 mongrels     mongrels     mo...
load balancing                                                             load balancing



 mongrels     mongrels     mo...
load balancing                                                             load balancing



 mongrels     mongrels     mo...
load balancing                                                             load balancing



 mongrels     mongrels     mo...
load balancing                                                             load balancing



 mongrels     mongrels      m...
load balancing                                                             load balancing



 mongrels     mongrels      m...
Active DNA

Problema: Várias features necessárias (Profile, SSO,
Avatar, etc) e pouco tempo
Serendipity: Companhia irmã com...
Active DNA

Por que não Active Resource
  Interface fixa
  Somente Rails sem overrides
  Pouca integração com external serv...
Busca

Ferret: FAIL
Sphinx: Muito limitado
Lucene / Solr: Java
Xapian: Interessante
Mas, e se precisarmos mudar?
Busca

Solução: Sapien
Cliente / encapsulamento de servidor de busca
Driver-based, naturalmente distribuído
Drivers podem ...
API
Controle de Acesso
  HTTP Auth (email & senha)
  OAuth para suportar usuários de OpenID e outros
  Restrições de uso
F...
Dia-a-dia (SCRUM)
Scrum
  Várias equipes
  Coordenação e priorização
  Rotacionamento de equipes
Socialização de conhecime...
Dia-a-dia (Git)

 Git
   Vários repositórios internos, todos Git
   Branches por estória
   Repositório sempre releasable
Dia-a-dia (Sharing)

 Cultura de bibliotecas
   Plugins
   Gems / Gem server interno
 Funcionalidade compartilhada via API
Dia-a-dia (Testes)

 Test all the f***ing time
 Sem cobertura, não há conhecimento
 Socialização de conhecimento
 Integraç...
Continuous Integration

 Dedicated integration environment with automated
 integration and tests execution with the most u...
Tests, tests & more tests
Tests, tests & more tests
Tests, tests & more tests
Continuous Integration
Continuous Integration
Continuous Integration
Continuous Integration
Continuous Integration
Continuous Integration
Continuous Integration
Continuous Integration
Continuous Integration
Continuous Integration
Continuous Integration
Continuous Integration
Continuous Integration
Continuous Integration
Continuous Integration
Continuous Integration
Venha trabalhar com a
       gente!!!
    vagas@blogblogs.com.br
Obrigado!
 mlemos@webcointernet.com
  rferraz@webcointernet.com
   fvieira@webcointernet.com


  http://brasigo.com.br/
  ...
Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0
Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0
Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0
Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0
Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0
Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0
Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0
Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0
Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0
Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0
Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0
Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0
Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0
Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0
Rails Summit 2008 : Histórias de Guerra - Enfrentando problemas reais em aplicações Web 2.0
Upcoming SlideShare
Loading in...5
×

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

1,403

Published on

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.

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,403
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
57
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

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

  1. 1. 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
  2. 2. 1983
  3. 3. 1983 1984
  4. 4. 1983 1993 1984
  5. 5. 1983 1993 1984 1994
  6. 6. 1983 1993 1984 1994 1997
  7. 7. 1983 1993 1999 1984 1994 1997
  8. 8. 1983 1993 1999 1984 1994 1997
  9. 9. 1983 1993 1999 1984 1994 1997 2000
  10. 10. 1983 1993 1999 2006 1984 1994 1997 2000
  11. 11. Abr.06
  12. 12. Nov.06 Abr.06
  13. 13. Fev.07 Nov.06 Abr.06
  14. 14. Fev.08 Fev.07 Nov.06 Abr.06
  15. 15. Ago.08 Fev.08 Fev.07 Nov.06 Abr.06
  16. 16. Ago.08 Fev.08 Fev.07 Nov.06 Abr.06
  17. 17. BlogBlogs Status Business Numbers Traffic Numbers 110.000 usuários 5.2M PageViews 200.000 blogs 2.6M Uniques 2.000.000 posts Top 4000 Alexa Global 250 usuários / dia Top 120 Alexa Brasil 150 blogs / dia Top 102 IBOPE Brasil 5.000 posts / dia 50M Widget Impressions
  18. 18. 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ê
  19. 19. 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!!!
  20. 20. Hoje 1.5 Milhões por dia
  21. 21. httpd mongrel mysql
  22. 22. httpd mongrel mongrel mongrel mysql
  23. 23. httpd mongrel mongrel mongrel memcached mysql
  24. 24. httpd mongrel mongrel mongrel memcached mysql
  25. 25. httpd mongrel mongrel mongrel memcached mysql
  26. 26. load balancing httpd httpd mongrel mongrel mongrel mongrel mongrel mongrel memcached memcached mysql
  27. 27. load balancing httpd httpd httpd mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel memcached memcached memcached mysql
  28. 28. load balancing httpd httpd httpd mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel memcached memcached memcached mysql
  29. 29. load balancing httpd httpd httpd mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel memcached memcached memcached mysql
  30. 30. load balancing httpd httpd httpd mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel memcached memcached memcached mysql
  31. 31. load balancing httpd httpd httpd mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel memcached memcached memcached mysql
  32. 32. load balancing httpd httpd httpd mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel memcached memcached memcached mysql
  33. 33. load balancing httpd httpd httpd mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel memcached memcached memcached mysql
  34. 34. load balancing httpd httpd httpd mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel memcached memcached memcached mysql
  35. 35. load balancing 1 (web) httpd httpd httpd mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel memcached memcached memcached mysql
  36. 36. load balancing 1 (web) load balancing 2 (widgets) httpd httpd httpd httpd httpd httpd mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel memcached memcached memcached memcached memcached memcached mysql
  37. 37. load balancing 1 (web) load balancing 2 (widgets) httpd httpd httpd httpd httpd httpd mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel memcached memcached memcached memcached memcached memcached mysql (master) mysql (slave)
  38. 38. load balancing 1 (web) load balancing 2 (widgets) httpd httpd httpd httpd httpd httpd mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel memcached memcached memcached memcached memcached memcached mysql mysql (master) mysql (slave)
  39. 39. load balancing 1 (web) load balancing 2 (widgets) httpd httpd httpd httpd httpd httpd mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel memcached memcached memcached memcached memcached memcached mysql mysql (master) mysql (slave)
  40. 40. load balancing 1 (web) load balancing 2 (widgets) httpd httpd httpd httpd httpd httpd mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel memcached memcached memcached memcached memcached memcached mysql mysql (master) mysql (slave)
  41. 41. load balancing 1 (web) load balancing 2 (widgets) httpd httpd httpd httpd httpd httpd mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mysql mysql (master) mysql (slave) memcached memcached memcached memcached
  42. 42. load balancing 1 (web) load balancing 2 (widgets) httpd httpd httpd httpd httpd httpd mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mysql mysql (master) mysql (slave) memcached memcached memcached memcached
  43. 43. load balancing 1 (web) load balancing 2 (widgets) httpd httpd httpd httpd httpd httpd mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mysql mysql (master) mysql (slave) memcached memcached Robot Robot memcached memcached Robot Robot
  44. 44. load balancing 1 (web) load balancing 2 (widgets) httpd httpd httpd httpd httpd httpd mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mysql mysql (master) mysql (slave) Indexer Indexer memcached memcached Robot Robot (Search) (Search) memcached memcached Robot Robot
  45. 45. load balancing 1 (web) load balancing 2 (widgets) httpd httpd httpd httpd httpd httpd mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mongrel mysql mysql (master) mysql (slave) Indexer Indexer memcached memcached Robot Robot (Search) (Search) httpd httpd mongrel mongrel mongrel mongrel memcached memcached Robot Robot mongrel mongrel mongrel mongrel mongrel mongrel load balancing 3 (API)
  46. 46. load balancing 1 (web) load balancing 2 (widgets) mongrels mongrels mongrels mongrels mongrels mongrels mysql mysql (master) mysql (slave) Indexer Indexer memcached memcached Robot Robot (Search) (Search) memcached memcached Robot Robot mongrels mongrels load balancing 3 (API)
  47. 47. load balancing mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels Robot Robot Indexer memcached memcached (Search) mysql mysql (master) (master) Indexer memcached memcached (Search)
  48. 48. load balancing mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels Robot Robot Indexer memcached memcached (Search) mysql mysql (master) (master) Indexer memcached memcached (Search)
  49. 49. load balancing load balancing mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels Robot Robot Robot Robot Indexer Indexer memcached memcached memcached memcached (Search) (Search) mysql mysql mysql mysql (master) (master) (master) (master) Indexer Indexer memcached memcached memcached memcached (Search) (Search)
  50. 50. load balancing load balancing mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels Robot Robot Robot Robot Indexer Indexer memcached memcached memcached memcached (Search) (Search) mysql mysql mysql mysql (master) (master) (master) (master) Indexer Indexer memcached memcached memcached memcached (Search) (Search)
  51. 51. load balancing load balancing mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels Eureca...Idéias... mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels Single Sign On Shared Resources Robot Robot Integrated Search Robot E=MC2 Robot Indexer Indexer memcached memcached memcached memcached (Search) (Search) mysql mysql mysql mysql (master) (master) (master) (master) Indexer Indexer memcached memcached memcached memcached (Search) (Search)
  52. 52. load balancing load balancing mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels Robot Robot Robot Robot Indexer Indexer memcached memcached memcached memcached (Search) (Search) mysql mysql mysql mysql (master) (master) (master) (master) Indexer Indexer memcached memcached memcached memcached (Search) (Search)
  53. 53. load balancing load balancing mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels E ai, #comofaz ? Robot Robot Robot Robot Indexer Indexer memcached memcached memcached memcached (Search) (Search) mysql mysql mysql mysql (master) (master) (master) (master) Indexer Indexer memcached memcached memcached memcached (Search) (Search)
  54. 54. load balancing load balancing mongrels mongrels mongrels sinatra mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels
  55. 55. load balancing load balancing mongrels mongrels mongrels sinatra mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels Indexer Indexer memcached memcached memcached Robot Robot (Search) (Search) mysql mysql mysql (master) (slave) (slave) Indexer Indexer memcached memcached memcached Robot Robot (Search) (Search)
  56. 56. load balancing load balancing mongrels mongrels mongrels sinatra mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels ActiveDNA (REST) Indexer Indexer memcached memcached memcached Robot Robot (Search) (Search) mysql mysql mysql (master) (slave) (slave) Indexer Indexer memcached memcached memcached Robot Robot (Search) (Search)
  57. 57. load balancing load balancing mongrels mongrels mongrels sinatra mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels ActiveDNA (REST) DNA Credentials (PHP) ActiveDNA (REST) Indexer Indexer memcached memcached memcached Robot Robot (Search) (Search) mysql mysql mysql (master) (slave) (slave) Indexer Indexer memcached memcached memcached Robot Robot (Search) (Search)
  58. 58. load balancing load balancing mongrels mongrels mongrels sinatra mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels ActiveDNA (REST) DNA DNA Credentials Profile (PHP) (PHP) ActiveDNA (REST) Indexer Indexer memcached memcached memcached Robot Robot (Search) (Search) mysql mysql mysql (master) (slave) (slave) Indexer Indexer memcached memcached memcached Robot Robot (Search) (Search)
  59. 59. load balancing load balancing mongrels mongrels mongrels sinatra mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels ActiveDNA (REST) DNA DNA DNA Credentials Profile Avatars (PHP) (PHP) (PHP) ActiveDNA (REST) Indexer Indexer memcached memcached memcached Robot Robot (Search) (Search) mysql mysql mysql (master) (slave) (slave) Indexer Indexer memcached memcached memcached Robot Robot (Search) (Search)
  60. 60. load balancing load balancing mongrels mongrels mongrels sinatra mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels ActiveDNA (REST) DNA DNA DNA DNA DNA Credentials Profile Avatars Scoring SocialGraph (PHP) (PHP) (PHP) (C++) (Python) ActiveDNA (REST) Indexer Indexer memcached memcached memcached Robot Robot (Search) (Search) mysql mysql mysql (master) (slave) (slave) Indexer Indexer memcached memcached memcached Robot Robot (Search) (Search)
  61. 61. load balancing load balancing mongrels mongrels mongrels sinatra mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels ActiveDNA (REST) DNA DNA DNA DNA DNA DNA DNA DNA DNA DNA Credentials Profile Avatars Scoring SocialGraph Messaging Messaging Messaging Messaging Messaging (PHP) (PHP) (PHP) (C++) (Python) (Erlang) (Erlang) (Erlang) (Erlang) (Erlang) ActiveDNA (REST) Indexer Indexer memcached memcached memcached Robot Robot (Search) (Search) mysql mysql mysql (master) (slave) (slave) Indexer Indexer memcached memcached memcached Robot Robot (Search) (Search)
  62. 62. load balancing load balancing mongrels mongrels mongrels sinatra mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels ActiveDNA (REST) load balancing DNA DNA DNA DNA DNA DNA DNA DNA DNA DNA Credentials Profile Avatars Scoring SocialGraph Messaging Messaging Messaging Messaging Messaging (PHP) (PHP) (PHP) (C++) (Python) (Erlang) (Erlang) (Erlang) (Erlang) (Erlang) ActiveDNA (REST) load balancing Indexer Indexer memcached memcached memcached Robot Robot (Search) (Search) mysql mysql mysql (master) (slave) (slave) Indexer Indexer memcached memcached memcached Robot Robot (Search) (Search)
  63. 63. load balancing load balancing mongrels mongrels mongrels sinatra mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels ActiveDNA (REST) load balancing DNA DNA DNA DNA DNA DNA DNA DNA DNA DNA Credentials Profile Avatars Scoring SocialGraph Messaging Messaging Messaging Messaging Messaging (PHP) (PHP) (PHP) (C++) (Python) (Erlang) (Erlang) (Erlang) (Erlang) (Erlang) ActiveDNA (REST) load balancing Indexer Indexer memcached memcached memcached Robot Robot (Search) (Search) mysql mysql mysql (master) (slave) (slave) Indexer Indexer memcached memcached memcached Robot Robot (Search) (Search)
  64. 64. load balancing load balancing mongrels mongrels mongrels sinatra mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels mongrels ActiveDNA (REST) load balancing DNA DNA DNA DNA DNA DNA DNA DNA DNA DNA Credentials Profile Avatars Scoring SocialGraph Messaging Messaging Messaging Messaging Messaging (PHP) (PHP) (PHP) (C++) (Python) (Erlang) (Erlang) (Erlang) (Erlang) (Erlang) ActiveDNA (REST) load balancing Indexer Indexer memcached memcached memcached Robot Robot (Search) (Search) mysql mysql mysql (master) (slave) (slave) Indexer Indexer memcached memcached memcached Robot Robot (Search) (Search)
  65. 65. load balancing load balancing mongrels mongrels mongrels sinatra mongrels mongrels mongrels mongrels mongrels humm... mongrels mongrels mongrels mongrels mongrels mongrels mongrels PHP... ActiveDNA (REST) WTF??!! load balancing DNA DNA DNA DNA DNA DNA DNA DNA DNA DNA Credentials Credentials Profile Avatars Scoring SocialGraph Messaging Messaging Messaging Messaging Messaging (PHP) (PHP) (PHP) (PHP) (C++) (Python) (Erlang) (Erlang) (Erlang) (Erlang) (Erlang) ActiveDNA (REST) load balancing Indexer Indexer memcached memcached memcached Robot Robot (Search) (Search) mysql mysql mysql (master) (slave) (slave) Indexer Indexer memcached memcached memcached Robot Robot (Search) (Search)
  66. 66. load balancing load balancing mongrels mongrels mongrels sinatra mongrels mongrels mongrels mongrels mongrels humm... mongrels mongrels mongrels mongrels mongrels mongrels mongrels PHP... ActiveDNA (REST) WTF??!! load balancing DNA DNA DNA DNA DNA DNA DNA DNA DNA DNA Credentials Profile Avatars Scoring SocialGraph Messaging Messaging Messaging Messaging Messaging (PHP) (PHP) (PHP) (C++) (Python) (Erlang) (Erlang) (Erlang) (Erlang) (Erlang) ActiveDNA (REST) load balancing Indexer Indexer memcached memcached memcached Robot Robot (Search) (Search) mysql mysql mysql (master) (slave) (slave) Indexer Indexer memcached memcached memcached Robot Robot (Search) (Search)
  67. 67. 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
  68. 68. Active DNA Por que não Active Resource Interface fixa Somente Rails sem overrides Pouca integração com external services
  69. 69. Busca Ferret: FAIL Sphinx: Muito limitado Lucene / Solr: Java Xapian: Interessante Mas, e se precisarmos mudar?
  70. 70. 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
  71. 71. 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
  72. 72. Dia-a-dia (SCRUM) Scrum Várias equipes Coordenação e priorização Rotacionamento de equipes Socialização de conhecimento Cultura compartilhada
  73. 73. Dia-a-dia (Git) Git Vários repositórios internos, todos Git Branches por estória Repositório sempre releasable
  74. 74. Dia-a-dia (Sharing) Cultura de bibliotecas Plugins Gems / Gem server interno Funcionalidade compartilhada via API
  75. 75. Dia-a-dia (Testes) Test all the f***ing time Sem cobertura, não há conhecimento Socialização de conhecimento Integração contínua
  76. 76. 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
  77. 77. Tests, tests & more tests
  78. 78. Tests, tests & more tests
  79. 79. Tests, tests & more tests
  80. 80. Continuous Integration
  81. 81. Continuous Integration
  82. 82. Continuous Integration
  83. 83. Continuous Integration
  84. 84. Continuous Integration
  85. 85. Continuous Integration
  86. 86. Continuous Integration
  87. 87. Continuous Integration
  88. 88. Continuous Integration
  89. 89. Continuous Integration
  90. 90. Continuous Integration
  91. 91. Continuous Integration
  92. 92. Continuous Integration
  93. 93. Continuous Integration
  94. 94. Continuous Integration
  95. 95. Continuous Integration
  96. 96. Venha trabalhar com a gente!!! vagas@blogblogs.com.br
  97. 97. Obrigado! mlemos@webcointernet.com rferraz@webcointernet.com fvieira@webcointernet.com http://brasigo.com.br/ http://blog.brasigo.com.br/ http://blogblogs.com.br/ http://blog.blogblogs.com.br/
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×