SlideShare uma empresa Scribd logo
1 de 67
Baixar para ler offline
comoéanovaarquiteturadogamefeitapara
suportamosumvolumeaindamaiordeacessos
Alexandre Saboia Fuziyama
Bacharel em Informática pela PUC-Rio
11 anos na globo.com
Full Stack Web Developer
9 anos trabalhando em equipes ágeis
@alexandresaboia saboia@corp.globo.com
aumentara
atratividade
brasileirão
multidevice
multidevice
uper
cartola-api
VOLUME
alguns números desta
temporada
335milcartoleiros pro
Cartoleiro
10milhõescartoleiros
5.8milhõestimes escalados na rodada 17 de 2017
+610milhõesescalações únicas na temporada 2017
+900milusuários simultâneos no ga*
~100milrequests por segundo na api
* google analytics
+3.5bilhõesde aberturas únicas de apps na temporada
+8milhõesapps ativas no mês de junho
+17milhõesde downloads das apps
ARQUITETURA
nas internas, como o
cartolafc funciona?
2010-2015
ARQUITETURA E TECNOLOGIA EM
atualização
game
admin
api
arquiteturacentradanogame
apps
BD
2010-2015
game
api atu admin
2016-2017
ARQUITETURA E TECNOLOGIA EM
atualização
game
admin
arquiteturacentradanogame
apps
BD
2010-2015
api
arquiteturacentradanaAPI
atualização
admin
api
BDv2
2
2016-2017
game
apps
golang
game
api
infra
banco de dados
backend
frontend
infra
banco de dados
backend
frontend
Stackresumida
I N F R A EST R U T U R A
RPAAS Galeb Tsuru
Cartola
Comoé
UsuárioCartoleiro
Stackresumida
I N F R A EST R U T U R A
tsuru
PaaS-PlataformasaService
OrquestraçãodecontainersDocker
Rápido,FácileContinuousDeployment
Facilitaamanutençãoeconfiguraçãodainfraestrutura
Escalável,ConfiáveleOpensource
Suportaváriaslinguagens
Aproximadodesenvolvedordainfraestrutura
maisdetalhesem:https://tsuru.io
Stackresumida
I N F R A EST R U T U R A
tsuru
Usuário
Cartoleiro
Galeb
RouterL7
Unit
Unit
Unit
VM
Unit
Unit
Unit
VM
Unit
Unit
Unit
Unit
VM
máquinafísica
RPAAS
Stackresumida
I N F R A EST R U T U R A
Comoé
RPAAS Galeb Tsuru
Cartola
UsuárioCartoleiro
Stackresumida
I N F R A EST R U T U R A
Comoé
RoutereLoadBalancerdinâmicodenível7
Altamenteescalável
Permitetrocasderotaseconfigsemrestartoureload
Opensource
Auxiliaotsururefazendorotasparaasnovasunit
maisdetalhesem:http://galeb.io
Galeb
Stackresumida
I N F R A EST R U T U R A
Unit
Galeb
Usuário
Cartoleiro
Unit
Unit
Unit
Unit
Unit
Unit
Galeb
RouterL7
Unit
Unit
Unit
VM
VM
VM
RPAAS
Stackresumida
I N F R A EST R U T U R A
Comoé
RPAAS Galeb Tsuru
Cartola
UsuárioCartoleiro
Stackresumida
I N F R A EST R U T U R A
RPaaS
RPaaS-ReverseProxyasaService
PlugindisponívelparaoTsuru
NGINXcomproxyreversoparaasuaaplicação
RespeitaosheadersdefinidosnaaplicaçãoRPAAS
Usuário RPAAS Galeb Tsuru
Cartoleiro
unit
Stack
I N F R A EST R U T U R A
Fluxodetalhadodeumarequisição
unit
unit
unit
unit
unit
unit
unit
BF BB
https
I N F R A EST R U T U R A
apartirde2016
FullTLS
100% dos acessos no CDA é feito via https
Monitoração
I N F R A EST R U T U R A
aplicadaemtodasascamadas
Monitoração
I N F R A EST R U T U R A
aplicadaemtodasascamadas
infra
banco de dados
backend
frontend
Bancodedados
I N F R A EST R U T U R A
mudançaparaoMySQL5.7
pré-processadordequeriesmaiseficiente:ganhamos
maiorvelocidadenaexecução
replicaçãopormulti-thread:reduçãonotempode
replicaçãoentreomastereosslaves.
Bancodedados
I N F R A EST R U T U R A
MySQL5.7
+820gb
dados + índices na 32ª rodada
Bancodedados
I N F R A EST R U T U R A
MySQL5.7-replicaçãomaster/slave
read.cartola.mysql.interno.com
write.cartola.mysql.interno.com
READ READREAD
VIP de leitura
READ WRITE
VIP de escrita
read.cartola.mysql.interno.com
write.cartola.mysql.interno.com
Bancodedados
I N F R A EST R U T U R A
MySQL5.7-partitioning
CREATE TABLE members (
firstname VARCHAR(25) NOT NULL,
lastname VARCHAR(25) NOT NULL,
username VARCHAR(16) NOT NULL,
email VARCHAR(35),
joined DATE NOT NULL
)
PARTITION BY RANGE( YEAR(joined) ) (
PARTITION p0 VALUES LESS THAN (1960),
PARTITION p1 VALUES LESS THAN (1970),
PARTITION p2 VALUES LESS THAN (1980),
PARTITION p3 VALUES LESS THAN (1990),
PARTITION p4 VALUES LESS THAN MAXVALUE
);
https://dev.mysql.com/doc/refman/5.7/en/partitioning-types.html
members
p0
p1
p4
p3
p2. . .
Bancodedados
I N F R A EST R U T U R A
MySQL5.7-cuidadocomocrescimentodatabela
ALTER TABLE time_atleta MODIFY time_atleta_id bigintunsigned
NOT NULL AUTO_INCREMENT;
CREATETABLE`time_atleta`(
`time_atleta_id`int(11)unsignedNOTNULLAUTO_INCREMENT,
`rodada_id`tinyint(3)unsignedNOTNULL,
…
);
15horas!
infra
banco de dados
backend
frontend
Backend
I N F R A EST R U T U R A
tecnologiasutilizadasnaapi
golang
Backend
I N F R A EST R U T U R A
tecnologiasutilizadasnaapi
golang
https://www.tiobe.com/tiobe-index/go/
September 2017
2015.1
Backend
I N F R A EST R U T U R A
mudançaparaogolang
resultadosiniciais:
python: 4.500r/s
golang:14.000r/s
observações:
• concorrência
• aproveitamentoderecursos
testesapi
pythonxgolang
*emumamesmamáquinafísicasemcacheestático
Backend
I N F R A EST R U T U R A
mudançaparaogolang
40%
deeconomiaemCPU
2015 -2016
Backend
I N F R A EST R U T U R A
mudançaparaogolang
2015 -2017
23%
deeconomiaemCPU
Backend
I N F R A EST R U T U R A
mudançaparaogolang
conexões: 2015=140k 2016=1.1M 2017=1.2M
160milreq/seg 100milreq/seg
8xmais
conexõessimultâneas
2015 -2017
Backend
I N F R A EST R U T U R A
mudançaparaogolang
9xmais
usuáriossimultâneos
noGA 2015=100k 2016=493k 2017=905k
2015 -2017
BACKEND
estratégias utilizadas
Backend
I N F R A EST R U T U R A
estratégiaparacacheamento
Usuário
Cartoleiro
RPAAS Tsuru
Cartola
cacheadonorpaasrespeitandoomax-age
...
READ
Backend
I N F R A EST R U T U R A
cacheamentocache-control-maxAge
func WriteCachedResponse(w http.ResponseWriter, data interface{}, statusCode int, maxAge string) {
w.Header().Set("Content-Type", "application/json;charset=UTF-8")
w.Header().Set("Vary", "Accept-Encoding")
w.Header().Set("Cache-Control", maxAge)
w.WriteHeader(statusCode)
json.NewEncoder(w).Encode(&data)
}
func WriteResponse(w http.ResponseWriter, data interface{}, statusCode int) {
w.Header().Set("Content-Type", "application/json;charset=UTF-8")
w.Header().Set("Vary", "Accept-Encoding")
w.WriteHeader(statusCode)
json.NewEncoder(w).Encode(&data)
}
Backend
I N F R A EST R U T U R A
estratégiaparacacheamento
Usuário
Cartoleiro
RPAAS Tsuru
Cartola
cacheadonomemcached
aplicação
...
READ
Backend
I N F R A EST R U T U R A
estratégiaparacacheamento
Usuário
Cartoleiro
RPAAS Tsuru
Cartola
requisiçãocompleta-recuperandodobancodedados
...
READ
Backend
I N F R A EST R U T U R A
estratégiaparacacheamento-fragmentaçãoporobjetoselistas
“time_id”: {[atleta_id,atleta_id,…]}
ex.: “1234” : {[1,2,3,4,5,6,7,8,9,10,11,12] }
"atleta_id": {“id”:1, “nome”:“RomáriodeSouzaFaria”,…}
“liga_id”: {[time_id,time_id,…]}
ex.: “5678” : {[11,22,33,44,55,66,77,88,99,110,111,112] }
"time_id": {“id”:11, “nome”:“PregerebaFC”,“slug”:“pregereba-fc”,…}
Backend
I N F R A EST R U T U R A
utilizaçãodeworkers
Recuperaçãodosatletasdomercado
Recuperaçãodosdadosdotime
http://divan.github.io/posts/go_concurrency_visualize/
fan-out pattern
Backend
I N F R A EST R U T U R A
utilizaçãodefilas
ManipulaçãodosSVGsdeescudosecamisas
Indexaçãodetimeseligasnabusca(ES)
Notificaçãopush
Backend
I N F R A EST R U T U R A
tempomáximoparauma conexão
10seg
éobastante!
normalmenteasrequisiçõesduramentre10mse100ms
Backend
I N F R A EST R U T U R A
estratégiaquerysnoMySQL
Queryssimplescompoucosjoins
Poucosupdates,prefiradelete+insert
Junteosdadosnaaplicação
Backend
I N F R A EST R U T U R A
gzipnaaplicação
n := negroni.New(negroni.NewRecovery(), gzip.Gzip(gzip.BestSpeed), Cors())
const (
NoCompression = flate.NoCompression
BestSpeed = flate.BestSpeed
BestCompression = flate.BestCompression
DefaultCompression = flate.DefaultCompression
HuffmanOnly = flate.HuffmanOnly
)
Backend
I N F R A EST R U T U R A
bibliotecasimportantes
GorillaMux
Testfy
jarcoal/httpmock.v1
logrus
guregu/null.v3
redis.v4
github.com/codegangsta/negroni
github.com/dropbox/godropbox/memcache
github.com/phyber/negroni-gzip/gzip
github.com/go-sql-driver/mysql
github.com/jmoiron/sqlx
infra
banco de dados
backend
frontend
Frontend
I N F R A EST R U T U R A
apostasemumSPA
• aplicaçãoestática
• reusodecomponentes
• comunicaçãocomocartolasomenteviaapi
• reduçãonaquantidadederequests
Frontend
I N F R A EST R U T U R A
porquêAngularJS?
• umframeworkmvccomtudoqueprecisaríamosparacriara
navegaçãodocartola
• implementaçãodefluxosmaisexplícito
• organizaçãodocódigo(lógicadenegócio,camadade
apresentação)
• facilidadenacomunicaçãoentrecomponentesnamesmapágina
Frontend
I N F R A EST R U T U R A
vantagensdoAngularJS?
problemasconhecidos
Frontend
I N F R A EST R U T U R A
outrasestratégias
• usodeSVGparaamaioriadasimagensdogameweb
• utilizaçãodespritessvg
Frontend
I N F R A EST R U T U R A
outrasestratégias
• minifyhtml
• minifycss
• otimizadorparaimagens
• svgsprite
tasksGulp
Frontend
I N F R A EST R U T U R A
CDN
NGINXdoRpaaSésuperperformáticoparaaentregadeestático
usamosumaappestáticanotsuruparafuncionarcomoumaCDN
Estratégiaparaversionamentodosdeploysevitandoocacheamento
nobrowserdousuário
https://cartolafc.globo.com/dist/1.1.7/js/main.js
https://cartolafc.globo.com/dist/1.1.7/css/cartola.css
https://cartolafc.globo.com/dist/1.1.7/img/logo_cartola.png
Takeaway
I N F R A EST R U T U R A
otimizaçãoeperformance
"Premature optimization is the root of all evil."
DonaldKnuth
perguntas?
temosvagas! talentos.globo.com

