MONGODB @ GLOBO.COM
       Julho/2011
FRANKLIN AMORIM




 email: franklin@corp.globo.com
       twitter: @cyberelfo
• Provedorade 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
TESTES DE PERFORMANCE

• 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
//newsfeed.post - Final
                                {
                                  data: "Tue Jun 15 2010 9:00:00 GMT-0400"
                                  mensagem: "Minha mensagem"
//newsfeed.post - Original
                                  liga: {
{
                                    id: 1930
  id : 1223,
                                    nome: "Liga 1930"
  post_origem_id: 1123,
                                    slug: "liga-1930"
  data: "200411300746400000",
                                  }
  mensagem: "Minha mensagem",
                                  comentarios:[
  Liga: {
                                    {
    id: 1930,
                                       id: 251902,
    nome: "Liga 1930",
                                       data: "Tue Jun 16 2010 11:00:00 GMT-0400",
    slug: "liga-1930"
                                       mensagem: "Legal!",
  }
                                       time: {...}
  time: {
                                    },
    id: 1005,
                                    {
    nome: "Time 1005",
                                       id: 251903,
    slug: "time-1005",
                                       data: "Tue Jun 16 2010 14:00:00 GMT-0400",
    flashvars: {...}
                                       mensagem: "Nem tanto..."
  }
                                       time: {...}
}
                                    }
                                  ]
                                }
WORKING SET

   Trabalhar com um working set
reduzido, minimizando o impacto das
         consultas ao banco
ARQUITETURA


 Primário


             Arbitro


Secundário
ARQUITETURA


 Primário


               Arbitro


Secundário



     Cartola
ARQUITETURA


 Primário                    Primário


               Arbitro


Secundá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: @cyberelfo
email: franklin@corp.globo.com

MongoDB @ Globo.com