SlideShare uma empresa Scribd logo
1 de 51
Baixar para ler offline
persistência poliglota 
na prática 
@nettofarah 
http://hdwallpapersx.com/wp-content/uploads/2013/09/Green-Parakeet-Wallpaper.jpg
- - 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 
• bem documentado
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 adequado pra sua infra?
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 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
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!
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!
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 e suporte são essenciais!
Perguntas?
we’re hiring! 
8tracks.com/jobs 
netto@8tracks.com

Mais conteúdo relacionado

Semelhante a Persistência Poliglota na Prática

Python - Programando em alto nível
Python - Programando em alto nívelPython - Programando em alto nível
Python - Programando em alto nívelIgor Sobreira
 
História dos Sistemas - Por que estamos fazendo desse jeito
História dos Sistemas - Por que estamos fazendo desse jeitoHistória dos Sistemas - Por que estamos fazendo desse jeito
História dos Sistemas - Por que estamos fazendo desse jeitoLeo Lorieri
 
Adeus Wordpress. Ola Pelican!
Adeus Wordpress. Ola Pelican!Adeus Wordpress. Ola Pelican!
Adeus Wordpress. Ola Pelican!magnunleno
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAThiago Cifani
 
Python: a arma secreta do Cientista de Dados
Python: a arma secreta do Cientista de DadosPython: a arma secreta do Cientista de Dados
Python: a arma secreta do Cientista de DadosRodrigo Senra
 
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)Fabiano Weimar
 
Opendata - Não posso fazer tijolos sem barro !
Opendata - Não posso fazer tijolos sem barro !Opendata - Não posso fazer tijolos sem barro !
Opendata - Não posso fazer tijolos sem barro !Thiago Rondon
 
Iccyber2012 sandro suffert apura - jacomo picolini teamcymru - desafio fore...
Iccyber2012   sandro suffert apura - jacomo picolini teamcymru - desafio fore...Iccyber2012   sandro suffert apura - jacomo picolini teamcymru - desafio fore...
Iccyber2012 sandro suffert apura - jacomo picolini teamcymru - desafio fore...Sandro Suffert
 
QCon SP 2015 - Advogados do diabo: como a arquitetura emergente de sua aplica...
QCon SP 2015 - Advogados do diabo: como a arquitetura emergente de sua aplica...QCon SP 2015 - Advogados do diabo: como a arquitetura emergente de sua aplica...
QCon SP 2015 - Advogados do diabo: como a arquitetura emergente de sua aplica...Gleicon Moraes
 
“Web Spiders” – Automação para Web Hacking
“Web Spiders” – Automação para Web Hacking“Web Spiders” – Automação para Web Hacking
“Web Spiders” – Automação para Web HackingConviso Application Security
 
Planejamento de Capacidade - Técnicas e Ferramentas
Planejamento de Capacidade - Técnicas e FerramentasPlanejamento de Capacidade - Técnicas e Ferramentas
Planejamento de Capacidade - Técnicas e FerramentasRodrigo Campos
 
MEO Cloud - Python Lisbon Meetup
MEO Cloud - Python Lisbon MeetupMEO Cloud - Python Lisbon Meetup
MEO Cloud - Python Lisbon MeetupAndré Cruz
 
TDCPOA2018 - Trilha Python - Testes de Performance com Locust
TDCPOA2018 - Trilha Python - Testes de Performance com LocustTDCPOA2018 - Trilha Python - Testes de Performance com Locust
TDCPOA2018 - Trilha Python - Testes de Performance com LocustMayara Fernandes
 
IPCOP - Firewalls para os comuns mortais
IPCOP - Firewalls para os comuns mortaisIPCOP - Firewalls para os comuns mortais
IPCOP - Firewalls para os comuns mortaisMarco Pinheiro
 
Como definir a quantidade de workers para sua aplicação
Como definir a quantidade de workers para sua aplicaçãoComo definir a quantidade de workers para sua aplicação
Como definir a quantidade de workers para sua aplicaçãoWeverton Timoteo
 
Palestra Tony Rodrigues - OctaneLabs WarpSpeed Project – Computação Forense e...
Palestra Tony Rodrigues - OctaneLabs WarpSpeed Project – Computação Forense e...Palestra Tony Rodrigues - OctaneLabs WarpSpeed Project – Computação Forense e...
Palestra Tony Rodrigues - OctaneLabs WarpSpeed Project – Computação Forense e...BHack Conference
 
Dados abertos do wikipedia ao governo
Dados abertos do wikipedia ao governoDados abertos do wikipedia ao governo
Dados abertos do wikipedia ao governoThiago Rondon
 
Cache, Concorrência e Sincronização.
Cache, Concorrência e Sincronização.Cache, Concorrência e Sincronização.
Cache, Concorrência e Sincronização.Thiago Rondon
 

Semelhante a Persistência Poliglota na Prática (20)

Python - Programando em alto nível
Python - Programando em alto nívelPython - Programando em alto nível
Python - Programando em alto nível
 
