Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
persistência poliglota 
na prática 
@nettofarah 
http://hdwallpapersx.com/wp-content/uploads/2013/09/Green-Parakeet-Wallpa...
- - Essas crianças de hoje são verdadeiros poliglotas. 
! 
- - Verdadeiros o que? 
! 
- - Poliglotas. Esses das cavernas.
@nettofarah 
full stack developer na 
8tracks.com 
8tracks.com/nettofarah 
netto@8tracks.com
8tracks
stats 
• users: 13.3mi! 
• public playlists: 1.8mi (4,2 mi total)! 
• uploaded tracks: 31mi! 
• requests/minute: ~100k
a melhor ferramenta para o problema 
http://peopletakingpictureswithipads.tumblr.com/
melhor ferramenta 
http://peopletakingpictureswithipads.tumblr.com/
para o problema! 
http://peopletakingpictureswithipads.tumblr.com/
esforço humano esforço da máquina
F.C.P.P. = dev <3 + machine <3
modelo relacional 
• funciona bem! (até certo ponto) 
• confiável 
• no mercado há muito tempo 
• já foi bem testado 
• be...
o modelo relacional
NoSQL 
• relativamente novo 
• resolve problemas específicos 
• developer friendly
NoSQL
O que a gente já testou
Porque você deveria 
experimentar NoSQL
Porque NoSQL 
• pode escalar muito bem 
• pode resolver de forma mais elegante 
• é empolgante para os devs 
• data-first*
Por que desistir de NoSQL?
Complexidade
pode custar caro
muitas mudanças
falta de ferramentas adequadas
reinventar a roda
como decidir? 
• documentação 
• comunidades (stack overflow, github, forums, irc, 
listas de email) 
• suporte 
• quão ad...
O que funcionou bem pra 
nós
primário 
- escrita 
- leituras leves 
réplica slave 
- leitura 
- queries 
pesadas
auxiliar players 
primário 
réplica slave
cache 
é um balde onde a 
gente joga as coisas
aquela aula chata de 
estrutura de dados… 
só que funciona
redis
redis 
head 
next next next next 
tail
• super fácil de deployar 
• não usamos para o tráfego comum 
• joga qualquer coisa lá dentro
• 16k rpm 
• full text search 
• autocomplete 
• busca personalizada 
• cluster de 4 máquinas
• tsv 
• optimizado para IO 
• queries pesadas/bigdata com SQL 
• paralelo/distribuído
e como é 
que a gente fez?
testes em produção!
rode os sistemas 
lado a lado
em-proxy 
1 $> em-proxy -l 8080 ! 
2 -r localhost:8081 ! 
3 -d mysql.8tracks.com:8082, ! 
4 postgres.8tracks.com:8082 -v!
1 Proxy.start(host: "0.0.0.0", p: 80) do |conn|! 
2 conn.server :srv, host: "127.0.0.1", p: 81! 
3 ! 
4 # modificar pra ou...
servir aos poucos 
1 elasticsearch_rate = 0.2! 
2 if rand() =< elasticsearch_rate! 
3 ElasticSearch.query('justin bieber')...
feature toggles 
1 tags = []! 
2 if FEATURES.explore_beta(current_user)! 
3 tags = RedisExplore.get_tags! 
4 else! 
5 tags...
monitoring
new relic
banco de dados
custom
lições 
• testar coisa nova é divertido! 
• dá pra testar em produção seguramente 
• entenda os tradeoffs 
• documentação ...
Perguntas?
we’re hiring! 
8tracks.com/jobs 
netto@8tracks.com
Persistência Poliglota na Prática
Persistência Poliglota na Prática
Persistência Poliglota na Prática
Upcoming SlideShare
Loading in …5
×

Persistência Poliglota na Prática

1,191 views

Published on

Ficou difícil escalar o seu banco de dados atual?
Já percebeu alguma vez que um dos problemas que você está tentando resolver parece não combinar muito com um modelo relacional?
Já voltou atrás e se arrependeu com uma escolha de NoSQL?

Nós enfrentamos esses e outros problemas escalando nossa app Rails da 8tracks.com pra 13 milhões de usuários mais de 100 mil requests por minuto.

Vou falar sobre as motivações e desafios que passamos implementando soluções com MySQL, Redis, SOLR, Postgres, Redshift, MongoDB, ElasticSearch e CouchDB. E o que nos incentivou a permanecer ou voltar atrás com cada uma dessas soluções.

