Warum Bind langsamer ist als öffentliche DNS-Anbieter

Warum Bind langsamer ist als öffentliche DNS-Anbieter

Wir haben Bind 9.8.1.dfsg.P1-4ubuntu0.13 in Ubuntu 12.04, das auf einem nicht stark ausgelasteten Server (durchschnittliche Auslastung: 0,19, 0,12, 0,13) läuft und Anfragen für kleine Büronetzwerke mit MacOS- und Ubuntu-Workstations bedient.

Ich habe einige DNS-Tests im Skript auf einem Container ausgeführt, der als DNS-Server läuft, und die Ergebnisse an InfluxDB gesendet.

#!/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

Ich habe festgestellt, dass Bind auf Anfragen langsamer reagiert als8.8.8.8Und77.88.8.8Dies ist in den Grafiken zu sehen:

Cache leeren vor der ersten Anfragereihe mit rndc flush.Bind verwendet Google8.8.8.8Und8.8.4.4als Spediteure:

Bildbeschreibung hier eingeben

Leeren Sie niemals den Cache von laufenden Bind. Bind verwendet Google8.8.8.8Und8.8.4.4als Spediteure:

Bildbeschreibung hier eingeben

Leeren des Cache vor der ersten Anforderungsserie mit rndc flush. Bind verwendet eine aktualisierte Liste von Root-Servern als Weiterleitungen:

Bildbeschreibung hier eingeben

Leeren Sie niemals den Cache eines laufenden Bind-Vorgangs. Bind verwendet eine aktualisierte Liste von Root-Servern als Weiterleitungen:

Bildbeschreibung hier eingeben

Warum ist die maximale Abfragezeit (etwa 5 K im ersten Diagramm und 2,5 K im dritten Diagramm) mit öffentlichen DNS von Google länger als bei Root-Servern?

Warum ist die Abfrage über Bind langsamer als die direkte Abfrage öffentlicher DNS-Server?

Stimmt bei meinen Tests möglicherweise etwas nicht?

AKTUALISIERUNG 1

In den Diagrammen ist eine TTL von 20 Sekunden angegeben – das ist falsch. Die TTL für redhat.com beträgt 60 Sekunden.

Antwort1

Ihre Tests messen die Gesamtzeit für die Ausführung Ihrer Abfrage, einschließlich

  • Netzwerkverzögerung von und zu der Maschine, auf der Ihr Testskript ausgeführt wird
  • Verarbeitungszeit auf dem zu testenden Nameserver
  • Zeit, die der getestete Nameserver damit verbringt, auf Antworten von anderen Nameservern zu warten, d. h. Zeit für die Ausführung rekursiver Unterabfragen

Die Ergebnisse entsprechen weitgehend den Erwartungen.

  • Wenn Sie Ihren lokalen BIND-Server abfragen, ohne den Cache zu leeren, kommt die Antwort meistens aus dem Cache. Selbst wenn die TTL für den A RR abgelaufen ist, befindet sich der NS RR noch im Cache, sodass nur der A RR selbst extern angefordert werden muss.
  • Wenn Sie Ihren lokalen BIND-Server nach dem Leeren des Cache abfragen undnichtKonfigurierte Weiterleitungen, Ihr lokaler BIND-Server führt eine rekursive Abfrage aus, beginnend beim Stammserver abwärts.
  • Wenn Sie nach dem Leeren des Caches eine Abfrage an Ihren lokalen BIND-Server senden und die Google-Server als Weiterleitungen konfiguriert haben, leitet Ihr lokaler BIND-Server die Abfrage unverändert an einen der Google-Server weiter, der die Abfrage dann entweder aus seinem Cache beantwortet oder eine rekursive Abfrage ausführt. Beachten Sie, dass Sie keinen Einfluss auf den Cache der Google-Server haben.

Folglich sind Abfragen an Ihren lokalen BIND-Server ohne vorheriges Leeren des Caches am schnellsten und werden nicht von der Weiterleitungskonfiguration beeinflusst. Abfragen an Ihren lokalen BIND-Server nach dem Leeren des Caches und mit den als Weiterleitungen konfigurierten Google-Servern sind langsamer als direkte Abfragen an die Google-Server, da letztere den Overhead aufweisen, der entsteht, wenn sie zuerst Ihren lokalen BIND-Server durchlaufen.

verwandte Informationen