Persistência Poliglota na Prática

1.003 visualizações

Publicada em

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.

Publicada em: Tecnologia
0 comentários
2 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
1.003
No SlideShare
0
A partir de incorporações
0
Número de incorporações
59
Ações
Compartilhamentos
0
Downloads
2
Comentários
0
Gostaram
2
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

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

×