Cuidando de mais de 1 milhão de usuários por rodada no CartolaFC

548 visualizações

Publicada em

O CartolaFC é o maior fantasy game do Brasil. Não só pela quantidade de usuários, como também pela quantidade de dados manipulados durante as 38 rodadas do Campeonato Brasileiro de futebol. São mais de 3 milhões de usuários que a cada rodada geram 26 milhões de novas linhas no banco de dados.

Do lançamento em 2006 até hoje, evoluímos nossa arquitetura para uma aplicação web capaz de suportar milhares de acessos simultâneos e um grande volume de dados, utilizando tecnologias open source. Nessa palestra iremos apresentar uma visão aprofundada e técnica sobre a aplicação atual e os desafios encontrados ao escalá-la.

Ao assistir a apresentação, você entenderá nossas decisões técnicas – da escolha do banco de dados à definição dos servidores, passando por desafios ao escalar o CartolaFC. Também conhecerá dicas e experiências para auxiliar na construção de suas aplicações web e domar questões de desempenho e escalabilidade.

Publicada em: Tecnologia
0 comentários
2 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
548
No SlideShare
0
A partir de incorporações
0
Número de incorporações
11
Ações
Compartilhamentos
0
Downloads
3
Comentários
0
Gostaram
2
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Cuidando de mais de 1 milhão de usuários por rodada no CartolaFC

  1. 1. Cuidando de mais de 1 milhão de usuários por rodada no CartolaFC
  2. 2. Alexandre Saboia saboia@corp.globo.com @alexandresaboia - bacharel em informática 
 PUC-Rio - full stack developer - ~ 10 anos de globo.com - ~ 6 anos em equipes ágeis AlexandreSaboia saboia@corp.globo.com @alexandresaboia
  3. 3. cultura futebol centradano Fonte: IBGE | Stochos Sports Entertainment
  4. 4. números
  5. 5. +de 3milhõesdeusuários
  6. 6. 0 450K 900K 1,350K 1,800K 2009 2010 2011 2012 2013 2014 2015 histórico de recordes de times escalados em uma rodada
  7. 7. histórico de recordes de times escalados em uma rodada 450K 900K 1,350K 1,800K 2009 2010 2011 2012 2013 2014 2015 1.766.349timesescaladosna rodada14
  8. 8. histórico de recordes de times escalados em uma rodada 450K 900K 1,350K 1,800K 2009 2010 2011 2012 2013 2014 2015 1,766K 1,371K 1,284K1,277K 1,151K 750K 573K +1Mi timesescaladosem menosde24hs
  9. 9. histórico de recordes de times escalados em uma rodada 450K 900K 1,350K 1,800K 2009 2010 2011 2012 2013 2014 2015 1,766K 1,371K 1,284K1,277K 1,151K 750K 573K +200Mi requestsaAPIem umdomingo
  10. 10. http://immortaldc.com/wp-content/uploads/2013/10/system-analysis-1024x681.jpg Como suportamos todo este volume?
  11. 11. comosuportamostodoestevolume? api multi-device atualização processamentodos dados game aplicaçãoweb admin controledojogo
  12. 12. aplicação infraestrutura bancodedados atualizaçãoderodada comosuportamostodoestevolume?
  13. 13. aplicação infraestrutura bancodedados atualizaçãoderodada comosuportamostodoestevolume?
  14. 14. beanstalkd tecnologiasaplicadas asyncmongo
  15. 15. http://nginx.org/ https://github.com/nginx/nginx http://www.tornadoweb.org/en/stable/ https://github.com/tornadoweb/tornado tecnologiasaplicadas
  16. 16. http://nginx.org/ https://github.com/nginx/nginx http://www.tornadoweb.org/en/stable/ https://github.com/tornadoweb/tornado tecnologiasaplicadas Por que não?
  17. 17. http://blog.webfaction.com/2008/12/a-little-holiday-present-10000-reqssec-with-nginx-2/ x benchmark
  18. 18. http://blog.webfaction.com/2008/12/a-little-holiday-present-10000-reqssec-with-nginx-2/ x benchmark altaperformance baixoconsumode recursos e
  19. 19. outrospontosfortes reverse proxy cache expiração ativa load balancer baixo consumo alta performance https://www.digitalocean.com/community/tutorials/understanding-nginx-http-proxying-load-balancing-buffering-and-caching
  20. 20. Por que ?
  21. 21. https://developers.facebook.com/blog/post/301
  22. 22. outrospontosfortes open source assíncrono simples i/o não bloqueante performance
  23. 23. http://tornado.readthedocs.org/
  24. 24. repository template controller model arquitetura cache
  25. 25. cache estratégia: cachear as instâncias e também os relacionamentos @staticmethod! def get_by_status (status_id, rodada_id):! ! atleta_rodada_ids = AtletaRodada()! ! ! ! ! ! ! .ids_by_status(status_id=status_id, rodada_id=rodada_id)! ! atletas_lesionados = []! ! for atleta_rodada_id in atleta_rodada_ids:! atleta = AtletaRodada().get(atleta_rodada_id)! atletas_lesionados.append(atleta)! ! return atletas_lesionados
  26. 26. ganhandovelocidade chamadas ajax montam determinadas partes controller monta a estrutura cache estático dos jsons destas partes
  27. 27. ganhandovelocidade versionamento dos assets otimização dos seletores jquery um único arquivo .js minificado redução no tamanho e no número de imagens
  28. 28. aplicação infraestrutura bancodedados atualizaçãoderodada comosuportamostodoestevolume?
  29. 29. emação workerworker workerworker usuário internet
  30. 30. emação usuário internet wowo wowo wowo wowo wowo wowo Load Balancer
  31. 31. cartolabox beanstalkd API GAME DEAMON DEAMON DEAMON DEAMON API e Game compartilham recursos
  32. 32. beanstalkd API GAM DEAMON DEAMON DEAMON DEAMON boxesemaisboxes
  33. 33. beanstalkd API GAM DEAMON DEAMON DEAMON DEAMON boxesemaisboxes beanstalk API GAM DEAMON DEAMON DEAMON DEAMON beanstalk API GAM DEAMON DEAMON DEAMON DEAMON beanstalk API GAM DEAMON DEAMON DEAMON DEAMON beanstalkd API GAM DEAMON DEAMON DEAMON DEAMON beanstalkd API GAM DEAMON DEAMON DEAMON DEAMON
  34. 34. volumedeacessos pense: requests dinâmicos com tempo de resposta em 100ms é aceitável? e se você tiver 300.000 conexões simultâneas? e se depois do request cachearmos por 15 min em um arquivo estático? e se você tiver 1.5Mi de times escalados? cenário: consulta a pontuação parcial via api
  35. 35. volumedeacessos requests > 100ms viram problema neste cenário de concorrência ações: otimização para ter < 50ms rever a relevância de cada dado retornado pela API mudar a estratégia de entrega da api problemática cenário: consulta a pontuação parcial via api
  36. 36. testesdeperformance usar as ferramentas ao longo do desenvolvimento para identificar gargalos http://httpd.apache.org/docs/2.2/programs/ab.html https://github.com/wg/wrk wrka HTTP benchmarking tool apache benchmark é possível acompanhar a performance do seu código rodando testes da sua máquina não é necessário que sua aplicação chegue em produção
  37. 37. aplicação infraestrutura bancodedados atualizaçãoderodada comosuportamostodoestevolume?
  38. 38. ~166GB +300Mi tamanhofísico dobancoatéa rodada#20 delinhasem somenteumatabela atéarodada#20 +26Mi denovaslinhasa cadarodada processada
  39. 39. slave masterfailover vip de leitura vip de escrita read only bancodedados
  40. 40. bancodedados slave masterfailover vip de leitura vip de escrita read only Atraso na replicação da escrita implica na retirada da máquina slave do vip
  41. 41. boasestratégias querys simples cruzar os dados na aplicação cachear resultados de querys básicas saber o que o ORM está fazendo update? delete + insert querys com tempo > 50 ms ?
  42. 42. tabela enorme partitions rodada 1 rodada 2 rodada 3 rodada N …
  43. 43. tabela enorme partitions sub-tabela partition 1 sub-tabela partition 2 sub-tabela partition 3 sub-tabela partition N … rodada 1 rodada 2 rodada 3 rodada N rodada 1 rodada 2 rodada 3 rodada N …
  44. 44. aplicação infraestrutura bancodedados atualizaçãoderodada comosuportamostodoestevolume?
  45. 45. multiprocesso multiprocesso em Python: http://sebastianraschka.com/Articles/2014_multiprocessing_intro.html https://docs.python.org/2.7/library/multiprocessing.html 24 Cores CPU from multiprocessing import Process
  46. 46. 24 Cores CPU 24 Cores CPU ... multiprocesso multiprocesso http://sebastianraschka.com/Articles/2014_multiprocessing_intro.html https://docs.python.org/2.7/library/multiprocessing.html
  47. 47. pré-cache dados básicos dados dos atletas • rodada, partidas, clubes, status, esquema tático … • info do atleta, pontuação, mercado e filtros estratégia: cachear as instâncias e também os relacionamentos
  48. 48. pré-cache dados dos times dados das ligas a estratégia: cachear as instâncias e também os relacionamentos • info do time, pontuação, escalação • info da liga, ranking, times de uma liga, ligas de um time
  49. 49. Perguntas? https://github.com/globocom/IWantToWorkAtGloboCom

×