Usando Django para Servir 20 milhões de Usuários · Ajax vs SSI » Melhor para a indexação...

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

Transcript of Usando Django para Servir 20 milhões de Usuários · Ajax vs SSI » Melhor para a indexação...

Page 1: Usando Django para Servir 20 milhões de Usuários · Ajax vs SSI » Melhor para a indexação daquele conteúdo (SEO) "22 Diferentes tempos de cache para componentes em uma mesma

Usando Django para Servir 20 milhões de Usuários

QConSP 2014

Page 2: Usando Django para Servir 20 milhões de Usuários · Ajax vs SSI » Melhor para a indexação daquele conteúdo (SEO) "22 Diferentes tempos de cache para componentes em uma mesma

Rômulo Jales

���2

Victor Pantoja

Page 3: Usando Django para Servir 20 milhões de Usuários · Ajax vs SSI » Melhor para a indexação daquele conteúdo (SEO) "22 Diferentes tempos de cache para componentes em uma mesma

Motivação

���3

Page 4: Usando Django para Servir 20 milhões de Usuários · Ajax vs SSI » Melhor para a indexação daquele conteúdo (SEO) "22 Diferentes tempos de cache para componentes em uma mesma

Motivação

���4

Page 5: Usando Django para Servir 20 milhões de Usuários · Ajax vs SSI » Melhor para a indexação daquele conteúdo (SEO) "22 Diferentes tempos de cache para componentes em uma mesma

Motivação

���5

Page 6: Usando Django para Servir 20 milhões de Usuários · Ajax vs SSI » Melhor para a indexação daquele conteúdo (SEO) "22 Diferentes tempos de cache para componentes em uma mesma

Motivação

���6

Page 7: Usando Django para Servir 20 milhões de Usuários · Ajax vs SSI » Melhor para a indexação daquele conteúdo (SEO) "22 Diferentes tempos de cache para componentes em uma mesma

Motivação

���7

Page 8: Usando Django para Servir 20 milhões de Usuários · Ajax vs SSI » Melhor para a indexação daquele conteúdo (SEO) "22 Diferentes tempos de cache para componentes em uma mesma

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: Usando Django para Servir 20 milhões de Usuários · Ajax vs SSI » Melhor para a indexação daquele conteúdo (SEO) "22 Diferentes tempos de cache para componentes em uma mesma

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: Usando Django para Servir 20 milhões de Usuários · Ajax vs SSI » Melhor para a indexação daquele conteúdo (SEO) "22 Diferentes tempos de cache para componentes em uma mesma

Tecnologias

���10

Page 11: Usando Django para Servir 20 milhões de Usuários · Ajax vs SSI » Melhor para a indexação daquele conteúdo (SEO) "22 Diferentes tempos de cache para componentes em uma mesma

���11

Page 12: Usando Django para Servir 20 milhões de Usuários · Ajax vs SSI » Melhor para a indexação daquele conteúdo (SEO) "22 Diferentes tempos de cache para componentes em uma mesma

���12

Framework WEB MVC

Propicia uso de melhores práticas de Eng SW

Mas Django não escala...

Page 13: Usando Django para Servir 20 milhões de Usuários · Ajax vs SSI » Melhor para a indexação daquele conteúdo (SEO) "22 Diferentes tempos de cache para componentes em uma mesma

���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: Usando Django para Servir 20 milhões de Usuários · Ajax vs SSI » Melhor para a indexação daquele conteúdo (SEO) "22 Diferentes tempos de cache para componentes em uma mesma

Bottlenecks

���14

MySQL»

Virtuoso»

I/O»

3 BANCOS-

+18 APIs-

5 mounts-

Page 15: Usando Django para Servir 20 milhões de Usuários · Ajax vs SSI » Melhor para a indexação daquele conteúdo (SEO) "22 Diferentes tempos de cache para componentes em uma mesma

���15

32 Bits com PAE (problemas ao servir cache)»

64 Bits»

Page 16: Usando Django para Servir 20 milhões de Usuários · Ajax vs SSI » Melhor para a indexação daquele conteúdo (SEO) "22 Diferentes tempos de cache para componentes em uma mesma

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

