boo box e my sql
TRANSCRIPT
boo-box e MySQLuma história de evolução continua de um sistema de publicidade
on-line
O que fazemos ?
Anúncios em blogs, sites e redes sociais
Onde fazemos ?
•430 mil sites/blogs/perfis em redes sociais
•60 mil publishers cadastrados
•60M de usuários únicos/mês
•1B de anúncios/mês
Como fazemos ?
O que isso gera ?
•40 GB dados/dia (raw)
•1.2 TB dados/mês (raw)
•15 GB de informações/dia (agregado)
•450 GB de informações/mês (agregado)
•behavioral targeting
•re-targeting
•segmentation
• inventory targets
O que processamos ?
Linha do Tempo
0
22,500,000
45,000,000
67,500,000
90,000,000
20092010
20112012impressões/dia
Adicionado índices para otimizar JOIN’s entre tabelas
Problema no processamento de grandes volumes de dados
Desafio 109/2009
Desafio 1
Adicionado índices para otimizar JOIN’s entre tabelas
09/2009
Implementação de um sistema de fila/consumidor para inserção assíncrona
Crescimento no número de inserções gerando aumento no tempo de resposta nas APP’s
Desafio 212/2009
Desafio 2
Implementação de um sistema de fila/consumidor para inserção assíncrona
12/2009
Aumento no enfileiramento de inserções
Desafio 303/2010
Desafio 3
Modificado ‘engine’ do servidor mestre para ‘blackhole’
03/2010
Lentidão na consulta de estatísticas
Desafio 407/2010
Desafio 4
Propagação do resultado das ‘triggers’ para servidores slave
07/2010
Lentidão na inserção de dados mysql (max 4.5K/s)
Desafio 501/2011
Desafio 5
Troca do sistema de arquivo para XFS (6K/s)
01/2011
Lentidão para consulta de dados massivos (Big Data)
Desafio 606/2011
Desafio 6
Utilização de Google BigQuery e AWS EMR
06/2011
•8 TB de dados agregados
•32 TB em relatórios processados/mês
•35 TB em dados (Raw)
•22 B em fatos gerados pela rede
Cenário Atual
Encurtador
•NGINX + Lua + MySQL
•Lógica do ‘shortener’ na camada MySQL usando Stored Procedures
•20K requests por segundos
boas praticas
•Não permitir null no banco de dados, defina um valor default sempre que possível
•Usar banco com sql_mode menos permissivo
•Cuidado com indíces (falta e excessos)
MySQL + Memcached
•100% compatível com memcached
•Menor tempo de resposta. será ???
•Gerenciamento de cache simplificado
•Persistência