adequação do servidor proxy/cache squid a redes de extrema carga

36
 Adequação do servidor Proxy/Cache Squid a redes de extrema carga. Lucas Brasilino <[email protected]> Procuradoria Geral da República - MPF

Upload: vutu

Post on 09-Jan-2017

250 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Adequação do servidor Proxy/Cache Squid a redes de extrema carga

   

Adequação do servidor Proxy/Cache Squid a redes de 

extrema carga. 

Lucas Brasilino<[email protected]>

Procuradoria Geral da República ­ MPF

Page 2: Adequação do servidor Proxy/Cache Squid a redes de extrema carga

   

Agenda● O Squid;● Tipos de otimizações;● Dissecando a lula;● Uso de descritores de arquivos;● Loop principal;● Modalidades de I/O para cache em disco;

Page 3: Adequação do servidor Proxy/Cache Squid a redes de extrema carga

   

Agenda● Substituição de objetos em cache;● Uso de memória.

Page 4: Adequação do servidor Proxy/Cache Squid a redes de extrema carga

   

O Squid

● É um servidor proxy/cache para HTTP/1.0;– Com extensões para HTTP/1.1:

● Headers:– Keep­alive– Host– Cache­Control

● Método CONNECT● etc

Page 5: Adequação do servidor Proxy/Cache Squid a redes de extrema carga

   

O Squid

● Projetado para ser um único processo– Porém algumas funcionalidades são realizadas por 

processos externos. Exemplos:● dnsserver● ulinkd● redirectors● Externals ACL, etc.

● Pode utilizar threads

Page 6: Adequação do servidor Proxy/Cache Squid a redes de extrema carga

   

Tipos de otimizações

● Opções (tags) no arquivo de configuração squid.conf

● Opções definidas na configuração dos fontes para compilação (./configure)

● Otimização do kernel do Linux (sysctl)

Page 7: Adequação do servidor Proxy/Cache Squid a redes de extrema carga

   

Dissecando a lula

client­side server­sideStorage Manager

Store API

memPools

replacement policy

replacement policy

storeclient

comm_loop

HTTP HTTPFTPGOPHER

Page 8: Adequação do servidor Proxy/Cache Squid a redes de extrema carga

   

Uso de descritores de arquivos● É um número inteiro com o qual é possível 

acessar 'streams' de I/O. ● Arquivos, sockets (I/O em rede), pipes e FIFOs 

(named pipes) são alguns tipos de 'stream'.

fdes = open(“arq.txt”,O_RDONLY,0600);

len = read(fdes, buffer, 1024); 

Page 9: Adequação do servidor Proxy/Cache Squid a redes de extrema carga

   

Uso de descritores de arquivos

