Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com...

63

Transcript of Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com...

Page 1: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.
Page 2: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

Rafael Martins• Desenvolvedor apaixonado

• Programador poliglota

• Jogador de Magic e RPG

• DJ nas horas vagas

• Globo.com / esportes

Page 3: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

Bastidores da API de esportes da globo.com

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

Page 4: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

Estado Anterior• Velocidade, 150 req/s.

• Documentação ruim.

• Serviços inconsistentes.

• Base de código ruim.

Page 5: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

Requisitos• Acesso externo

• Controle

• Escalabilidade

• Velocidade

Page 6: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

Premissas• Velocidade de resposta

• Ótima documentação.

• Serviços consistentes.

• Testes, testes e testes.

Page 7: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

Tecnologias

Page 8: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

Camadas Internas• Model

• Repository

• Controller

• View

Page 9: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

Model

Page 10: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

Model

Page 11: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

Repository

Page 12: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

Controller

Page 13: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

View

Page 14: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

View, set_max

Page 15: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

View, set_max

29 elementos

Page 16: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

View, set_min

Page 17: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

16 elementos

View, set_min

Page 18: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

Camadas

Responsabilidades bem definidas

Page 19: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

2 hits para cada jogo

Cache

Page 20: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

2 hits para cada jogo

CacheRecupera 10 Jogos

Page 21: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

2 hits para cada jogo

CacheRecupera 10 Jogos

Page 22: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

2 hits para cada jogo

CacheRecupera 10 Jogos

Page 23: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

2 hits para cada jogo

CacheRecupera 10 Jogos

20 hits no cache

Page 24: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

2 hits para cada jogo

CacheRecupera 10 Jogos

20 hits no cache

Page 25: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

Cache

Page 26: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

CacheRecupera 10 Jogos

Page 27: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

CacheRecupera 10 JogosAgrupa os Ids

Page 28: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

CacheRecupera 10 JogosAgrupa os IdsRecupera 20 equipes

Page 29: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

CacheRecupera 10 JogosAgrupa os IdsRecupera 20 equipes

1 hit no cache

Page 30: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

CacheRecupera 10 JogosAgrupa os IdsRecupera 20 equipes

1 hit no cache

Page 31: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

Repository

RedisRepository

Mysql

Busca no cache a lista de ids para essa query

Page 32: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

Repository

RedisRepository

Mysql

Faz a query no banco, retornando apenas os ids

Page 33: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

Repository

RedisRepository

Mysql

Adiciona resultado da query no cache

Page 34: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

Repository

RedisRepository

Mysql

Busca objetos no cache, gerando chaves por Id

Page 35: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

Repository

RedisRepository

Mysql

Recupera do banco somente objetos não encontrados

Page 36: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

Repository

RedisRepository

Mysql

Adiciona no cache objetos vindos do banco

Page 37: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

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

Page 38: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

Cache

Page 39: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

Cache

Lista de jogos de uma edição

Lista de edições

Scouts de uma edição

Outros

Page 40: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

Cache

Vai salvar sua vida !!

Page 41: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

Documentação

Page 42: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

Documentação

Page 43: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

Documentação

Page 44: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

Documentação

Page 45: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

Documentação

Documentação escala melhor do que suporte

Page 46: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

Nginx HTTP AAA

webtoken

Autenticação Autorização

Limite de Acesso Monitoração

AAA

Page 47: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

Nginx HTTP AAA

Autenticação Autorização

Limite de Acesso Monitoração

AAA

SDE API

Page 48: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

Nginx HTTP AAA• Feito em C

• Redis

• Testes com rspec

• Dividido em 3 etapas

Page 49: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

Nginx HTTP AAACom 1000 requests

simultâneos atendemos cada em

120ms

Page 50: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

Nginx HTTP AAA

C é muito rápido…..

Page 51: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

Uso atual1 Ano

Page 52: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

Uso atualDia 06/04

Page 53: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

Hack Day

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

• Uso da api em vários projetos.

Page 54: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

Resultados

Page 55: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

ResultadosAcesso externo simplificado.

Page 56: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

Resultados

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

Acesso externo simplificado.

Page 57: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

Resultados

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

Acesso externo simplificado.

Velocidade no desenvolvimento de serviços.

Page 58: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

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.

Page 59: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

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%

Page 60: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

Aprendizado

Fazer o certo deve ser simples.

Page 61: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

Vagas !!!!

https://github.com/globocom/ IWantToWorkAtGloboCom

Page 62: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

/dev

http://globodev.tumblr.com/

Page 63: Rafael Martins - qconsp.com · da API de esportes da globo.com 4 milhões de reqs/dia com Python/Tornado, Redis e Nginx. Estado Anterior ... 1. Busca no cache a query de lista. 2.

Aprendizado

Fazer o certo deve ser simples.

[email protected]

@rafael_mws