rafael martins - qconsp.com · da api de esportes da globo.com 4 milhões de reqs/dia com...

Post on 21-Jan-2019

219 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Rafael Martins• Desenvolvedor apaixonado

• Programador poliglota

• Jogador de Magic e RPG

• DJ nas horas vagas

• Globo.com / esportes

Bastidores da API de esportes da globo.com

4 milhões de reqs/dia com Python/Tornado, Redis e Nginx

Estado Anterior• Velocidade, 150 req/s.

• Documentação ruim.

• Serviços inconsistentes.

• Base de código ruim.

Requisitos• Acesso externo

• Controle

• Escalabilidade

• Velocidade

Premissas• Velocidade de resposta

• Ótima documentação.

• Serviços consistentes.

• Testes, testes e testes.

Tecnologias

Camadas Internas• Model

• Repository

• Controller

• View

Model

Model

Repository

Controller

View

View, set_max

View, set_max

29 elementos

View, set_min

16 elementos

View, set_min

Camadas

Responsabilidades bem definidas

2 hits para cada jogo

Cache

2 hits para cada jogo

CacheRecupera 10 Jogos

2 hits para cada jogo

CacheRecupera 10 Jogos

2 hits para cada jogo

CacheRecupera 10 Jogos

2 hits para cada jogo

CacheRecupera 10 Jogos

20 hits no cache

2 hits para cada jogo

CacheRecupera 10 Jogos

20 hits no cache

Cache

CacheRecupera 10 Jogos

CacheRecupera 10 JogosAgrupa os Ids

CacheRecupera 10 JogosAgrupa os IdsRecupera 20 equipes

CacheRecupera 10 JogosAgrupa os IdsRecupera 20 equipes

1 hit no cache

CacheRecupera 10 JogosAgrupa os IdsRecupera 20 equipes

1 hit no cache

Repository

RedisRepository

Mysql

Busca no cache a lista de ids para essa query

Repository

RedisRepository

Mysql

Faz a query no banco, retornando apenas os ids

Repository

RedisRepository

Mysql

Adiciona resultado da query no cache

Repository

RedisRepository

Mysql

Busca objetos no cache, gerando chaves por Id

Repository

RedisRepository

Mysql

Recupera do banco somente objetos não encontrados

Repository

RedisRepository

Mysql

Adiciona no cache objetos vindos do banco

Repository1. Busca no cache a query de lista.

2. Faz query de lista (retorna só id).

3. Busca no cache os objetos.

4. Busca no banco ids não encontrados.

5. Coloca no cache objetos encontrados.

6. Retorna lista de objetos

Cache

Cache

Lista de jogos de uma edição

Lista de edições

Scouts de uma edição

Outros

Cache

Vai salvar sua vida !!

Documentação

Documentação

Documentação

Documentação

Documentação

Documentação escala melhor do que suporte

Nginx HTTP AAA

webtoken

Autenticação Autorização

Limite de Acesso Monitoração

AAA

Nginx HTTP AAA

Autenticação Autorização

Limite de Acesso Monitoração

AAA

SDE API

Nginx HTTP AAA• Feito em C

• Redis

• Testes com rspec

• Dividido em 3 etapas

Nginx HTTP AAACom 1000 requests

simultâneos atendemos cada em

120ms

Nginx HTTP AAA

C é muito rápido…..

Uso atual1 Ano

Uso atualDia 06/04

Hack Day

• Novos serviços implementados com documentação e testes, por outra equipe.

• Uso da api em vários projetos.

Resultados

ResultadosAcesso externo simplificado.

Resultados

Produto do cliente em produção em 4 dias.

Acesso externo simplificado.

Resultados

Produto do cliente em produção em 4 dias.

Acesso externo simplificado.

Velocidade no desenvolvimento de serviços.

Resultados

Produto do cliente em produção em 4 dias.

Acesso externo simplificado.

Velocidade no desenvolvimento de serviços.

Segurança na suite de testes.

Resultados

Produto do cliente em produção em 4 dias.

Acesso externo simplificado.

Velocidade no desenvolvimento de serviços.

Segurança na suite de testes.

Servidores em 10%

Aprendizado

Fazer o certo deve ser simples.

Vagas !!!!

https://github.com/globocom/ IWantToWorkAtGloboCom

/dev

http://globodev.tumblr.com/

Aprendizado

Fazer o certo deve ser simples.

rafael.mws@gmail.com

@rafael_mws

top related