Published in: Technology
  • Be the first to comment

Persistência Poliglota na Prática

  1. 1. persistência poliglota na prática @nettofarah http://hdwallpapersx.com/wp-content/uploads/2013/09/Green-Parakeet-Wallpaper.jpg
  2. 2. - - Essas crianças de hoje são verdadeiros poliglotas. ! - - Verdadeiros o que? ! - - Poliglotas. Esses das cavernas.
  3. 3. @nettofarah full stack developer na 8tracks.com 8tracks.com/nettofarah netto@8tracks.com
  4. 4. 8tracks
  5. 5. stats • users: 13.3mi! • public playlists: 1.8mi (4,2 mi total)! • uploaded tracks: 31mi! • requests/minute: ~100k
  6. 6. a melhor ferramenta para o problema http://peopletakingpictureswithipads.tumblr.com/
  7. 7. melhor ferramenta http://peopletakingpictureswithipads.tumblr.com/
  8. 8. para o problema! http://peopletakingpictureswithipads.tumblr.com/
  9. 9. esforço humano esforço da máquina
  10. 10. F.C.P.P. = dev <3 + machine <3
  11. 11. modelo relacional • funciona bem! (até certo ponto) • confiável • no mercado há muito tempo • já foi bem testado • bem documentado
  12. 12. o modelo relacional
  13. 13. NoSQL • relativamente novo • resolve problemas específicos • developer friendly
  14. 14. NoSQL
  15. 15. O que a gente já testou
  16. 16. Porque você deveria experimentar NoSQL
  17. 17. Porque NoSQL • pode escalar muito bem • pode resolver de forma mais elegante • é empolgante para os devs • data-first*
  18. 18. Por que desistir de NoSQL?
  19. 19. Complexidade
  20. 20. pode custar caro
  21. 21. muitas mudanças
  22. 22. falta de ferramentas adequadas
  23. 23. reinventar a roda
  24. 24. como decidir? • documentação • comunidades (stack overflow, github, forums, irc, listas de email) • suporte • quão adequado pra sua infra?
  25. 25. O que funcionou bem pra nós
  26. 26. primário - escrita - leituras leves réplica slave - leitura - queries pesadas
  27. 27. auxiliar players primário réplica slave
  28. 28. cache é um balde onde a gente joga as coisas
  29. 29. aquela aula chata de estrutura de dados… só que funciona
  30. 30. redis
  31. 31. redis head next next next next tail
  32. 32. • super fácil de deployar • não usamos para o tráfego comum • joga qualquer coisa lá dentro
  33. 33. • 16k rpm • full text search • autocomplete • busca personalizada • cluster de 4 máquinas
  34. 34. • tsv • optimizado para IO • queries pesadas/bigdata com SQL • paralelo/distribuído
  35. 35. e como é que a gente fez?
  36. 36. testes em produção!
  37. 37. rode os sistemas lado a lado
  38. 38. em-proxy 1 $> em-proxy -l 8080 ! 2 -r localhost:8081 ! 3 -d mysql.8tracks.com:8082, ! 4 postgres.8tracks.com:8082 -v!
  39. 39. 1 Proxy.start(host: "0.0.0.0", p: 80) do |conn|! 2 conn.server :srv, host: "127.0.0.1", p: 81! 3 ! 4 # modificar pra outro protocolo! 5 conn.on_data do |data|! 6 transform(data)! transformar para outro 7 ! protocolo end8 ! 9 conn.on_finish do |backend, name|! 10 # ignora a resposta! 11 unbind if backend == :srv! 12 end! 13 end! ignorar a resposta
  40. 40. servir aos poucos 1 elasticsearch_rate = 0.2! 2 if rand() =< elasticsearch_rate! 3 ElasticSearch.query('justin bieber')! 4 else! 5 SolrSearch.query('justin bieber')! 6 end!
  41. 41. feature toggles 1 tags = []! 2 if FEATURES.explore_beta(current_user)! 3 tags = RedisExplore.get_tags! 4 else! 5 tags = DatabaseExplore.global_tags! 6 end!
  42. 42. monitoring
  43. 43. new relic
  44. 44. banco de dados
  45. 45. custom
  46. 46. lições • testar coisa nova é divertido! • dá pra testar em produção seguramente • entenda os tradeoffs • documentação e suporte são essenciais!
  47. 47. Perguntas?
  48. 48. we’re hiring! 8tracks.com/jobs netto@8tracks.com

×