Mais conteúdo relacionado

Mais procurados

Plano de negócio Biblioteca Embrapa
Plano de negócio Biblioteca EmbrapaPlano de negócio Biblioteca Embrapa
Plano de negócio Biblioteca EmbrapaMarcela Bassoli
 
Metodologia pesquisa cientifica
Metodologia pesquisa cientificaMetodologia pesquisa cientifica
Metodologia pesquisa cientificaLuan Alex
 
Pré-História: Geral e do Brasil (História Profunda da Humanidade)
Pré-História: Geral e do Brasil (História Profunda da Humanidade)Pré-História: Geral e do Brasil (História Profunda da Humanidade)
Pré-História: Geral e do Brasil (História Profunda da Humanidade)Sheila Soarte
 
Ts e tc - Tempo de sangria e Tempo de Coagulação
Ts e tc - Tempo de sangria e Tempo de CoagulaçãoTs e tc - Tempo de sangria e Tempo de Coagulação
Ts e tc - Tempo de sangria e Tempo de CoagulaçãoMariana Remiro
 
Liberdade religiosa - Filosofia
Liberdade religiosa  - FilosofiaLiberdade religiosa  - Filosofia
Liberdade religiosa - FilosofiaAmanda Silveira
 
Alimentação na Gestação
Alimentação na GestaçãoAlimentação na Gestação
Alimentação na GestaçãoJulio Cesar Dessoy
 