História dos Sistemas - Por que estamos fazendo desse jeito
História dos Sistemas - Por que estamos fazendo desse jeitoHistória dos Sistemas - Por que estamos fazendo desse jeito
História dos Sistemas - Por que estamos fazendo desse jeito
 
Adeus Wordpress. Ola Pelican!
Adeus Wordpress. Ola Pelican!Adeus Wordpress. Ola Pelican!
Adeus Wordpress. Ola Pelican!
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
Python: a arma secreta do Cientista de Dados
Python: a arma secreta do Cientista de DadosPython: a arma secreta do Cientista de Dados
Python: a arma secreta do Cientista de Dados
 
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
 
Insustentavel js
Insustentavel jsInsustentavel js
Insustentavel js
 
Opendata - Não posso fazer tijolos sem barro !
Opendata - Não posso fazer tijolos sem barro !Opendata - Não posso fazer tijolos sem barro !
Opendata - Não posso fazer tijolos sem barro !
 
Iccyber2012 sandro suffert apura - jacomo picolini teamcymru - desafio fore...
Iccyber2012   sandro suffert apura - jacomo picolini teamcymru - desafio fore...Iccyber2012   sandro suffert apura - jacomo picolini teamcymru - desafio fore...
Iccyber2012 sandro suffert apura - jacomo picolini teamcymru - desafio fore...
 
QCon SP 2015 - Advogados do diabo: como a arquitetura emergente de sua aplica...
QCon SP 2015 - Advogados do diabo: como a arquitetura emergente de sua aplica...QCon SP 2015 - Advogados do diabo: como a arquitetura emergente de sua aplica...
QCon SP 2015 - Advogados do diabo: como a arquitetura emergente de sua aplica...
 
“Web Spiders” – Automação para Web Hacking
“Web Spiders” – Automação para Web Hacking“Web Spiders” – Automação para Web Hacking
“Web Spiders” – Automação para Web Hacking
 
Planejamento de Capacidade - Técnicas e Ferramentas
Planejamento de Capacidade - Técnicas e FerramentasPlanejamento de Capacidade - Técnicas e Ferramentas
Planejamento de Capacidade - Técnicas e Ferramentas
 
MEO Cloud - Python Lisbon Meetup
MEO Cloud - Python Lisbon MeetupMEO Cloud - Python Lisbon Meetup
MEO Cloud - Python Lisbon Meetup
 
Python e suas aplicações
Python e suas aplicaçõesPython e suas aplicações
Python e suas aplicações
 
TDCPOA2018 - Trilha Python - Testes de Performance com Locust
TDCPOA2018 - Trilha Python - Testes de Performance com LocustTDCPOA2018 - Trilha Python - Testes de Performance com Locust
TDCPOA2018 - Trilha Python - Testes de Performance com Locust
 
IPCOP - Firewalls para os comuns mortais
IPCOP - Firewalls para os comuns mortaisIPCOP - Firewalls para os comuns mortais
IPCOP - Firewalls para os comuns mortais
 
Como definir a quantidade de workers para sua aplicação
Como definir a quantidade de workers para sua aplicaçãoComo definir a quantidade de workers para sua aplicação
Como definir a quantidade de workers para sua aplicação
 
Palestra Tony Rodrigues - OctaneLabs WarpSpeed Project – Computação Forense e...
Palestra Tony Rodrigues - OctaneLabs WarpSpeed Project – Computação Forense e...Palestra Tony Rodrigues - OctaneLabs WarpSpeed Project – Computação Forense e...
Palestra Tony Rodrigues - OctaneLabs WarpSpeed Project – Computação Forense e...
 
Dados abertos do wikipedia ao governo
Dados abertos do wikipedia ao governoDados abertos do wikipedia ao governo
Dados abertos do wikipedia ao governo
 
Cache, Concorrência e Sincronização.
Cache, Concorrência e Sincronização.Cache, Concorrência e Sincronização.
Cache, Concorrência e Sincronização.
 

Mais de Ivayr Farah Netto

Mais de Ivayr Farah Netto (6)

Building a Single Page App: One Page at a Time
Building a Single Page App: One Page at a TimeBuilding a Single Page App: One Page at a Time
Building a Single Page App: One Page at a Time
 
a 8tracks ama o Redis
a 8tracks ama o Redisa 8tracks ama o Redis
a 8tracks ama o Redis
 
Redis &lt;3 at 8tracks.com
Redis &lt;3 at 8tracks.comRedis &lt;3 at 8tracks.com
Redis &lt;3 at 8tracks.com
 
Rails girls
Rails girlsRails girls
Rails girls
 
Away day
Away dayAway day
Away day
 
Testes, TDD e Outras Coisas Que Você Deveria Saber
Testes, TDD e Outras Coisas Que Você Deveria SaberTestes, TDD e Outras Coisas Que Você Deveria Saber
Testes, TDD e Outras Coisas Que Você Deveria Saber
 

Persistência Poliglota na Prática