KEMBAR78
Talk at QConSP | PPT
Usando Django para
Servir 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ção
Nã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
CACH
E
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 OK
Server: nginx
Date: Fri, 11 Apr 2014 13:19:20 GMT
Content-Type: text/html; charset=utf-8
Connection: close
Last-Modified: Fri, 11 Apr 2014 13:19:06
GMT
Expires: Fri, 11 Apr 2014 13:24:06 GMT
Cache-Control: max-age=300
globoesporte.globo.com/pe/noticia/plantao.
html
Ajax vs SSI
Melhor 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-
SideConfigure os headers da requisição
corretamente!
HTTP/1.1 200 OK
Accept-Encoding: gzip,deflate,sdch
Content-Type: application/json
Vary: Accept-Encoding
Cache-Control: max-age=30
Expires: Tue, 10 Oct 2014 11:45:24 GMT
Date: Tue, 10 Oct 2014 11:44:59 GMT
X-Varnish: 1952793053 1952791896
27
Pitomba Spriter
pitomba.or
g
Ferramentas
Apache 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/
31
32
https://github.com/globocom/IW
antToWorkAtGloboCom
http://bit.ly/quero-trabalhar-
globo-com
Pergunt
as!!
@romulojale
s
33
@victorpantoj
agithub.com/victorpanto
ja
github.com/romulojal
es

Talk at QConSP