O Ensino da História Durante a Ditadura
O Ensino da História Durante a DitaduraO Ensino da História Durante a Ditadura
O Ensino da História Durante a DitaduraGisele Finatti Baraglio
 
Aula 4-sociologia-aula-4-antropologia
Aula 4-sociologia-aula-4-antropologiaAula 4-sociologia-aula-4-antropologia
Aula 4-sociologia-aula-4-antropologiaSuely Lima Lopes
 
Edital igreja evangélica assembleia de deus
Edital igreja evangélica assembleia de deusEdital igreja evangélica assembleia de deus
Edital igreja evangélica assembleia de deusJunior Campos
 
O conceito de pesquisa documental
O conceito de pesquisa documentalO conceito de pesquisa documental
O conceito de pesquisa documentalFabio Tadeu
 
Montagem apresentacao cotas
Montagem apresentacao cotasMontagem apresentacao cotas
Montagem apresentacao cotasEnio Rodrigo
 
Era vargas (1930-1945)
Era vargas (1930-1945)Era vargas (1930-1945)
Era vargas (1930-1945)Dinei2814
 
Análise crítica da pesquisa científica e suas diversas abordagens
Análise crítica da pesquisa científica e suas diversas abordagensAnálise crítica da pesquisa científica e suas diversas abordagens
Análise crítica da pesquisa científica e suas diversas abordagensDimensson Costa Santos
 

