SlideShare una empresa de Scribd logo
1 de 54
Descargar para leer sin conexión
Cuidando de mais de 1 milhão
de usuários por rodada no CartolaFC
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
cultura
futebol
centradano
Fonte: IBGE | Stochos Sports Entertainment
números
+de
3milhõesdeusuários
0
450K
900K
1,350K
1,800K
2009 2010 2011 2012 2013 2014 2015
histórico de recordes de times escalados em uma rodada
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
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
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
http://immortaldc.com/wp-content/uploads/2013/10/system-analysis-1024x681.jpg
Como suportamos todo
este volume?
comosuportamostodoestevolume?
api
multi-device
atualização
processamentodos
dados
game
aplicaçãoweb
admin
controledojogo
aplicação
infraestrutura
bancodedados
atualizaçãoderodada
comosuportamostodoestevolume?
aplicação
infraestrutura
bancodedados
atualizaçãoderodada
comosuportamostodoestevolume?
beanstalkd
tecnologiasaplicadas
asyncmongo
http://nginx.org/

https://github.com/nginx/nginx
http://www.tornadoweb.org/en/stable/

https://github.com/tornadoweb/tornado
tecnologiasaplicadas
http://nginx.org/

https://github.com/nginx/nginx
http://www.tornadoweb.org/en/stable/

https://github.com/tornadoweb/tornado
tecnologiasaplicadas
Por que não?
http://blog.webfaction.com/2008/12/a-little-holiday-present-10000-reqssec-with-nginx-2/
x
benchmark
http://blog.webfaction.com/2008/12/a-little-holiday-present-10000-reqssec-with-nginx-2/
x
benchmark
altaperformance
baixoconsumode
recursos
e
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
Por que ?
https://developers.facebook.com/blog/post/301
outrospontosfortes
open source
assíncrono
simples
i/o não bloqueante
performance
http://tornado.readthedocs.org/
repository template	

controller	

model
arquitetura
cache
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
ganhandovelocidade
chamadas ajax montam
determinadas partes
controller monta a
estrutura
cache estático dos jsons
destas partes
ganhandovelocidade
versionamento dos assets
otimização dos seletores
jquery
um único arquivo .js
minificado
redução no tamanho e no
número de imagens
aplicação
infraestrutura
bancodedados
atualizaçãoderodada
comosuportamostodoestevolume?
emação
workerworker
workerworker
usuário
internet
emação
usuário
internet
wowo
wowo
wowo
wowo
wowo
wowo
Load Balancer
cartolabox
beanstalkd
API GAME
DEAMON
DEAMON
DEAMON
DEAMON
API e Game compartilham recursos
beanstalkd
API GAM
DEAMON
DEAMON
DEAMON
DEAMON
boxesemaisboxes
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
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
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
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
aplicação
infraestrutura
bancodedados
atualizaçãoderodada
comosuportamostodoestevolume?
~166GB
+300Mi
tamanhofísico
dobancoatéa
rodada#20
delinhasem
somenteumatabela
atéarodada#20
+26Mi
denovaslinhasa
cadarodada
processada
slave
masterfailover
vip de leitura
vip de escrita
read only
bancodedados
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
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 ?
tabela enorme
partitions
rodada 1
rodada 2
rodada 3
rodada N
…
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
…
aplicação
infraestrutura
bancodedados
atualizaçãoderodada
comosuportamostodoestevolume?
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
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
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
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
Perguntas?
https://github.com/globocom/IWantToWorkAtGloboCom

Más contenido relacionado

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

Workshop Hands-On APIX 2018 - Trilha Básica
Workshop Hands-On APIX 2018 - Trilha BásicaWorkshop Hands-On APIX 2018 - Trilha Básica
Workshop Hands-On APIX 2018 - Trilha BásicaSensedia
 
Arquitetura Serverless para Machine Learning
Arquitetura Serverless para Machine LearningArquitetura Serverless para Machine Learning
Arquitetura Serverless para Machine LearningFelipe Santos
 
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)Fabiano Weimar
 
