Мне нужно проверить 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 сервер и если так, то как его правильно сконфигурировать?
Буду рад любым идеям и советам!