Mais procurados (20)

Plano de negócio Biblioteca Embrapa
Plano de negócio Biblioteca EmbrapaPlano de negócio Biblioteca Embrapa
Plano de negócio Biblioteca Embrapa
 
Metodologia pesquisa cientifica
Metodologia pesquisa cientificaMetodologia pesquisa cientifica
Metodologia pesquisa cientifica
 
Pré-História: Geral e do Brasil (História Profunda da Humanidade)
Pré-História: Geral e do Brasil (História Profunda da Humanidade)Pré-História: Geral e do Brasil (História Profunda da Humanidade)
Pré-História: Geral e do Brasil (História Profunda da Humanidade)
 
Ts e tc - Tempo de sangria e Tempo de Coagulação
Ts e tc - Tempo de sangria e Tempo de CoagulaçãoTs e tc - Tempo de sangria e Tempo de Coagulação
Ts e tc - Tempo de sangria e Tempo de Coagulação
 
Pesquisa qualitativa
Pesquisa qualitativaPesquisa qualitativa
Pesquisa qualitativa
 
Liberdade religiosa - Filosofia
Liberdade religiosa  - FilosofiaLiberdade religiosa  - Filosofia
Liberdade religiosa - Filosofia
 
Alimentação na Gestação
Alimentação na GestaçãoAlimentação na Gestação
Alimentação na Gestação
 
AVALIAÇÃO 1º ANO ENSINO MÉDIO - BAIXA IDADE MÉDIA
AVALIAÇÃO 1º ANO ENSINO MÉDIO - BAIXA IDADE MÉDIAAVALIAÇÃO 1º ANO ENSINO MÉDIO - BAIXA IDADE MÉDIA
AVALIAÇÃO 1º ANO ENSINO MÉDIO - BAIXA IDADE MÉDIA
 
O Ensino da História Durante a Ditadura
O Ensino da História Durante a DitaduraO Ensino da História Durante a Ditadura
O Ensino da História Durante a Ditadura
 
Diversidade étnico
Diversidade étnicoDiversidade étnico
Diversidade étnico
 
Aula 4-sociologia-aula-4-antropologia
Aula 4-sociologia-aula-4-antropologiaAula 4-sociologia-aula-4-antropologia
Aula 4-sociologia-aula-4-antropologia
 
Conceitos básicos do ensino de história
Conceitos básicos do ensino de históriaConceitos básicos do ensino de história
Conceitos básicos do ensino de história
 
Edital igreja evangélica assembleia de deus
Edital igreja evangélica assembleia de deusEdital igreja evangélica assembleia de deus
Edital igreja evangélica assembleia de deus
 
O conceito de pesquisa documental
O conceito de pesquisa documentalO conceito de pesquisa documental
O conceito de pesquisa documental
 
