13. Aplicativo no orkut, facebook e portal de futebol
com mais de 940 mil usuários cadastrados e mais
de 50 milhões de apostas
segunda-feira, 28 de fevereiro de 2011
14. Game educativo para orkut para combate da dengue com
mais de 850 mil usuários cadastrados em menos de 2
meses
segunda-feira, 28 de fevereiro de 2011
15. Solução utilizada em grande parte dos e-commerces
brasileiros dentre eles:
segunda-feira, 28 de fevereiro de 2011
16. Aplicativo no orkut e no facebook com milhões de
usuários impactados
segunda-feira, 28 de fevereiro de 2011
24. Gargalo no servidor web
Verificar número máximo de clientes configurada
(maxclients)
KeepAlive
KeepAliveTimeout
segunda-feira, 28 de fevereiro de 2011
25. Apache Server Status
Existem
workers livres
segunda-feira, 28 de fevereiro de 2011
33. Acompanhe o log durante o
desenvolvimento
segunda-feira, 28 de fevereiro de 2011
34. Realize operações pesadas de modo
assíncrono
DelayedJob
Resque
Permitem criar uma fila de jobs para serem executados,
ex.: Envio de emails, atualização de timeline de amigos, etc.
segunda-feira, 28 de fevereiro de 2011
35. Problema Odrible.com
Com o crescimento dos usuários o ranking passou a
demorar mais de 1 dia para executar
segunda-feira, 28 de fevereiro de 2011
37. Fatores complicadores
Grande parte do processamento da regra de negócio era
feita no ruby
Muito tráfego de dados entre o MySQL e o Ruby
segunda-feira, 28 de fevereiro de 2011
38. Fatores complicadores
Grande parte do processamento da regra de negócio era
feita no ruby
Muito tráfego de dados entre o MySQL e o Ruby
Estrutura de dados não estava otimizada para o
processamento
segunda-feira, 28 de fevereiro de 2011
39. Solução
Desnormalizar base, otimizando a estrutura
segunda-feira, 28 de fevereiro de 2011
42. Solução
Desnormalizar base, otimizando o processamento
A ordenação do ranking foi substituída de:
Por: Processamento no banco
segunda-feira, 28 de fevereiro de 2011
43. Problema no parser de XML
O parser de XML desenvolvido passava em todos os
testes, porém quando foi para produção o XML aumentou
de tamanho e o tempo de processamento ficou inviável
segunda-feira, 28 de fevereiro de 2011
44. Solução
O parser que utilizava a biblioteca rexml teve que ser
reescrito utilizando a bliblioteca nokogiri
segunda-feira, 28 de fevereiro de 2011
45. Conclusão
Quando for utilizar bibliotecas, procure saber de sua
performance antes de começar a implementação
segunda-feira, 28 de fevereiro de 2011
46. Gargalo no banco de dados
segunda-feira, 28 de fevereiro de 2011
48. MySQLTuner
apenas 100MB de
um banco 3,9 GB
está em memória
segunda-feira, 28 de fevereiro de 2011
49. MySQLTuner
apenas 100MB de
um banco 3,9 GB
está em memória
Leia as
recomendações
e procure
entender o
significado
segunda-feira, 28 de fevereiro de 2011
50. MySQL
Procure manter o máximo possível do banco
em memória
Performance muito mais lenta quando se
utiliza disco
Ative o log de slow queries para ajudar a
identificar as queries que estão pesando o BD
segunda-feira, 28 de fevereiro de 2011
51. MySQL
Para fulltext search utilize algum servidor de
busca por ex.: Solr e Sphinx
Utilizar índice nas tabelas quando necessário
Utilizar o “Explain” nas queries para verificar o
seu comportamento e otimizá-las se for o
caso
mysqlperformanceblog.com
segunda-feira, 28 de fevereiro de 2011
52. Problema Odrible.com
Muitas apostas antigas que devem ser
guardadas porém pouco acessadas
segunda-feira, 28 de fevereiro de 2011
53. Solução:
Passar dados armazenados na engine InnoDB
para Archive que gastam quase 83% menos
espaço
segunda-feira, 28 de fevereiro de 2011
54. Resultado
Necessário menos memória para suportar
todo o banco em memória
segunda-feira, 28 de fevereiro de 2011
55. Fluxo de uma aplicação web
segunda-feira, 28 de fevereiro de 2011
56. Fluxo de uma aplicação web
Cache
(Varnish, Squid)
segunda-feira, 28 de fevereiro de 2011
57. Fluxo de uma aplicação web
Cache Cache
(Page cache,action
(Varnish, Squid) cache, fragment
cache)
segunda-feira, 28 de fevereiro de 2011
58. Fluxo de uma aplicação web
Cache Cache Cache
(Page cache,action
(Varnish, Squid) cache, fragment (Memcached)
cache)
segunda-feira, 28 de fevereiro de 2011
78. Referências
http://highscalability.com/
http://www.mysqlperformanceblog.com/
http://railslab.newrelic.com/scaling-rails
segunda-feira, 28 de fevereiro de 2011
79. Obrigado!
Bruno Andrade Alves
bruno@dito.com.br
segunda-feira, 28 de fevereiro de 2011