Как работает HSV?
Техническое описание работы HSV
Общее описание технических принципов работы HSV приведено в предыдущем разделе. В данном разделе будут описаны алгоритмы работы программы, знание которых позволит использовать программу более эффективно.
По результатам проверки HSV разделяет все адреса на четыре группы существующие, адреса которые не удалось проверить (непроверенные), несуществующие и синтаксически некорректные адреса. Обратите внимание, что нельзя сохранить некорректные и несуществующие адреса в разные файлы при окончании работы программы некорректные и несуществующие адреса сохраняются всегда в один файл, в файл с несуществующими адресами.
HSV при проверке адреса электронной почты выполняет следующие действия. Вначале выполняется синтаксический разбор адреса электронной почты, выделяется почтовый домен из адреса. Из домена выделяется домен первого уровня (например, .com для mail.com) и проверяется по имеющемуся у программы списка зон первого уровня (это файл zones.txt в каталоге с программой). Если адрес не проходит синтаксический разбор, или не совпадает со списком зон первого уровня, то такой адрес считается некорректным.
После этого HSV отправляет запрос к серверу DNS на получение адреса почтового сервера для этого домена. Соответственно, если получен список серверов принимающих почту для этого домена, то адрес считается существующим. Если адрес вообще не найден в DNS или нет почтовых серверов, которые принимают для него почту, то такой адрес считается несуществующим. Если сервер DNS не смог вернуть никакого ответа (как Вы знаете из первого раздела, запросы обычно выполняются рекурсивно, и вполне возможна ситуация, когда DNS сервера обслуживающие интересующий программу домен просто физически недоступны), то такой адрес считается непроверенным.
Результат проверки домена программа запоминает во внутреннем кэше, и если в списке рассылки встретится еще один адрес с этого домена, то HSV не будет вновь обращаться к серверу DNS, а сразу получит результат из своего внутреннего кэша. Кэш программы ограничен лишь объемом оперативной памяти. На запоминание результатов проверки одного домена требуется 40 байт оперативной памяти. Соответственно, для запоминания результатов проверки миллиона разных доменов требуется 40 мегабайт. Поиск в кэше практически не зависит от его размера.
Проверка списка из миллиона адресов с одного домена при помощи HSV занимает 2..4 минуты на современном компьютере. Соответственно, разница во времени между проверкой списка рассылки из 50000 адресов с уникальных доменов, и проверка списка из миллиона адресов с 50000 уникальных доменов составит не более 2..4 минут, а на практике может составить разницу всего в несколько секунд (за счет многопоточной работы программы).
Поэтому чем больше обрабатываемый HSV список, тем выше будет производительность программы. HSV может потратить пару часов на проверку первого миллиона адресов из списка, и по десять минут на проверку каждого следующего миллиона адресов из этого списка.
Большое влияние на производительность программы оказывает качество списка DNS серверов, с которыми работает программа. При проверке адреса HSV посылает серверу DNS запрос, и если в течении 30 секунд не получает от сервера ответа, то посылает запрос еще раз. Если после трех попыток ответ не был получен, то проверка завершается с ошибкой "Таймаут". Программа предпринимает пять попыток проверить адрес, если его проверка завершилась с ошибкой. Для каждой следующей попытки сервер DNS выбирается из списка случайным образом. Если все пять попыток завершились с ошибкой, то адрес помечается как непроверенный.
Чем больше список DNS серверов с которыми работает программа, тем меньше вероятность того, что один или два начавших отказывать сервера DNS окажут влияние на производительность программы.
HSV работает в многопоточном режиме, Вы можете установить число потоков от одного до 600. Один поток используется для проверки одного адреса. Соответственно, если используется 600 потоков, то одновременно проверяется 600 доменов, и за минуту программа посылает до 15000 запросов к серверам DNS, при этом в пике сетевой трафик может составить до 700 kbps. Создание такой нагрузки на один сервер DNS очень похоже на хакерскую атаку с целью нарушить его работу. Поэтому программное обеспечение сервера DNS может заблокировать Вас до выяснения причин системным администратором. Также возможно, что DNS сервер будет обрабатывать не более определенного числа запросов в секунду с Вашего адреса, игнорируя остальные пакеты, чтобы сохранить ресурсы для обработки запросов других пользователей сервера. В этом случае скорость работы программы резко снизится, адреса будут проверяться по несколько раз, так как предыдущие попытки проверить их завершились по таймауту.
Соответственно, если Ваше сетевое подключение способно обеспечить работу более чем полусотни потоков, то Вам необходимо иметь список DNS серверов из расчета один сервер на десять потоков. Тогда можно быть уверенным, что сервера не будут отказывать из-за перегрузки.
Многопоточные приложения по-разному работают под разными операционными системами семейства Windows. Windows XP прекрасно справляется с 600 потоками, при этом нагрузка на процессор увеличивается незначительно. Старые операционные системы, такие как Windows'98 и Windows NT4 весьма чувствительны к большому числу потоков, и уже сотня потоков может привести к существенной загрузке процессора. Рекомендуется использовать HSV на компьютерах под управлением операционной системы Windows XP для достижения оптимальной производительности.