Trabalho - Anemia
Trabalho - AnemiaTrabalho - Anemia
Trabalho - Anemia
 
4.Exames de urina.pptx
4.Exames de urina.pptx4.Exames de urina.pptx
4.Exames de urina.pptx
 
Corrida De Sapinhos
Corrida De SapinhosCorrida De Sapinhos
Corrida De Sapinhos
 
Montagem apresentacao cotas
Montagem apresentacao cotasMontagem apresentacao cotas
Montagem apresentacao cotas
 
Era vargas (1930-1945)
Era vargas (1930-1945)Era vargas (1930-1945)
Era vargas (1930-1945)
 
Análise crítica da pesquisa científica e suas diversas abordagens
Análise crítica da pesquisa científica e suas diversas abordagensAnálise crítica da pesquisa científica e suas diversas abordagens
Análise crítica da pesquisa científica e suas diversas abordagens
 

Semelhante a NovaarquiteturadogameCartolaparavolumesmaisaltosdeacesso

Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...
Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...
Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...Alexandre Saboia Fuziyama
 
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
 
Você não deveria escrever uma API para isso
Você não deveria escrever uma API para issoVocê não deveria escrever uma API para isso
Você não deveria escrever uma API para issoJunior Conte
 
Construindo sua primeira ontologia
Construindo sua primeira ontologiaConstruindo sua primeira ontologia
Construindo sua primeira ontologiaRômulo Jales
 
Construa painéis administrativos em Adobe Flex integrados com ASP.NET MVC
Construa painéis administrativos em Adobe Flex  integrados com ASP.NET MVCConstrua painéis administrativos em Adobe Flex  integrados com ASP.NET MVC
Construa painéis administrativos em Adobe Flex integrados com ASP.NET MVCIgor Musardo
 
Aplicações com Tecnologias Web
Aplicações com Tecnologias WebAplicações com Tecnologias Web
Aplicações com Tecnologias WebRildo Pragana
 
Construindo URA e Sistemas de Call Center com Asterisk
Construindo URA e Sistemas de Call Center com AsteriskConstruindo URA e Sistemas de Call Center com Asterisk
Construindo URA e Sistemas de Call Center com AsteriskRodrigo R Passos
 
Construindo URA e Sistemas de Call Center com Asterisk
Construindo URA e Sistemas de Call Center com AsteriskConstruindo URA e Sistemas de Call Center com Asterisk
Construindo URA e Sistemas de Call Center com AsteriskRodrigo R Passos
 
TDC2018FLN | Trilha Arquitetura - Architecting for Resilience
TDC2018FLN | Trilha Arquitetura - Architecting for ResilienceTDC2018FLN | Trilha Arquitetura - Architecting for Resilience
TDC2018FLN | Trilha Arquitetura - Architecting for Resiliencetdc-globalcode
 
Architecting For Resilience
Architecting For ResilienceArchitecting For Resilience
Architecting For ResilienceFabiano Modos
 
Campus Party 2015: Os 10 Atributos de uma API de Sucesso
Campus Party 2015: Os 10 Atributos de uma API de SucessoCampus Party 2015: Os 10 Atributos de uma API de Sucesso
Campus Party 2015: Os 10 Atributos de uma API de SucessoKleber Bacili
 
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
 
Django + extjs pelos forms
Django + extjs pelos formsDjango + extjs pelos forms
Django + extjs pelos formsMoacir Filho
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Christiano Anderson
 
Fsi8a Sistemas Internet
Fsi8a Sistemas InternetFsi8a Sistemas Internet
Fsi8a Sistemas InternetLuiz Domingues
 
Intervalo Técnico - QG Mobile
Intervalo Técnico - QG MobileIntervalo Técnico - QG Mobile
Intervalo Técnico - QG MobileVitor Albuquerque
 

Semelhante a NovaarquiteturadogameCartolaparavolumesmaisaltosdeacesso (20)

Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...
Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...
Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...
 
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 ...
 
Você não deveria escrever uma API para isso
Você não deveria escrever uma API para issoVocê não deveria escrever uma API para isso
Você não deveria escrever uma API para isso
 
Construindo sua primeira ontologia
Construindo sua primeira ontologiaConstruindo sua primeira ontologia
Construindo sua primeira ontologia
 
MongoDB + PHP
MongoDB + PHPMongoDB + PHP
MongoDB + PHP
 
Construa painéis administrativos em Adobe Flex integrados com ASP.NET MVC
Construa painéis administrativos em Adobe Flex  integrados com ASP.NET MVCConstrua painéis administrativos em Adobe Flex  integrados com ASP.NET MVC
Construa painéis administrativos em Adobe Flex integrados com ASP.NET MVC
 
