Назад | Перейти на главную страницу

Как я могу оценить производительность внешних DNS-запросов?

Я рассматриваю общедоступные DNS-серверы Google в качестве внешнего DNS-сервера для моей сети. В настоящее время я использую DNS-серверы своего интернет-провайдера. Я также рассматривал OpenDNS в прошлом, но в конечном итоге решил не прыгать.

Я хотел бы иметь возможность оценить, насколько быстро соответствующие серверы могут обслуживать наши DNS-запросы. Я не вижу в nslookup ничего, что могло бы помочь.

Как я могу проверить время приема-передачи для DNS, предоставляемого извне?

Вы можете просто dig и grep

$ dig @8.8.8.8   www.rimuhosting.com | grep "Query time:"
;; Query time: 15 msec
$ dig @4.2.2.1   www.rimuhosting.com | grep "Query time:"
;; Query time: 289 msec

Вы можете использовать программу захвата пакетов (фильтрация для DNS) для отслеживания времени запроса / ответа DNS. Вы можете запустить это на своем компьютере или на своем внутреннем DNS-сервере (если он у вас есть). При прочих равных условиях это должно дать вам общее представление о том, насколько быстро Google DNS сравнивается с вашим интернет-провайдером.

Я написал небольшой приятный скрипт для оценки подключения к DNS-серверам:

cat >test_dns_list_speed.sh
#!/usr/bin/env ksh
site="www.google.com"
IPfile="$1"
samples=$2

if [ ! -f "$IPfile" ] || ! echo "$samples"|egrep -q "[0-9]+" ; then
  echo "test_dns_list_speed.sh <file-ip-list> <samples>"
  echo "<file-ip-list>       newline separated list of DNS server IP adresses"
  echo "<samples>            how many DNS resolution samples to take"
  echo "PURPOSE:"
  echo "          collect statistics about response times from list of DNS servers"
  exit 1
fi

typeset -i i

while [ $i -lt $samples ]; do
  i=$i+1
  for IP in `cat $IPfile`; do
    time=`dig @$IP $site| awk '/Query time:/ {print " "$4}'`
    IPtrans=`echo $IP|tr \. _`
    eval `echo result$IPtrans=\"\\$result$IPtrans$time\"`
  done
done

for IP in `cat $IPfile`; do
  IPtrans=`echo $IP|tr \. _`
  printf "%-15s " "$IP"; echo -e `eval "echo \\$result$IPtrans"`|tr ' ' "\n"|awk '/.+/ {rt=$1; rec=rec+1; total=total+rt; if (minn>rt || minn==0) {minn=rt}; if (maxx<rt) {maxx=rt}; }
             END{ if (rec==0) {ave=0} else {ave=total/rec}; printf "average %5i     min %5i     max %5i ms %2i responses\n", ave,minn,maxx,rec}'
done

./test_dns_list_speed server_list 20
202.93.142.10   average   949     min   523     max  2229 ms 20 responses
202.93.142.20   average   897     min   515     max  2017 ms 20 responses
208.67.222.222  average  1235     min   530     max  3362 ms 20 responses
8.8.8.8         average   759     min   529     max  1624 ms 20 responses

Я также посмотрел на скамейка для имен - Утилита Google Open Source DNS Benchmark Utility. Это было очень подробно.

Я провел несколько базовых тестов между OpenDNS и googledNS. Результаты показывают, что предложение OpenDNS постоянно быстрее, чем служба DNS Google:

http://ajclark.wordpress.com/2009/12/04/google-dns-vs-opendns-performance-comparison/

Плагин Firebug для Firefox и IE есть вкладка «net», которая дает вам графическое представление времени загрузки для каждого запроса файла.

Он разбивает его на действия, включая поиск DNS, которые показаны зеленым цветом.

Простой сценарий оболочки qtest.sh для этого можно использовать:

% qtest -n3 "A a.gtld-servers.net" 172.19.1.1 62.4.16.70 62.4.17.69 208.67.222.222 208.67.220.220 156.154.70.1 156.154.71.1  
3 172.19.1.1/172.19.1.1
49 62.4.17.69/62.4.17.69
61 208.67.222.222/208.67.222.222

Вот, 172.19.1.1, локальный преобразователь, работает быстрее, за ним следует преобразователь ISP, а затем OpenDNS.

Вы можете использовать команду ping, чтобы выяснить, сколько времени потребуется, чтобы пакет перемещался туда и обратно между вашим сервером и DNS-серверами. Как правило: никогда не меняйте то, что работает.

Недостатком OpenDNS является то, что несуществующие домены могут отвечать записью A, указывающей на страницу поиска OpenDNS, поскольку они, как правило, это делают. Google в настоящее время этого не делает, но было бы глупо предполагать, что они просто предоставляют преобразователям DNS ничего от этого.

dnseval из dnsdiag работает как шарм на windows linux и mac. (намного лучше, чем устаревшая namebench) скачать на github

Чтобы использовать его, сначала напишите текстовый файл, в котором каждый DNS, который вы хотите протестировать, содержит строку с его IP-адресом: mylist.txt:

8.8.8.8
192.168.178.1

а затем запустить

./dnseval -f mylist.txt yahoo.com     # latency for cached sites
./dnseval -m -f mylist.txt yahoo.com  # latency for sites not in cache

Хотя при этом не проверяется размер кеша серверов, это гораздо более простой и быстрый подход, и я ожидаю, что он будет хорошо коррелировать с реальной производительностью.