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

DNS не разрешает некоторые домены при большом количестве запросов

Мне нужно проверить 200 000 000 (200 000 000) доменов на доступность и информацию о CMS.

Я использую php 7.1 и имитирую многопоточную проверку.

Оборудование и конфигурация

  1. Аппаратное обеспечение сервера: многоядерный процессор, 64 ГБ ОЗУ, SSD-диски, выделенная пропускная способность 500 Мбит (сервер OVH).
  2. В resolv.conf есть Google DNS: 8.8.8.8 / 8.8.4.4
  3. ulimit -n установлен на 655350
  4. nload для измерения нагрузки на полосу пропускания

Тесты

Я проверил первые 1000000 доменов из базы данных, используя другое количество параллельных потоков. Как только я это сделал, я столкнулся с проблемой, что с увеличением количества потоков количество доменов, которые не отвечают в течение 30 секунд таймаута, сильно увеличивается. Вот результаты.

1. 1000 потоков

ТЕСТ: 1000000 доменов, 1000 параллельных потоков, средняя загрузка полосы пропускания 85 Мбит, время проверки 1 час. РЕЗУЛЬТАТ: 65% успешно решены, 35% не были разрешены по таймауту.

2. 300 потоков

ТЕСТ: 1000000 доменов, 300 параллельных потоков, средняя загрузка полосы пропускания 70 Мбит, время проверки 2 часа. РЕЗУЛЬТАТ: 85% успешно решены, 15% не были разрешены по таймауту.

Резюме

Как видим, увеличивая количество потоков в 3 раза, мы не получаем увеличения пропускной способности еще в 3 раза. Мы получили огромное увеличение количества доменов, которые не были разрешены \ открыты по таймауту. При этом скорость проверки увеличилась в 2 раза.

Вопрос

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

Обновление 1

Google DNS, вероятно, ограничивает вашу скорость. Использование вашего собственного рекурсивного преобразователя DNS - или нескольких из них - должно быть шагом 1.

Я попробовал привязать (DNS-сервер) с его конфигурацией по умолчанию, не настраивая его. Я получил ОГРОМНУЮ нагрузку на привязку, и результаты были примерно такими же.

Есть ли какие-нибудь идеи о том, как настроить привязку для обработки запросов 200–500 тыс. В день? Мы можем получить другой сервер просто как DNS-сервер. Может быть, мы можем использовать альтернативный DNS-сервер (без привязки)?