Aplicações com Tecnologias Web
Aplicações com Tecnologias WebAplicações com Tecnologias Web
Aplicações com Tecnologias Web
 
Relatório
RelatórioRelatório
Relatório
 
Meetup MUG-RS KingHost
Meetup MUG-RS KingHostMeetup MUG-RS KingHost
Meetup MUG-RS KingHost
 
Construindo URA e Sistemas de Call Center com Asterisk
Construindo URA e Sistemas de Call Center com AsteriskConstruindo URA e Sistemas de Call Center com Asterisk
Construindo URA e Sistemas de Call Center com Asterisk
 
Construindo URA e Sistemas de Call Center com Asterisk
Construindo URA e Sistemas de Call Center com AsteriskConstruindo URA e Sistemas de Call Center com Asterisk
Construindo URA e Sistemas de Call Center com Asterisk
 
TDC2018FLN | Trilha Arquitetura - Architecting for Resilience
TDC2018FLN | Trilha Arquitetura - Architecting for ResilienceTDC2018FLN | Trilha Arquitetura - Architecting for Resilience
TDC2018FLN | Trilha Arquitetura - Architecting for Resilience
 
Architecting For Resilience
Architecting For ResilienceArchitecting For Resilience
Architecting For Resilience
 
Python e MongoDB - Ensol
Python e MongoDB - EnsolPython e MongoDB - Ensol
Python e MongoDB - Ensol
 
Campus Party 2015: Os 10 Atributos de uma API de Sucesso
Campus Party 2015: Os 10 Atributos de uma API de SucessoCampus Party 2015: Os 10 Atributos de uma API de Sucesso
Campus Party 2015: Os 10 Atributos de uma API de Sucesso
 
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
 
Django + extjs pelos forms
Django + extjs pelos formsDjango + extjs pelos forms
Django + extjs pelos forms
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7
 
Fsi8a Sistemas Internet
Fsi8a Sistemas InternetFsi8a Sistemas Internet
Fsi8a Sistemas Internet
 
Intervalo Técnico - QG Mobile
Intervalo Técnico - QG MobileIntervalo Técnico - QG Mobile
Intervalo Técnico - QG Mobile
 