���16

django-staticgenerator

Page 17: Usando Django para Servir 20 milhões de Usuários · Ajax vs SSI » Melhor para a indexação daquele conteúdo (SEO) "22 Diferentes tempos de cache para componentes em uma mesma

Pré-geração

Necessita que alguém ou algo dispare o processo

���17

Page 18: Usando Django para Servir 20 milhões de Usuários · Ajax vs SSI » Melhor para a indexação daquele conteúdo (SEO) "22 Diferentes tempos de cache para componentes em uma mesma

���18

CACHE EVERYWHERE

CACHE

Page 19: Usando Django para Servir 20 milhões de Usuários · Ajax vs SSI » Melhor para a indexação daquele conteúdo (SEO) "22 Diferentes tempos de cache para componentes em uma mesma

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: Usando Django para Servir 20 milhões de Usuários · Ajax vs SSI » Melhor para a indexação daquele conteúdo (SEO) "22 Diferentes tempos de cache para componentes em uma mesma

Memcached

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

���20

Page 21: Usando Django para Servir 20 milhões de Usuários · Ajax vs SSI » Melhor para a indexação daquele conteúdo (SEO) "22 Diferentes tempos de cache para componentes em uma mesma

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

Page 22: Usando Django para Servir 20 milhões de Usuários · Ajax vs SSI » Melhor para a indexação daquele conteúdo (SEO) "22 Diferentes tempos de cache para componentes em uma mesma

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: Usando Django para Servir 20 milhões de Usuários · Ajax vs SSI » Melhor para a indexação daquele conteúdo (SEO) "22 Diferentes tempos de cache para componentes em uma mesma
Page 24: Usando Django para Servir 20 milhões de Usuários · Ajax vs SSI » Melhor para a indexação daquele conteúdo (SEO) "22 Diferentes tempos de cache para componentes em uma mesma

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: Usando Django para Servir 20 milhões de Usuários · Ajax vs SSI » Melhor para a indexação daquele conteúdo (SEO) "22 Diferentes tempos de cache para componentes em uma mesma

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: Usando Django para Servir 20 milhões de Usuários · Ajax vs SSI » Melhor para a indexação daquele conteúdo (SEO) "22 Diferentes tempos de cache para componentes em uma mesma

���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

Page 27: Usando Django para Servir 20 milhões de Usuários · Ajax vs SSI » Melhor para a indexação daquele conteúdo (SEO) "22 Diferentes tempos de cache para componentes em uma mesma

���27

Pitomba Spriter

pitomba.org

Page 28: Usando Django para Servir 20 milhões de Usuários · Ajax vs SSI » Melhor para a indexação daquele conteúdo (SEO) "22 Diferentes tempos de cache para componentes em uma mesma

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: Usando Django para Servir 20 milhões de Usuários · Ajax vs SSI » Melhor para a indexação daquele conteúdo (SEO) "22 Diferentes tempos de cache para componentes em uma mesma

Palavra Final

���29

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

Page 30: Usando Django para Servir 20 milhões de Usuários · Ajax vs SSI » Melhor para a indexação daquele conteúdo (SEO) "22 Diferentes tempos de cache para componentes em uma mesma

/DEV

���30

http://globodev.tumblr.com/

Conteúdo criado pelos desenvolvedores da globo.com

Page 31: Usando Django para Servir 20 milhões de Usuários · Ajax vs SSI » Melhor para a indexação daquele conteúdo (SEO) "22 Diferentes tempos de cache para componentes em uma mesma

���31

Page 32: Usando Django para Servir 20 milhões de Usuários · Ajax vs SSI » Melhor para a indexação daquele conteúdo (SEO) "22 Diferentes tempos de cache para componentes em uma mesma

���32

https://github.com/globocom/IWantToWorkAtGloboCom

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

Page 33: Usando Django para Servir 20 milhões de Usuários · Ajax vs SSI » Melhor para a indexação daquele conteúdo (SEO) "22 Diferentes tempos de cache para componentes em uma mesma

Perguntas!!@romulojales

���33

@victorpantojagithub.com/victorpantojagithub.com/romulojales