Задать вопрос

Почему при огромном количестве HTTP-запросов DNS не резолвит домены?

Мне нужно проверить 200 миллионов доменов на доступность и приндлежность к той или иной CMS.

Я использую PHP 7.1 и делаю проверку большим количеством процессов.

ЖЕЛЕЗО И НАСТРОЙКИ

  • Сервер: Multicore CPU, 64GB RAM, SSD disks, 500 Mbits dedicated bandwidth (OVH server).
  • В файле resolv.conf Google DNS: 8.8.8.8 / 8.8.4.4
  • ulimit -n установлен в значение 655350
  • Использую nload для анализа загрузки канала


ТЕСТИРОВАНИЕ

Я проверял первый 1 миллион доменов из БД изпользуя разное количество параллельно запущенных процессов. Я столкнулся с проблемой, что увеличивая количество процессов, количество доменов, которые не отвечают в течение 30 секунд, сильно увеличилось. Вот результаты.

1. 1000 процессов

Тест: 1,000,000 доменов, 1000 параллельных процессов, средняя загрузка канала 85 Mbits, общее время проверки 1 час.
Результат: 65% доменов успешно зарезолвлены, 35% не были зарезолвлены из-за таймаута.


2. 300 процессов

Тест: 1,000,000 доменов, 300 параллельных процессов, средняя загрузка канала 70 Mbits, общее время проверки 2 часа.
Результат: 85% доменов успешно зарезолвлены, 15% не были зарезолвлены из-за таймаута.


ВЫВОДЫ

Как мы можем видеть, увеличивая количество процессов в 3 раза, мы не получаем увеличение загрузки канала в 3 раза.
Сильно увеличивается количество доменов, которые не были доступны/незарезолвлены. При этом скорость проверки была увеличена в 2 раза.

ВОПРОС

Где узкое место такой проверки? Как я могу использовать всю пропускную способность канала в 500 Mbit? Должен ли я использовать свой собственный DNS сервер и если так, то как его правильно сконфигурировать?

Буду рад любым идеям и советам!
  • Вопрос задан
  • 313 просмотров
Подписаться 2 Средний 1 комментарий
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 4
athacker
@athacker
Поставьте unbound, он будет сам рекурсивные запросы слать. Как правильно сконфигурировать -- описано в документации. В принципе, дефолтного конфига будет достаточно, нужно только внешние/внутренние интерфейсы будет указать, ну и в ACL прописать разрешение только на резолв с адреса 127.0.0.1.
Ответ написан
Комментировать
@MechanID
Админ хостинг провайдера
Причина проблемы - гуглднс вас рейтлимитит.
Решение - использовать другой, предпочтительной свой рекурсивный днс например как посоветывал вам athacker.
Ответ написан
Комментировать
begemot_sun
@begemot_sun
Программист в душе.
А у меня есть решение, которое может отресолвить кучу DNS используя сторонние DNS-сервера. Скажем есть лист из 30к таких DNS-серверов, моё решение может взять 4 ГБ файл (емайлов) и отресолвить MX и A записи за время порядка 40 минут для обычного сервера без наворотов. Если интересно, то можно адаптировать под ваши нужды.
Ответ написан
Комментировать
@neovav
Вам надо вначале определиться с целью, что Вы хотите получить, затем разобраться как это работает.
1. Я бы для начала определял данные домена по WHOIS.
https://www.imena.ua/domains/whois?domain=toster.ru
2. Затем я бы у серверов:
nserver: ns1.habradns.net.
nserver: ns2.habradns.net.
nserver: ns3.habradns.net.
Проверял актуальность и время жизни записи для домена. На основе этих данных я бы понимал как часто нужно обновлять сведения о домене.
3. После этого, можно проверять сайт на доступность (зная его имя и IP) и какие CMS, сервисы и прочее там установлено.
Для проверки этого можно использовать как прямое обращение, так и косвенное, через кеш поисковиков.

P.S. Ну и для анонимности я бы это делал через TOR, VPN или на худой конец использовал бы прокси
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
IT ATLAS Москва
от 250 000 до 500 000 ₽