PyData - Consumindo e publicando web APIs com Python
PyData - Consumindo e publicando web APIs com PythonPyData - Consumindo e publicando web APIs com Python
PyData - Consumindo e publicando web APIs com PythonBruno Rocha
 
Os 7 Pecados Capitais na exposição de APIs RESTful
Os 7 Pecados Capitais na exposição de APIs RESTfulOs 7 Pecados Capitais na exposição de APIs RESTful
Os 7 Pecados Capitais na exposição de APIs RESTfulKleber Bacili
 
PHP Experience 2016 - [Workshop] APIs bem desenhadas como base para integrações
PHP Experience 2016 - [Workshop] APIs bem desenhadas como base para integraçõesPHP Experience 2016 - [Workshop] APIs bem desenhadas como base para integrações
PHP Experience 2016 - [Workshop] APIs bem desenhadas como base para integraçõesiMasters
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...tdc-globalcode
 
Construindo sua primeira ontologia
Construindo sua primeira ontologiaConstruindo sua primeira ontologia
Construindo sua primeira ontologiaRômulo Jales
 
ASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoComunidade NetPonto
 
Ruby on Rails 100% na cloud com heroku e outros serviços
Ruby on Rails 100% na cloud com heroku e outros serviçosRuby on Rails 100% na cloud com heroku e outros serviços
Ruby on Rails 100% na cloud com heroku e outros serviçosBruno Ghisi
 
Do 502 BadGateway ao record de 200
Do 502 BadGateway ao record de 200Do 502 BadGateway ao record de 200
Do 502 BadGateway ao record de 200Bruno Paiuca
 
TDC2018SP | Trilha JavaScript - Javascript Streams
TDC2018SP | Trilha JavaScript - Javascript StreamsTDC2018SP | Trilha JavaScript - Javascript Streams
TDC2018SP | Trilha JavaScript - Javascript Streamstdc-globalcode
 
MVPConf - Azure Functions
MVPConf - Azure FunctionsMVPConf - Azure Functions
MVPConf - Azure FunctionsCDS
 
NoSQL na nuvem com o Azure Cosmos DB - MVPConf 2018
NoSQL na nuvem com o Azure Cosmos DB - MVPConf 2018NoSQL na nuvem com o Azure Cosmos DB - MVPConf 2018
NoSQL na nuvem com o Azure Cosmos DB - MVPConf 2018Renato Groff
 
PHP Conference Brazil 2015 - PHP + Sharepoint - Integrando Serviços Microsoft...
PHP Conference Brazil 2015 - PHP + Sharepoint - Integrando Serviços Microsoft...PHP Conference Brazil 2015 - PHP + Sharepoint - Integrando Serviços Microsoft...
PHP Conference Brazil 2015 - PHP + Sharepoint - Integrando Serviços Microsoft...Rodrigo Wanderley de Melo Cardoso
 
APIs na nuvem: implementando soluções RESTful com o Microsoft Azure - Azure ...
 APIs na nuvem: implementando soluções RESTful com o Microsoft Azure - Azure ... APIs na nuvem: implementando soluções RESTful com o Microsoft Azure - Azure ...
APIs na nuvem: implementando soluções RESTful com o Microsoft Azure - Azure ...Renato Groff
 
Arquitetura Java - Escalando além do Hype
Arquitetura Java - Escalando além do HypeArquitetura Java - Escalando além do Hype
Arquitetura Java - Escalando além do HypeRafael Ponte
 
Como um grande sistema REST funciona - arquitetura e desempenho
Como um grande sistema REST funciona - arquitetura e desempenhoComo um grande sistema REST funciona - arquitetura e desempenho
Como um grande sistema REST funciona - arquitetura e desempenhoDavid Robert Camargo de Campos
 

Similar a Cuidando de mais de 1 milhão de usuários por rodada no CartolaFC (20)

Workshop Hands-On APIX 2018 - Trilha Básica
Workshop Hands-On APIX 2018 - Trilha BásicaWorkshop Hands-On APIX 2018 - Trilha Básica
Workshop Hands-On APIX 2018 - Trilha Básica
 
