8/14/2019 Apres Squid
1/36
Adequao do servidor
Proxy/Cache Squid a redes deextrema carga.
Lucas Brasilino
Procuradoria Geral da Repblica MPF
8/14/2019 Apres Squid
2/36
Agenda
O Squid;
Tipos de otimizaes;
Dissecando a lula;
Uso de descritores de arquivos;
Loop principal; Modalidades de I/O para cache em disco;
8/14/2019 Apres Squid
3/36
Agenda
Substituio de objetos em cache;
Uso de memria.
8/14/2019 Apres Squid
4/36
O Squid
um servidor proxy/cache para HTTP/1.0;
Com extenses para HTTP/1.1:
Headers:
Keep alive
Host
Cache Control Mtodo CONNECT
etc
8/14/2019 Apres Squid
5/36
O Squid
Projetado para ser um nico processo
Porm algumas funcionalidades so realizadas por
processos externos. Exemplos:
dnsserver
ulinkd
redirectors Externals ACL, etc.
Pode utilizar threads
8/14/2019 Apres Squid
6/36
Tipos de otimizaes
Opes (tags) no arquivo de configurao
squid.conf Opes definidas na configurao dos fontes
para compilao (./configure)
Otimizao do kernel do Linux (sysctl)
8/14/2019 Apres Squid
7/36
Dissecando a lula
clientside serversideStorage Manager
Store API
memPools
replacement policy
replacement policy
storeclient
comm_loop
HTTP HTTP
FTP
GOPHER
8/14/2019 Apres Squid
8/36
Uso de descritores de arquivos
um nmero inteiro com o qual possvel
acessar 'streams' de I/O.
Arquivos, sockets (I/O em rede), pipes e FIFOs(named pipes) so alguns tipos de 'stream'.
fdes = open(arq.txt,O_RDONLY,0600);
len = read(fdes, buffer, 1024);
8/14/2019 Apres Squid
9/36
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
8/14/2019 Apres Squid
10/36
Uso de descritores de arquivos
Normalmente cada processo pode alocar no
mximo 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:
8192
Largest file desc currently in use:
1430
Number of file desc currently in use:
1377
8/14/2019 Apres Squid
11/36
Parametrizao: nmero de
descritores disponveis para o Squid
Aumente o nmero de descritores
Configure os fontes:
# ./configure --with-maxfd=8192
Configure o ambiente (shell) que o squid ser
executado:
# ulimit -HSn 8192 && squid -DY
8/14/2019 Apres Squid
12/36
Parametrizao: nmero global de
descritores disponveis
Verifique o nmero de descritores disponveis
no sistema operacional:
# sysctl fs.file-max
fs.file-max = 498073
# sysctl fs.file-nr
fs.file-nr = 4224 0 498073
8/14/2019 Apres Squid
13/36
Parametrizao: nmero global de
descritores disponveis
Caso necessrio aumente (e muito) o nmero
disponvel de descritores:# sysctl -w fs.file-max=819200
Obs: Este ltimo comando equivale a:
# echo 819200 > /proc/sys/fs/file-max
No se esquea de adicionlo ao arquivo/etc/sysctl.conf
8/14/2019 Apres Squid
14/36
Parametrizao: pilha TCP/IP
Aumente o nmero de portas locais disponveis:# sysctl net.ipv4.ip_local_port_range
net.ipv4.ip_local_port_range = 32768 61000
# sysctl -w net.ipv4.ip_local_port_range="102465000"
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
8/14/2019 Apres Squid
15/36
Loop principal: comm_loop
Todos descritores possveis so setados como
assncronos (non blocking)
um loop chamando select(), ou similares: So passados todos os descritores, exceto os
referentes a arquivos em disco;
O kernel define quais descritores esto prontospara serem lidos ou escritos;
Retorna tais descritores pro Squid;
8/14/2019 Apres Squid
16/36
Loop principal: comm_loop
continuando...
Squid chama funes de leitura e escrita
previamente registradas;
Antes de novo loop, todas funes 'agendadas' so
executadas, atravs da event API.
8/14/2019 Apres Squid
17/36
8/14/2019 Apres Squid
18/36
Loop principal: comm_loop
Performance do epoll
8/14/2019 Apres Squid
19/36
Parametrizao: comm_loop
A chamada de sistema o loop ir utilizar
definida na configurao dos fontes:
# ./configure --enable-epoll
8/14/2019 Apres Squid
20/36
Modalidades de I/O para
cache em disco
Implementado atravs da API storeclient
Tipos:
UFS: Unix File System
Modalidade padro
Utiliza as tradicionais chamadas de sistema open(),
close(), read(), write(), etc
Tais chamadas so sncronas (blocking)
Baixa performance: 30 50 req/seg
M d lid d d I/O
8/14/2019 Apres Squid
21/36
Modalidades de I/O para
cache em disco
continuando...
AUFS: Asynchronous Unix File System
Similar ao UFS;
Utiliza threadspara 'paralelizar' o acesso a disco;
Ideal em servidores SMP
A nova biblioteca threadsdo Linux, NPTL, melhoroumuito a performance nesta modalidade;
Boa performance: 150 200 req/seg;
M d lid d d I/O
8/14/2019 Apres Squid
22/36
Modalidades de I/O para
cache em disco
continuando...
Diskd:
um daemonexterno ao Squid, apenas para 'enfileirar' eexecutar as chamadas de acesso a disco;
Squid repassa via message queuesas operaes a
serem realizadas;
E atravs de shared memoryso efetuadas a trocas de
dados.
Boa performance: ~160 req/seg
M d lid d d I/O
8/14/2019 Apres Squid
23/36
Modalidades de I/O para
cache em disco
continuando...
COSS: Cyclic Object Storage System
o primeiro esforo em se criar um sistema de arquivosdedicados ao Squid;
Segundo estudos iniciais, a modalidade de melhor
performance ao cachearpequenos objetos;
Armazena todos os objetos em um nico arquivo;
Recentemente desenvolvido portanto no to estvel.
8/14/2019 Apres Squid
24/36
Parametrizao: modalidades de I/O
Recomendao: AUFS
Configure os fontes:
# ./configure --enable-storeio='ufs,aufs'
Configure o squid.conf:
cache_dir aufs /var/cache 10240 32 256
P lti d b tit i d bj t
8/14/2019 Apres Squid
25/36
Polticas de substituio de objetos
em cache: replacement policy
o algortmo que elege quais objetos devero
ser removidos do cache para que outros sejam
armazenados;
Tem relao direta com a performance total do
servidor;
P lti d b tit i d bj t
8/14/2019 Apres Squid
26/36
Polticas de substituio de objetos
em cache: replacement policy
Quanto mais objetos requisitados estiverem no
cache:
menor ser tempo de recebimento de uma pgina
Web;
menor ser a utilizao da largura de banda; menor ser a carga sobre o servidor Web de
origem;
Polticas de substituio de objetos
8/14/2019 Apres Squid
27/36
Polticas de substituio de objetos
em cache: replacement policy
Algortmos:
LRU: Least Recently Used a poltica padro;
Os objetos mais antigos so eleitos para excluso;
implementado atravs de uma lista encadeada onde os
objetos mais recentes encabeam a lista;
ineficiente pois no leva em considerao o tamanho
do objeto nem tampouco a frequncia ele
foi requisitado.
Polticas de substituio de objetos
8/14/2019 Apres Squid
28/36
Polticas de substituio de objetos
em cache: replacement policy
Algortmos:
Heap Estrutura em rvore onde os objetos (ns) de maior
chave sempre 'pai' de um de menor chave;
Os objetos no fim da rvore so eleitos para excluso;
32
2330
1912
Polticas de substituio de objetos
8/14/2019 Apres Squid
29/36
Polticas de substituio de objetos
em cache: replacement policy
Heap:
LFU DA: Least Frequently Used with DynamicAging
A chave do objeto calculada levando em conta a
frequncia de requisio e um fator de idade;
Consegue alto byte hit rate
Polticas de substituio de objetos
8/14/2019 Apres Squid
30/36
Polticas de substituio 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 so
eleitos para excluso;
Consegue alto hit rate.
8/14/2019 Apres Squid
31/36
Parametrizao: replacement policy
Habilitando o heap:
Configure os fontes:
# ./configure --enable-removal-policies='heap'
Configure o squid.conf:
cache_replacement_policy heap LFUDA
ou
cache_replacement_policy heap GDSF
8/14/2019 Apres Squid
32/36
Uso de memria
Tem impacto decisivo na performance
O Squid aloca memria para armazenar:
in transit objects; hot objects;
metadados (incluindo tabela hash) do cache;
buffersde I/O de disco e rede;
cache de resolues DNS, etc.
8/14/2019 Apres Squid
33/36
8/14/2019 Apres Squid
34/36
Parametrizao: uso de memria
realizada configurando a opo cache_mem
no arquivo squid.conf;
Recomenda se alocar a metade da mem riaRAM total do servidor para o Squid:
cachemem=RAMTotal Mb
2 cachedirMb
102,4 20
8/14/2019 Apres Squid
35/36
Obrigado !!!
Lucas Brasilino
Polticas de substituio de objetos
8/14/2019 Apres Squid
36/36
Polticas de substituio de objetos
em cache: replacement policy
Razo de acertos:
Hit rate
a razo entre a quantidade de objetos servidos pelo
cache pelo total de objetos requisitados;
Byte hit rate
a razo da quantidade de bytesservidos pelo cache
pelo total de bytesrequisitados;