Talk at QConSP

Post on 14-Jan-2015

293 views 4 download

description

Talk presented at qconsp 2014. This talk shows how we scale django @ globoesporte.com to stand 8 million uses per day.

Transcript of Talk at QConSP

Usando Django paraServir 20 milhões de Usuários

QConSP 2014

Rômulo Jales

2

Victor Pantoja

Motivação

3

Motivação

4

Motivação

5

Motivação

6

Motivação

7

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!

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

Tecnologias

10

11

12

Framework WEB MVC

Propicia uso de melhores práticas de Eng SW

Mas Django não escala...

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')

Bottlenecks

14

MySQL»

Virtuoso

»

I/O»

3 BANCOS-

+18 APIs

-5 mounts

-

15

32 Bits com PAE (problemas ao servir cache)

»

64 Bits»

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

16

django-staticgenerator

Pré-geração

Necessita que alguém ou algo dispare o processo

17

18

CACHE EVERYWHERE

CACHE

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.

»

Memcached

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

20

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

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

»

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

»

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»

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

27

Pitomba Spriter

pitomba.org

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»

Palavra Final

29

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

/DEV

30

http://

globodev.tumblr.com/

Conteúdo criado pelos

desenvolvedores da

globo.com

31

32

https://github.com/globocom/IWantToWorkAtGloboCom

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

globo-com

Perguntas!!

@romulojales

33

@victorpantojagithub.com/

victorpantoja

github.com/romulojales