MongoDB @ Globo.com
-
Upload
franklin-amorim -
Category
Technology
-
view
6.158 -
download
3
description
Transcript of MongoDB @ Globo.com
MONGODB @ GLOBO.COM
Julho/2011
FRANKLIN AMORIM
email: [email protected] : @cyberelfo
• Provedora de serviços tecnológicos e plataformas web para as empresas Globo
• Líder nos segmentos de notícias, esportes e entretenimento
Números de Junho/2011:
•Mais de 70 milhões de visitantes únicos (cookies distintos)
•Mais de 550 milhões de visitas
•Mais de 3 bilhões de pageviews, em quase 300.000 páginas distintas
•Maior aplicação dinâmica da Globo.com
•Maior Fantasy Game da internet brasileira
•Mais de 2 milhões de usuários cadastrados
• 15 milhões de visitas em junho
•Quase 90 milhões de pageviews em junho
•Quase 30k sessões simultâneas nos picos de acesso
• Gráfico do datacenter
O DESAFIO
Desenvolver uma aplicação de mural, com capacidade para atender ao volume de
acesso do Cartola, com alta performance e disponibilidade.
PREMISSAS
• Velocidade
• Robustez
• Escalabilidade
• Perda de mensagens não é critico
• Indisponibilidade inicial é tolerável
MYSQL X
MONGODB
MONGODB - VANTAGENS
• Velocidade
• Sem necessidade de um ORM
• Acesso mais natural aos dados
• Sem schema / sem migrations (com exceções)
• Failover automático
• Possibilidade de escalar escritas com sharding
VISÃO SIMPLIFICADA
Nginx/Tornado MongoDB
VISÃO SIMPLIFICADA
Nginx/Tornado MongoDB
VISÃO SIMPLIFICADA
Nginx/Tornado MongoDB
VISÃO SIMPLIFICADA
Nginx/Tornado MongoDB
VISÃO SIMPLIFICADA
Nginx/Tornado MongoDB
VISÃO SIMPLIFICADA
Nginx/Tornado MongoDB
VISÃO SIMPLIFICADA
Nginx/Tornado MongoDB
VISÃO SIMPLIFICADA
Nginx/Tornado MongoDB
VISÃO SIMPLIFICADA
Nginx/Tornado MongoDB
VISÃO SIMPLIFICADA
Nginx/Tornado MongoDB
TECNOLOGIAS
•Ngnix - Webserver
• Tornado - Application
• Beanstalk - Fila
•Memcached
• AsyncMongo (ao invés do PyMongo)
•MongoDB
• 01 database server - MongoDB
• 01 application server
• 01 collection com 100 milhões de mensagens
• Resultado: 300 requests/segundo
• Com 02 application + Memcached: 1.000 reqs/sec
TESTES DE PERFORMANCE
//newsfeed.post - Original{ id : 1223, post_origem_id: 1123, data: "200411300746400000", mensagem: "Minha mensagem", Liga: { id: 1930, nome: "Liga 1930", slug: "liga-1930" } time: { id: 1005, nome: "Time 1005", slug: "time-1005", flashvars: {...} }}
//newsfeed.post - Final{ data: "Tue Jun 15 2010 9:00:00 GMT-0400" mensagem: "Minha mensagem" liga: { id: 1930 nome: "Liga 1930" slug: "liga-1930" } comentarios:[ { id: 251902, data: "Tue Jun 16 2010 11:00:00 GMT-0400", mensagem: "Legal!", time: {...} }, { id: 251903, data: "Tue Jun 16 2010 14:00:00 GMT-0400", mensagem: "Nem tanto..." time: {...} } ]}
WORKING SET
Trabalhar com um working set reduzido, minimizando o impacto das
consultas ao banco
ARQUITETURA
Primário
Secundário
Arbitro
ARQUITETURA
Primário
Secundário
Arbitro
Cartola
ARQUITETURA
Primário
Secundário
Arbitro
Primário
Secundário
Cartola Replica Set 2
RESULTADOS
•Deploy feito em maio/2011
• Banco funcionando 24/7
•Nenhum incidente reportado desde a implantação
• 1 milhão de mensagens publicadas
RESULTADO
LIÇÕES APRENDIDAS
• Embedding vs Referencing
•Minimizar o tamanho dos documentos
• Escolher corretamente os data types
• Reduza o working set
OUTROS PROJETOS
RECEITAS.COM
CATALOGO DE VÍDEOS
PARTICIPAÇÕES
PERGUNTAS?
OBRIGADO! :)
twitter : @cyberelfoemail: [email protected]