Apres Squid

Embed Size (px)

Citation preview

  • 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;