persistência poliglota na prática

51
http://hdwallpapersx.com/wp-content/uploads/2013/09/Green-Parakeet-Wallpaper.jpg persistência poliglota na prática @nettofarah

Upload: ivayr-farah-netto

Post on 25-May-2015

573 views

Category:

Technology


5 download

DESCRIPTION

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.

TRANSCRIPT

Page 1: Persistência Poliglota na Prática

http://hdwallpapersx.com/wp-content/uploads/2013/09/Green-Parakeet-Wallpaper.jpg

persistência poliglota na prática

@nettofarah

Page 2: Persistência Poliglota na Prática

- - Essas crianças de hoje são verdadeiros poliglotas. !

- - Verdadeiros o que? !

- - Poliglotas. Esses das cavernas.

Page 3: Persistência Poliglota na Prática

@nettofarah

8tracks.com/nettofarah [email protected]

full stack developer na 8tracks.com

Page 4: Persistência Poliglota na Prática

8tracks

Page 5: Persistência Poliglota na Prática
Page 6: Persistência Poliglota na Prática

stats

• users: 13.3mi!

• public playlists: 1.8mi (4,2 mi total)!

• uploaded tracks: 31mi!

• requests/minute: ~100k

Page 7: Persistência Poliglota na Prática

a melhor ferramenta para o problema

http://peopletakingpictureswithipads.tumblr.com/

Page 8: Persistência Poliglota na Prática

melhor ferramenta

http://peopletakingpictureswithipads.tumblr.com/

Page 9: Persistência Poliglota na Prática

para o problema!

http://peopletakingpictureswithipads.tumblr.com/

Page 10: Persistência Poliglota na Prática

esforço humano esforço da máquina

Page 11: Persistência Poliglota na Prática

F.C.P.P. = dev <3 + machine <3

Page 12: Persistência Poliglota na Prática

modelo relacional• funciona bem! (até certo ponto)

• confiável

• no mercado há muito tempo

• já foi bem testado

• bem documentado

Page 13: Persistência Poliglota na Prática

o modelo relacional

Page 14: Persistência Poliglota na Prática

NoSQL

• relativamente novo

• resolve problemas específicos

• developer friendly

Page 15: Persistência Poliglota na Prática

NoSQL

Page 16: Persistência Poliglota na Prática

O que a gente já testou

Page 17: Persistência Poliglota na Prática

Porque você deveria experimentar NoSQL

Page 18: Persistência Poliglota na Prática

Porque NoSQL

• pode escalar muito bem

• pode resolver de forma mais elegante

• é empolgante para os devs

• data-first*

Page 19: Persistência Poliglota na Prática

Por que desistir de NoSQL?

Page 20: Persistência Poliglota na Prática

Complexidade

Page 21: Persistência Poliglota na Prática

pode custar caro

Page 22: Persistência Poliglota na Prática

muitas mudanças

Page 23: Persistência Poliglota na Prática

falta de ferramentas adequadas

Page 24: Persistência Poliglota na Prática

reinventar a roda

Page 25: Persistência Poliglota na Prática

como decidir?

• documentação

• comunidades (stack overflow, github, forums, irc, listas de email)

• suporte

• quão adequado pra sua infra?

Page 26: Persistência Poliglota na Prática

O que funcionou bem pra nós

Page 27: Persistência Poliglota na Prática
Page 28: Persistência Poliglota na Prática

primário

réplica slave

- escrita - leituras leves

- leitura - queries pesadas

Page 29: Persistência Poliglota na Prática

auxiliar players

primário

réplica slave

Page 30: Persistência Poliglota na Prática
Page 31: Persistência Poliglota na Prática

cache

é um balde onde a gente joga as coisas

Page 32: Persistência Poliglota na Prática

aquela aula chata de estrutura de dados…

só que funciona

Page 33: Persistência Poliglota na Prática

redis

Page 34: Persistência Poliglota na Prática

redis

next next next next

head

tail

Page 35: Persistência Poliglota na Prática

• super fácil de deployar

• não usamos para o tráfego comum

• joga qualquer coisa lá dentro

Page 36: Persistência Poliglota na Prática

• 16k rpm

• full text search

• autocomplete

• busca personalizada

• cluster de 4 máquinas

Page 37: Persistência Poliglota na Prática

• tsv

• optimizado para IO

• queries pesadas/bigdata com SQL

• paralelo/distribuído

Page 38: Persistência Poliglota na Prática

e como é que a gente fez?

Page 39: Persistência Poliglota na Prática

testes em produção!

Page 40: Persistência Poliglota na Prática

rode os sistemas lado a lado

Page 41: Persistência Poliglota na Prática

em-proxy

1 $> em-proxy -l 8080 \!2 -r localhost:8081 \!3 -d mysql.8tracks.com:8082, \!4 postgres.8tracks.com:8082 -v!

Page 42: Persistência Poliglota na Prática

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)! 7 end! 8 ! 9 conn.on_finish do |backend, name|!10 # ignora a resposta!11 unbind if backend == :srv!12 end!13 end!

transformar para outro protocolo

ignorar a resposta

Page 43: Persistência Poliglota na Prática

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!

Page 44: Persistência Poliglota na Prática

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!

Page 45: Persistência Poliglota na Prática

monitoring

Page 46: Persistência Poliglota na Prática

new relic

Page 47: Persistência Poliglota na Prática

banco de dados

Page 48: Persistência Poliglota na Prática

custom

Page 49: Persistência Poliglota na Prática

lições

• testar coisa nova é divertido!

• dá pra testar em produção seguramente

• entenda os tradeoffs

• documentação e suporte são essenciais!

Page 50: Persistência Poliglota na Prática

Perguntas?

Page 51: Persistência Poliglota na Prática

we’re hiring!

[email protected]

8tracks.com/jobs