Top Banner
Usando Django para Servir 20 milhões de Usuários QConSP 2014
33

Talk at QConSP

Jan 14, 2015

Download

Technology

Victor Pantoja

Talk presented at qconsp 2014. This talk shows how we scale django @ globoesporte.com to stand 8 million uses per day.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Talk at QConSP

Usando Django paraServir 20 milhões de Usuários

QConSP 2014

Page 2: Talk at QConSP

Rômulo Jales

2

Victor Pantoja

Page 3: Talk at QConSP

Motivação

3

Page 4: Talk at QConSP

Motivação

4

Page 5: Talk at QConSP

Motivação

5

Page 6: Talk at QConSP

Motivação

6

Page 7: Talk at QConSP

Motivação

7

Page 8: Talk at QConSP

Alguns números

Visitantes únicos: 20,7 milhões por mês

8

Visitas: 215 milhões por mês

8 milhões de visitas por dia!

Page 9: Talk at QConSP

Alguns números

9

- 5 dias de matérias republicadas: 2020- confrontos republicados: 1023- homes republicadas: 3367- galerias republicadas: 92- enquetes republicadas: 57- CSS regerados: 708

Page 10: Talk at QConSP

Tecnologias

10

Page 11: Talk at QConSP

11

Page 12: Talk at QConSP

12

Framework WEB MVC

Propicia uso de melhores práticas de Eng SW

Mas Django não escala...

Page 13: Talk at QConSP

13

Uso de Middlewares

Cache de View

Mas Django não escala...

@cache_control(max_age=300)def top_atletas(request, periodo, quantidade, formato): dados = MateriaSemanticaController().top_atletas(periodo, quantidade) return render_to_json(dados, formato, 'top_atletas')

Page 14: Talk at QConSP

Bottlenecks

14

MySQL»

Virtuoso

»

I/O»

3 BANCOS-

+18 APIs

-5 mounts

-

Page 15: Talk at QConSP

15

32 Bits com PAE (problemas ao servir cache)

»

64 Bits»

Page 16: Talk at QConSP

Pré-geraçãoNão deixe o usuário disparar ações críticas do sistema!

16

django-staticgenerator

Page 17: Talk at QConSP

Pré-geração

Necessita que alguém ou algo dispare o processo

17

Page 18: Talk at QConSP

18

CACHE EVERYWHERE

CACHE

Page 19: Talk at QConSP

Memcached

19

Diminui a quantidade de memória utilizada: podemos ter várias listas de ids de objetos mas apenas uma entrada para cada objeto

»Aumenta a performance do sistema: não é necessário expurgar todo o cache de uma lista na alteração de um objeto. Basta expurgar o objeto.

»

Page 20: Talk at QConSP

Memcached

Faça o caching de objetos e não de resultados de queries!

20

Page 21: Talk at QConSP

SSI - Server Side Include

21

<div class="glb-grid-8 widget-plantao-semantico"> <!--#include virtual="/_ssi/plantao/pe/plantao/1" --></div>

HTTP/1.1 200 OKServer: nginxDate: Fri, 11 Apr 2014 13:19:20 GMTContent-Type: text/html; charset=utf-8Connection: closeLast-Modified: Fri, 11 Apr 2014 13:19:06 GMTExpires: Fri, 11 Apr 2014 13:24:06 GMTCache-Control: max-age=300

globoesporte.globo.com/pe/noticia/plantao.html

Page 22: Talk at QConSP

Ajax vs SSIMelhor para a indexação daquele conteúdo (SEO)

»

22

Diferentes tempos de cache para componentes em uma mesma página

»

Melhora a performance client-side»

Diminui o número de requisições ao servidor

»

Page 23: Talk at QConSP
Page 24: Talk at QConSP

Baixo consumo de recursos da máquina»

24

simples configuração»

alta performance»

free e open source»módulos essenciais: purge, ssi e proxy cache

»

Page 25: Talk at QConSP

Minify de CSS e JS (módulo compressor do Django)

»

25

CSS Sprite»Tempo de expiração adequado para a sua view

»

gzip»estáticos servidos pelo Varnish em uma farm separada

»

Performance Client-Side

caching do browser»

Page 26: Talk at QConSP

26

Performance Client-Side

Configure os headers da requisição corretamente!HTTP/1.1 200 OKAccept-Encoding: gzip,deflate,sdchContent-Type: application/jsonVary: Accept-EncodingCache-Control: max-age=30Expires: Tue, 10 Oct 2014 11:45:24 GMTDate: Tue, 10 Oct 2014 11:44:59 GMTX-Varnish: 1952793053 1952791896

Page 27: Talk at QConSP

27

Pitomba Spriter

pitomba.org

Page 28: Talk at QConSP

FerramentasApache HTTP server benchmarking tool»

28

Monit: ferramenta open source para gerencia e monitoramento de processos, programas, arquivos, diretórios, serviços etc

»

WebPageTest: webpagetest.org»

Avalanche QA2»

Page 29: Talk at QConSP

Palavra Final

29

Escalabilidade não é uma questão de linguagem ou framework mas de arquitetura da aplicação!!

Page 30: Talk at QConSP

/DEV

30

http://

globodev.tumblr.com/

Conteúdo criado pelos

desenvolvedores da

globo.com

Page 31: Talk at QConSP

31

Page 32: Talk at QConSP

32

https://github.com/globocom/IWantToWorkAtGloboCom

http://bit.ly/quero-trabalhar-

globo-com

Page 33: Talk at QConSP

Perguntas!!

@romulojales

33

@victorpantojagithub.com/

victorpantoja

github.com/romulojales