Por que a vinculação é lenta do que provedores de DNS públicos?

2

Temos bind 9.8.1.dfsg.P1-4ubuntu0.13 no Ubuntu 12.04, que está sendo executado em um servidor não muito carregado (média de carga: 0,19, 0,12, 0,13) e atendendo a solicitações de rede de pequena empresa com macos e ubuntu estações de trabalho.

Eu executei alguns testes de DNS no script no container que está sendo executado como servidor dns e envie os resultados para o influxdb.

#!/bin/bash
while true
do
        rndc flush

        bind_timeout=$( dig @192.168.128.3 redhat.com | grep 'Query time' | awk '{ print $4 }' )
        google_timeout=$( dig @8.8.8.8 redhat.com | grep 'Query time' | awk '{ print $4 }' )
        yandex_timeout=$( dig @77.88.8.8 redhat.com | grep 'Query time' | awk '{ print $4 }' )
        curl -i -XPOST 'http://ts.example.lab:8086/write?db=dnstest' -d "bind,server=bind,without_cache=yes value=$bind_timeout" &
        curl -i -XPOST 'http://ts.example.lab:8086/write?db=dnstest' -d "google,server=google,without_cache=yes value=$google_timeout" &
        curl -i -XPOST 'http://ts.example.lab:8086/write?db=dnstest' -d "yandex,server=yandex,without_cache=yes value=$yandex_timeout" &
        wait

        bind_timeout=$( dig @192.168.128.3 redhat.com | grep 'Query time' | awk '{ print $4 }' )
        google_timeout=$( dig @8.8.8.8 redhat.com | grep 'Query time' | awk '{ print $4 }' )
        yandex_timeout=$( dig @77.88.8.8 redhat.com | grep 'Query time' | awk '{ print $4 }' )
        curl -i -XPOST 'http://ts.example.lab:8086/write?db=dnstest' -d "bind,server=bind,without_cache=no value=$bind_timeout" &
        curl -i -XPOST 'http://ts.example.lab:8086/write?db=dnstest' -d "google,server=google,without_cache=no value=$google_timeout" &
        curl -i -XPOST 'http://ts.example.lab:8086/write?db=dnstest' -d "yandex,server=yandex,without_cache=no value=$yandex_timeout" &
        wait

        sleep 5
done

Descobri que o bind está respondendo em solicitações de maneira lenta do que 8.8.8.8 e 77.88.8.8 . Isso pode ser visto nos gráficos:

Limpar o cache antes da primeira série de solicitações com rndc flush . O Bind usa o google 8.8.8.8 e o 8.8.4.4 como encaminhadores:

Nuncalimpeocachedaligaçãoemexecução.OBindusaogoogle8.8.8.8eo8.8.4.4comoencaminhadores:

Limparocacheantesdaprimeirasériedesolicitaçõescomrndcflush.OBindusaumalistaatualizadadeservidoresraizcomoencaminhadores:

Nuncalimpeocachedaligaçãoemexecução.OBindusaumalistaatualizadadeservidoresraizcomoencaminhadores:

Por que o tempo máximo de consulta (cerca de 5k no primeiro gráfico e 2.5k no terceiro gráfico) com o DNS público do google é maior que o dos servidores raiz?

Por que a query throught bind é lenta que a consulta direta de servidores de DNS públicos?

Pode haver algo errado nos meus testes?

UPDATE 1

Existem 20 segundos de TTL nos gráficos - está errado. TTL para redhat.com é de 60 seg.

    
por vskubriev 23.09.2015 / 17:16

1 resposta

2

Seus testes estão medindo o tempo total para realizar sua consulta, incluindo

  • atraso de rede de e para a máquina que está executando seu script de teste
  • tempo de processamento no servidor de nomes em teste
  • tempo que o servidor de nomes em teste gasta aguardando respostas de outros servidores de nomes, por exemplo. tempo para executar subconsultas recursivas

Os resultados são praticamente os esperados.

  • Se você consultar seu servidor BIND local sem liberar o cache, a resposta virá do cache na maior parte do tempo. Mesmo que o TTL para o A RR tenha expirado, o RR do NS ainda estará no cache, então apenas o próprio A RR deve ser solicitado externamente.
  • Se você consultar seu servidor BIND local depois de liberar o cache e ter não encaminhadores configurados, seu servidor BIND local executará uma consulta recursiva a partir de um servidor raiz para baixo.
  • Se você consultar seu servidor BIND local depois de liberar o cache e configurar os servidores do Google como encaminhadores, seu servidor BIND local encaminhará a consulta como está para um dos servidores do Google, que, por sua vez, responderá à consulta de seu cache ou executar uma consulta recursiva. Observe que você não tem controle sobre o cache dos servidores do Google.

Consequentemente, as consultas ao seu servidor BIND local sem limpar o cache primeiro são mais rápidas e não são influenciadas pela configuração do encaminhador. As consultas ao servidor BIND local depois de limpar o cache e com os servidores do Google configurados como encaminhadores são mais lentas do que as consultas diretas aos servidores do Google, porque adicionam a ele a sobrecarga de passar primeiro pelo servidor BIND local.

    
por 25.09.2015 / 02:14

Tags