NovaarquiteturadogameCartolaparavolumesmaisaltosdeacesso

  • 2. Alexandre Saboia Fuziyama Bacharel em Informática pela PUC-Rio 11 anos na globo.com Full Stack Web Developer 9 anos trabalhando em equipes ágeis @alexandresaboia saboia@corp.globo.com
  • 9. +610milhõesescalações únicas na temporada 2017 +900milusuários simultâneos no ga* ~100milrequests por segundo na api * google analytics
  • 10. +3.5bilhõesde aberturas únicas de apps na temporada +8milhõesapps ativas no mês de junho +17milhõesde downloads das apps
  • 11. ARQUITETURA nas internas, como o cartolafc funciona?
  • 21. Stackresumida I N F R A EST R U T U R A RPAAS Galeb Tsuru Cartola Comoé UsuárioCartoleiro
  • 22. Stackresumida I N F R A EST R U T U R A tsuru PaaS-PlataformasaService OrquestraçãodecontainersDocker Rápido,FácileContinuousDeployment Facilitaamanutençãoeconfiguraçãodainfraestrutura Escalável,ConfiáveleOpensource Suportaváriaslinguagens Aproximadodesenvolvedordainfraestrutura maisdetalhesem:https://tsuru.io
  • 23. Stackresumida I N F R A EST R U T U R A tsuru Usuário Cartoleiro Galeb RouterL7 Unit Unit Unit VM Unit Unit Unit VM Unit Unit Unit Unit VM máquinafísica RPAAS
  • 24. Stackresumida I N F R A EST R U T U R A Comoé RPAAS Galeb Tsuru Cartola UsuárioCartoleiro
  • 25. Stackresumida I N F R A EST R U T U R A Comoé RoutereLoadBalancerdinâmicodenível7 Altamenteescalável Permitetrocasderotaseconfigsemrestartoureload Opensource Auxiliaotsururefazendorotasparaasnovasunit maisdetalhesem:http://galeb.io Galeb
  • 26. Stackresumida I N F R A EST R U T U R A Unit Galeb Usuário Cartoleiro Unit Unit Unit Unit Unit Unit Galeb RouterL7 Unit Unit Unit VM VM VM RPAAS
  • 27. Stackresumida I N F R A EST R U T U R A Comoé RPAAS Galeb Tsuru Cartola UsuárioCartoleiro
  • 28. Stackresumida I N F R A EST R U T U R A RPaaS RPaaS-ReverseProxyasaService PlugindisponívelparaoTsuru NGINXcomproxyreversoparaasuaaplicação RespeitaosheadersdefinidosnaaplicaçãoRPAAS
  • 29. Usuário RPAAS Galeb Tsuru Cartoleiro unit Stack I N F R A EST R U T U R A Fluxodetalhadodeumarequisição unit unit unit unit unit unit unit BF BB
  • 30. https I N F R A EST R U T U R A apartirde2016 FullTLS 100% dos acessos no CDA é feito via https
  • 31. Monitoração I N F R A EST R U T U R A aplicadaemtodasascamadas
  • 32. Monitoração I N F R A EST R U T U R A aplicadaemtodasascamadas
  • 34. Bancodedados I N F R A EST R U T U R A mudançaparaoMySQL5.7 pré-processadordequeriesmaiseficiente:ganhamos maiorvelocidadenaexecução replicaçãopormulti-thread:reduçãonotempode replicaçãoentreomastereosslaves.
  • 35. Bancodedados I N F R A EST R U T U R A MySQL5.7 +820gb dados + índices na 32ª rodada
  • 36. Bancodedados I N F R A EST R U T U R A MySQL5.7-replicaçãomaster/slave read.cartola.mysql.interno.com write.cartola.mysql.interno.com READ READREAD VIP de leitura READ WRITE VIP de escrita read.cartola.mysql.interno.com write.cartola.mysql.interno.com
  • 37. Bancodedados I N F R A EST R U T U R A MySQL5.7-partitioning CREATE TABLE members ( firstname VARCHAR(25) NOT NULL, lastname VARCHAR(25) NOT NULL, username VARCHAR(16) NOT NULL, email VARCHAR(35), joined DATE NOT NULL ) PARTITION BY RANGE( YEAR(joined) ) ( PARTITION p0 VALUES LESS THAN (1960), PARTITION p1 VALUES LESS THAN (1970), PARTITION p2 VALUES LESS THAN (1980), PARTITION p3 VALUES LESS THAN (1990), PARTITION p4 VALUES LESS THAN MAXVALUE ); https://dev.mysql.com/doc/refman/5.7/en/partitioning-types.html members p0 p1 p4 p3 p2. . .
  • 38. Bancodedados I N F R A EST R U T U R A MySQL5.7-cuidadocomocrescimentodatabela ALTER TABLE time_atleta MODIFY time_atleta_id bigintunsigned NOT NULL AUTO_INCREMENT; CREATETABLE`time_atleta`( `time_atleta_id`int(11)unsignedNOTNULLAUTO_INCREMENT, `rodada_id`tinyint(3)unsignedNOTNULL, … ); 15horas!
  • 40. Backend I N F R A EST R U T U R A tecnologiasutilizadasnaapi golang
  • 41. Backend I N F R A EST R U T U R A tecnologiasutilizadasnaapi golang https://www.tiobe.com/tiobe-index/go/ September 2017 2015.1
  • 42. Backend I N F R A EST R U T U R A mudançaparaogolang resultadosiniciais: python: 4.500r/s golang:14.000r/s observações: • concorrência • aproveitamentoderecursos testesapi pythonxgolang *emumamesmamáquinafísicasemcacheestático
  • 43. Backend I N F R A EST R U T U R A mudançaparaogolang 40% deeconomiaemCPU 2015 -2016
  • 44. Backend I N F R A EST R U T U R A mudançaparaogolang 2015 -2017 23% deeconomiaemCPU
  • 45. Backend I N F R A EST R U T U R A mudançaparaogolang conexões: 2015=140k 2016=1.1M 2017=1.2M 160milreq/seg 100milreq/seg 8xmais conexõessimultâneas 2015 -2017
  • 46. Backend I N F R A EST R U T U R A mudançaparaogolang 9xmais usuáriossimultâneos noGA 2015=100k 2016=493k 2017=905k 2015 -2017
  • 48. Backend I N F R A EST R U T U R A estratégiaparacacheamento Usuário Cartoleiro RPAAS Tsuru Cartola cacheadonorpaasrespeitandoomax-age ... READ
  • 49. Backend I N F R A EST R U T U R A cacheamentocache-control-maxAge func WriteCachedResponse(w http.ResponseWriter, data interface{}, statusCode int, maxAge string) { w.Header().Set("Content-Type", "application/json;charset=UTF-8") w.Header().Set("Vary", "Accept-Encoding") w.Header().Set("Cache-Control", maxAge) w.WriteHeader(statusCode) json.NewEncoder(w).Encode(&data) } func WriteResponse(w http.ResponseWriter, data interface{}, statusCode int) { w.Header().Set("Content-Type", "application/json;charset=UTF-8") w.Header().Set("Vary", "Accept-Encoding") w.WriteHeader(statusCode) json.NewEncoder(w).Encode(&data) }
  • 50. Backend I N F R A EST R U T U R A estratégiaparacacheamento Usuário Cartoleiro RPAAS Tsuru Cartola cacheadonomemcached aplicação ... READ
  • 51. Backend I N F R A EST R U T U R A estratégiaparacacheamento Usuário Cartoleiro RPAAS Tsuru Cartola requisiçãocompleta-recuperandodobancodedados ... READ
  • 52. Backend I N F R A EST R U T U R A estratégiaparacacheamento-fragmentaçãoporobjetoselistas “time_id”: {[atleta_id,atleta_id,…]} ex.: “1234” : {[1,2,3,4,5,6,7,8,9,10,11,12] } "atleta_id": {“id”:1, “nome”:“RomáriodeSouzaFaria”,…} “liga_id”: {[time_id,time_id,…]} ex.: “5678” : {[11,22,33,44,55,66,77,88,99,110,111,112] } "time_id": {“id”:11, “nome”:“PregerebaFC”,“slug”:“pregereba-fc”,…}
  • 53. Backend I N F R A EST R U T U R A utilizaçãodeworkers Recuperaçãodosatletasdomercado Recuperaçãodosdadosdotime http://divan.github.io/posts/go_concurrency_visualize/ fan-out pattern
  • 54. Backend I N F R A EST R U T U R A utilizaçãodefilas ManipulaçãodosSVGsdeescudosecamisas Indexaçãodetimeseligasnabusca(ES) Notificaçãopush
  • 55. Backend I N F R A EST R U T U R A tempomáximoparauma conexão 10seg éobastante! normalmenteasrequisiçõesduramentre10mse100ms
  • 56. Backend I N F R A EST R U T U R A estratégiaquerysnoMySQL Queryssimplescompoucosjoins Poucosupdates,prefiradelete+insert Junteosdadosnaaplicação
  • 57. Backend I N F R A EST R U T U R A gzipnaaplicação n := negroni.New(negroni.NewRecovery(), gzip.Gzip(gzip.BestSpeed), Cors()) const ( NoCompression = flate.NoCompression BestSpeed = flate.BestSpeed BestCompression = flate.BestCompression DefaultCompression = flate.DefaultCompression HuffmanOnly = flate.HuffmanOnly )
  • 58. Backend I N F R A EST R U T U R A bibliotecasimportantes GorillaMux Testfy jarcoal/httpmock.v1 logrus guregu/null.v3 redis.v4 github.com/codegangsta/negroni github.com/dropbox/godropbox/memcache github.com/phyber/negroni-gzip/gzip github.com/go-sql-driver/mysql github.com/jmoiron/sqlx
  • 60. Frontend I N F R A EST R U T U R A apostasemumSPA • aplicaçãoestática • reusodecomponentes • comunicaçãocomocartolasomenteviaapi • reduçãonaquantidadederequests
  • 61. Frontend I N F R A EST R U T U R A porquêAngularJS? • umframeworkmvccomtudoqueprecisaríamosparacriara navegaçãodocartola • implementaçãodefluxosmaisexplícito • organizaçãodocódigo(lógicadenegócio,camadade apresentação) • facilidadenacomunicaçãoentrecomponentesnamesmapágina
  • 62. Frontend I N F R A EST R U T U R A vantagensdoAngularJS? problemasconhecidos
  • 63. Frontend I N F R A EST R U T U R A outrasestratégias • usodeSVGparaamaioriadasimagensdogameweb • utilizaçãodespritessvg
  • 64. Frontend I N F R A EST R U T U R A outrasestratégias • minifyhtml • minifycss • otimizadorparaimagens • svgsprite tasksGulp
  • 65. Frontend I N F R A EST R U T U R A CDN NGINXdoRpaaSésuperperformáticoparaaentregadeestático usamosumaappestáticanotsuruparafuncionarcomoumaCDN Estratégiaparaversionamentodosdeploysevitandoocacheamento nobrowserdousuário https://cartolafc.globo.com/dist/1.1.7/js/main.js https://cartolafc.globo.com/dist/1.1.7/css/cartola.css https://cartolafc.globo.com/dist/1.1.7/img/logo_cartola.png
  • 66. Takeaway I N F R A EST R U T U R A otimizaçãoeperformance "Premature optimization is the root of all evil." DonaldKnuth