sd = socket (...);connect (sd, .....); write(sd,”GET http://www...”,...);

sd = socket(...);bind(sd, ...);listen(sd, 30);cl_sd = accept(sd,...);read(cl_sd, request,...); 

Socket TCP/IP

Page 10: Adequação do servidor Proxy/Cache Squid a redes de extrema carga

   

Uso de descritores de arquivos● Normalmente cada processo pode alocar no 

máximo 1024 descritores# ulimit ­n

● Este valor tende a ser insuficiente em redes de extrema carga

# squidclient mgr:info | grep “file desc”

Maximum number of file descriptors:   8192Largest file desc currently in use:   1430Number of file desc currently in use: 1377Available number of file descriptors: 6815Reserved number of file descriptors:   100

Page 11: Adequação do servidor Proxy/Cache Squid a redes de extrema carga

   

Parametrização: número de descritores disponíveis para o Squid● Aumente o número de descritores

– Configure os fontes:# ./configure ­­with­maxfd=8192

– Configure o ambiente (shell) que o squid será executado:# ulimit ­HSn 8192 && squid ­DY

Page 12: Adequação do servidor Proxy/Cache Squid a redes de extrema carga

   

Parametrização: número global de descritores disponíveis

● Verifique o número de descritores disponíveis no sistema operacional:

# sysctl fs.file­max

fs.file­max = 498073

# sysctl fs.file­nr

fs.file­nr = 4224 0 498073

Page 13: Adequação do servidor Proxy/Cache Squid a redes de extrema carga

   

Parametrização: número global de descritores disponíveis

● Caso necessário aumente (e muito) o número disponível de descritores:

# sysctl ­w fs.file­max=819200

Obs: Este último comando equivale a:# echo “819200” > /proc/sys/fs/file­max

● Não se esqueça de adicioná­lo ao arquivo /etc/sysctl.conf

Page 14: Adequação do servidor Proxy/Cache Squid a redes de extrema carga

   

Parametrização: pilha TCP/IP● Aumente o número de portas locais disponíveis:

# sysctl net.ipv4.ip_local_port_range

net.ipv4.ip_local_port_range = 32768  61000

# sysctl ­w net.ipv4.ip_local_port_range="1024 65000"

net.ipv4.ip_local_port_range = 1024 65000

● Aumente o backlog# sysctl net.ipv4.tcp_max_syn_backlog

net.ipv4.tcp_max_syn_backlog = 1024

# sysctl ­w net.ipv4.tcp_max_syn_backlog=2048

net.ipv4.tcp_max_syn_backlog = 2048

Page 15: Adequação do servidor Proxy/Cache Squid a redes de extrema carga

   

Loop principal: comm_loop● Todos descritores possíveis são setados como 

assíncronos (non­blocking)● É um loop chamando select(), ou similares:

– São passados todos os descritores, exceto os referentes a arquivos em disco;

– O kernel define quais descritores estão prontos para serem lidos ou escritos;

– Retorna tais descritores pro Squid;

Page 16: Adequação do servidor Proxy/Cache Squid a redes de extrema carga

   

Loop principal: comm_loop● continuando...

– Squid chama funções de leitura e escrita previamente registradas;

– Antes de novo loop, todas funções 'agendadas' são executadas, através da event API.

Page 17: Adequação do servidor Proxy/Cache Squid a redes de extrema carga

   

Loop principal: comm_loop

● select() é conhecidamente lento ao examinar um grande número de descritores.

● Uma alternativa plausível é utilizar poll()● Caso o kernel seja 2.6, utilizeutilize  epoll.epoll.

Page 18: Adequação do servidor Proxy/Cache Squid a redes de extrema carga

   

Loop principal: comm_loop● Performance do epoll

Page 19: Adequação do servidor Proxy/Cache Squid a redes de extrema carga

   

Parametrização: comm_loop

● A chamada de sistema o loop irá utilizar é definida na configuração dos fontes: # ./configure ­­enable­epoll  

Page 20: Adequação do servidor Proxy/Cache Squid a redes de extrema carga

   

Modalidades de I/O para cache em disco

● Implementado através da API storeclient● Tipos:

– UFS: Unix File System● Modalidade padrão● Utiliza as tradicionais chamadas de sistema open(), close(), read(), write(), etc

● Tais chamadas são síncronas (blocking)● Baixa performance: 30 – 50 req/seg

Page 21: Adequação do servidor Proxy/Cache Squid a redes de extrema carga

   

Modalidades de I/O para cache em disco

● continuando...– AUFS: Asynchronous Unix File System

● Similar ao UFS;● Utiliza threads para 'paralelizar' o acesso a disco;● Ideal em servidores SMP● A nova biblioteca threads do Linux, NPTL, melhorou 

muito a performance nesta modalidade;● Boa performance: 150 – 200 req/seg;

Page 22: Adequação do servidor Proxy/Cache Squid a redes de extrema carga

   

Modalidades de I/O para cache em disco

● continuando...– Diskd:

● É um daemon externo ao Squid, apenas para 'enfileirar' e executar as chamadas de acesso a disco;

●  Squid repassa via message queues as operações a serem realizadas;

● E através de shared memory são efetuadas a trocas de dados.

● Boa performance: ~160 req/seg

Page 23: Adequação do servidor Proxy/Cache Squid a redes de extrema carga

   

Modalidades de I/O para cache em disco

● continuando...– COSS: Cyclic Object Storage System 

● É o primeiro esforço em se criar um sistema de arquivos dedicados ao Squid;

● Segundo estudos iniciais, é a modalidade de melhor performance ao cachear pequenos objetos;

● Armazena todos os objetos em um único arquivo;● Recentemente desenvolvido portanto não tão estável.

Page 24: Adequação do servidor Proxy/Cache Squid a redes de extrema carga

   

Parametrização: modalidades de I/O

● Recomendação: AUFS– Configure os fontes:

# ./configure ­­enable­storeio='ufs,aufs'

– Configure o squid.conf:cache_dir aufs /var/cache 10240 32 256

Page 25: Adequação do servidor Proxy/Cache Squid a redes de extrema carga

   

Políticas de substituição de objetos em cache: replacement policy

● É o algorítmo que elege quais objetos deverão ser removidos do cache para que outros sejam armazenados;

● Tem relação direta com a performance total do servidor;

Page 26: Adequação do servidor Proxy/Cache Squid a redes de extrema carga

   

Políticas de substituição de objetos em cache: replacement policy

● Quanto mais objetos requisitados estiverem no cache:– menor será tempo de recebimento de uma página 

Web;– menor será a utilização da largura de banda;– menor será a carga sobre o servidor Web de 

origem;

Page 27: Adequação do servidor Proxy/Cache Squid a redes de extrema carga

   

Políticas de substituição de objetos em cache: replacement policy

● Razão de acertos:– Hit rate

● É a razão entre a quantidade de objetos servidos pelo cache pelo total de objetos requisitados;

– Byte hit rate● É a razão da quantidade de bytes servidos pelo cache 

pelo total de bytes requisitados;

Page 28: Adequação do servidor Proxy/Cache Squid a redes de extrema carga

   

Políticas de substituição de objetos em cache: replacement policy

● Algorítmos:– LRU: Least Recently Used

● É a política padrão;● Os objetos mais antigos são eleitos para exclusão;● É implementado através de uma lista encadeada onde os 

objetos mais recentes encabeçam a lista;● É ineficiente pois não leva em consideração o tamanho 

do objeto nem tampouco a frequência ele                      foi requisitado.

Page 29: Adequação do servidor Proxy/Cache Squid a redes de extrema carga

   

Políticas de substituição de objetos em cache: replacement policy

● Algorítmos:– Heap

● Estrutura em árvore onde os objetos (nós) de maior chave é sempre 'pai' de um de menor chave;

● Os objetos no fim da árvore são eleitos para exclusão;

32

2330

1912

Page 30: Adequação do servidor Proxy/Cache Squid a redes de extrema carga

   

Políticas de substituição de objetos em cache: replacement policy

● Heap:– LFU­DA: Least Frequently Used with Dynamic 

Aging● A chave do objeto é calculada levando em conta a 

frequência de requisição e um fator de idade;● Consegue alto byte hit rate 

Page 31: Adequação do servidor Proxy/Cache Squid a redes de extrema carga

   

Políticas de substituição de objetos em cache: replacement policy

● Heap:– GDSF: Greedy Dual Size Frequency

● Similar ao LFU­DA, porém levando­se em conta um fator proporcional ao tamanho do objeto;

● Os objetos menos requisitados e de maior tamanho são eleitos para exclusão; 

● Consegue alto hit rate.

Page 32: Adequação do servidor Proxy/Cache Squid a redes de extrema carga

   

Parametrização: replacement policy● Habilitando o heap:

– Configure os fontes:# ./configure ­­enable­removal­policies='heap'

– Configure o squid.conf:cache_replacement_policy heap LFUDA

oucache_replacement_policy heap GDSF

Page 33: Adequação do servidor Proxy/Cache Squid a redes de extrema carga

   

Uso de memória● Tem impacto decisivo na performance● O Squid aloca memória para armazenar:

–  in­transit objects;–  hot objects;–  metadados (incluindo tabela hash) do cache;–  buffers de I/O de disco e rede;– cache de resoluções DNS, etc. 

Page 34: Adequação do servidor Proxy/Cache Squid a redes de extrema carga

   

Uso de memória● O Squid aloca o somatório de:

– 10Mb de RAM a cada 1Gb em cache_dir;– Valor configurado em cache_mem;– Aproximadamente de 10 a 20Mb adicionais;

● Devemos evitar a todo custo que o sistema operacional utilize o swap:# free ­m

Page 35: Adequação do servidor Proxy/Cache Squid a redes de extrema carga

   

Parametrização: uso de memória● É realizada configurando a opção cache_mem 

no arquivo squid.conf;● Recomenda­se alocar a metade da memória 

RAM total do servidor para o Squid:

cachemem=RAM−Total Mb

2−cachedir Mb

102,4−20

Page 36: Adequação do servidor Proxy/Cache Squid a redes de extrema carga

   

Obrigado !!!

Lucas Brasilino<[email protected]>