Кэширующие рекурсивные DNS или чем плох bind9

Dec 22, 2006 16:55

Чем плох bind9

До поры до времени я как и многие полагал что bind это хороший DNS сервер и искать ему замену смысла нет, к тому же во FreeBSD он в base system. Но выяснилось, что под большой нагрузкой в качестве кэширующего рекурсора bind9 работает просто отвратительно. ( Read more... )

bind, dns

Leave a comment

ospf_ripe December 22 2006, 20:26:36 UTC
pdnsd пока не смотрел, но он тредовый. А тредовые приложения как
правило работают хуже FSM (и имеют больше проблем с надежностью). Другое дело что на FSM не все задачи можно положить (без титанических усилий), но рекурсивный DNS хорошо реализуется в виде FSM. Что и сделано в bind и Powerdnsd. Будет время и pdnsd протестирую. Но пока кандидаты production это powerdns recursor и maradns (он хоть и тредовый но с кешем по описанию хорошо работает).
Что касается djbdnsd то он уже 5 лет не поддерживается и у него дурацкая лицензия, которая не позволяет распространять измененный код. Часть его недостатков описано тут

Пока кандидаты в production это PowerDNS recursor и MaraDNS, но
требуется дополнительное тестирование, изучение их исходного кода и
изучение степени соответствия стандартам. bind используется
практически повсеместно, и если что то не может проресолвить bind это
не сможет проресолвить большинство. При этом вполне могут существовать
хосты которые не смогут корректно проресолить Power и Mara, т. к. они
сравнительно редко используются и такие проблемы могут быть долго не
замеченными. И это необязательно могут быть ошибки в софте, это может
быть и какое ни будь сочетание настроек разных удаленных DNS серверов.

Что касается bind то есть еще такой негативный с моей точки зрения момент - доступ к CVS только платный, открытого доступа к RT (bug tracker) нет и не планируется. Т. е. постороннему человеку подключиться к процессу разработки очень сложно.

Reply

brj December 23 2006, 23:07:48 UTC
FSM, на сколько знаю, никак не масштабируется и не параллелится.

Буду ждать тестирования. Интересно. Пишите результаты ;-)

Reply

ospf_ripe December 24 2006, 08:53:47 UTC
Правильно приготовленная FSM масштабируется очень хорошо. Да, в случае SMP чтобы использовать все процессоры нужно либо форкать несколько процессов (как это делает nginx) или создавать несколько потоков (как это умеет bind9, но пока работа в тредовом режиме там реализована плохо).

Что касается того, что не параллелится то параллелить нужно только тогда когда есть блокирующиеся операции. Сокеты умеют работать в неблокирующемся режиме, дисковые операции кэширующему dns не нужны, задач которые требуют длительной работы CPU при правильном дизайне тоже быть не должно.

Безусловно у FSM есть свои недостатки, но в такой задаче как кэширующий dns проявляется только один из них (и то не в полной мере) - более ысокая сложность реализации, по сравнению с тредовой моделью.

Reply

ospf_ripe December 24 2006, 11:22:22 UTC
В принципе можно так на пальцах объяснить почему на такой задаче FSM масштабируется лучше:
При обработке рекурсивного dns-запроса тредовым приложением поток посылает запрос к удаленному серверу, потом ждет ответа (или таймауа). когда получит ответ пишет его в кэш и отвечает клиенту. В итоге получается, что большинство потоков у нас ничего не делают и находятся в состоянии ожидания ответа от удаленного сервера. Потоки конечно гораздо более легкий объект чем процесс, но с ними все равно сопряжены определенные накладные расходы. Я где то в рассылках freebsd видел результаты тестов, по которым на однопроцессорной машине bind9 с двумя потоками работает чуть ли на в полтора раза медленнее чем с одним.

Применительно к модели по которой стоит писать кэширующий dns весьма кстати такая цитата:
"A computer is a state machine. Threads are for people who can't program state machines."
-- Alan Cox

Reply

Поясните пожалуйста ospf_ripe December 26 2006, 09:11:13 UTC
> по счетчику "dropped due to full socket buffers" в netstat -s -p udp.

Пожалуйста поясните где можно почитать точно что именно попадает в этот и другие счётчики. Для ФриБСД.

Спасибо.

Reply

Re: Поясните пожалуйста ospf_ripe December 26 2006, 09:50:02 UTC
К сожалению статистика, показываемая по netstat -s во FreeBSD документирована плохо.

Почитать можно в /usr/src/sys/netinet/udp_usrreq.c

Каждый входящий пакет в udp_append помещается во входную очередь сокета. Если очередь переполнена (её размер задается через net.inet.udp.recvspace) или в системе недостаточно mbuf-ов, то пакет теряется и увеличивается счетчик udpstat.udps_fullsock.

Если очередь имеет достаточный размер, и mbuf-ов хватает, то быстрый рост udpstat.udps_fullsock говорит, о том, что приложение открывшее сокет читает оттуда данные медленнее чем они туда поступают.

Reply

Re: Поясните пожалуйста ospf_ripe December 26 2006, 10:34:42 UTC
Спасибо, буду разбираться.

Reply

ospf_ripe January 8 2007, 17:52:37 UTC
Obsujdayutsya tolko problemi licenzii i pro4ego spama :)

Reply


Leave a comment

Up