Arquitetura Serverless para Machine Learning
Arquitetura Serverless para Machine LearningArquitetura Serverless para Machine Learning
Arquitetura Serverless para Machine Learning
 
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
 
PyData - Consumindo e publicando web APIs com Python
PyData - Consumindo e publicando web APIs com PythonPyData - Consumindo e publicando web APIs com Python
PyData - Consumindo e publicando web APIs com Python
 
Os 7 Pecados Capitais na exposição de APIs RESTful
Os 7 Pecados Capitais na exposição de APIs RESTfulOs 7 Pecados Capitais na exposição de APIs RESTful
Os 7 Pecados Capitais na exposição de APIs RESTful
 
PHP Experience 2016 - [Workshop] APIs bem desenhadas como base para integrações
PHP Experience 2016 - [Workshop] APIs bem desenhadas como base para integraçõesPHP Experience 2016 - [Workshop] APIs bem desenhadas como base para integrações
PHP Experience 2016 - [Workshop] APIs bem desenhadas como base para integrações
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
 
Construindo sua primeira ontologia
Construindo sua primeira ontologiaConstruindo sua primeira ontologia
Construindo sua primeira ontologia
 
ASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis Paulino
 
Ruby on Rails 100% na cloud com heroku e outros serviços
Ruby on Rails 100% na cloud com heroku e outros serviçosRuby on Rails 100% na cloud com heroku e outros serviços
Ruby on Rails 100% na cloud com heroku e outros serviços
 
Rodando SAP na AWS
Rodando SAP na AWSRodando SAP na AWS
Rodando SAP na AWS
 
Do 502 BadGateway ao record de 200
Do 502 BadGateway ao record de 200Do 502 BadGateway ao record de 200
Do 502 BadGateway ao record de 200
 
TDC2018SP | Trilha JavaScript - Javascript Streams
TDC2018SP | Trilha JavaScript - Javascript StreamsTDC2018SP | Trilha JavaScript - Javascript Streams
TDC2018SP | Trilha JavaScript - Javascript Streams
 
MVPConf - Azure Functions
MVPConf - Azure FunctionsMVPConf - Azure Functions
MVPConf - Azure Functions
 
Hacking Twitter API [ Giran Siege ]
Hacking Twitter API [ Giran Siege ]Hacking Twitter API [ Giran Siege ]
Hacking Twitter API [ Giran Siege ]
 
NoSQL na nuvem com o Azure Cosmos DB - MVPConf 2018
NoSQL na nuvem com o Azure Cosmos DB - MVPConf 2018NoSQL na nuvem com o Azure Cosmos DB - MVPConf 2018
NoSQL na nuvem com o Azure Cosmos DB - MVPConf 2018
 
PHP Conference Brazil 2015 - PHP + Sharepoint - Integrando Serviços Microsoft...
PHP Conference Brazil 2015 - PHP + Sharepoint - Integrando Serviços Microsoft...PHP Conference Brazil 2015 - PHP + Sharepoint - Integrando Serviços Microsoft...
PHP Conference Brazil 2015 - PHP + Sharepoint - Integrando Serviços Microsoft...
 
APIs na nuvem: implementando soluções RESTful com o Microsoft Azure - Azure ...
 APIs na nuvem: implementando soluções RESTful com o Microsoft Azure - Azure ... APIs na nuvem: implementando soluções RESTful com o Microsoft Azure - Azure ...
APIs na nuvem: implementando soluções RESTful com o Microsoft Azure - Azure ...
 
Arquitetura Java - Escalando além do Hype
Arquitetura Java - Escalando além do HypeArquitetura Java - Escalando além do Hype
Arquitetura Java - Escalando além do Hype
 
Como um grande sistema REST funciona - arquitetura e desempenho
Como um grande sistema REST funciona - arquitetura e desempenhoComo um grande sistema REST funciona - arquitetura e desempenho
Como um grande sistema REST funciona - arquitetura e desempenho
 

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