Я достаточно опытен с веб-сканерами, однако этот вопрос касается производительности и масштаба.Мне нужно запросить и просканировать 150 000 URL за интервал (большинство URL-адресов каждые 15 минут, что составляет около 10 000 запросов в минуту).Эти страницы имеют приличный объем данных (около 200 КБ на страницу).Каждый из 150000 URL-адресов существует в нашей базе данных (MSSQL) с отметкой времени последней даты сканирования и интервалом для того, чтобы мы знали, когда нужно сканировать снова.
Здесь мы получаем дополнительный уровень сложности.У них действительно есть API, который позволяет до 10 пунктов за вызов.Необходимая нам информация существует частично только в API, а частично только на веб-странице.Владелец позволяет нам совершать веб-звонки, и их серверы могут справиться с этим, однако они не могут обновлять свой API или предоставлять прямой доступ к данным.
Таким образом, процесс должен выглядеть примерно так: получить 10 записей из базы данных, которые прошли интервалы и должны быть просканированы, затем нажать API.Затем каждому элементу из 10-ти партий нужны свои собственные веб-запросы.Как только запрос возвращает HTML, мы анализируем его и обновляем записи в нашей базе данных.
Мне интересно получить несколько советов о том, как правильно обращаться с инфраструктурой.Предполагая многосерверную среду некоторыми бизнес-требованиями:
- Как только запись URL готова для сканирования, мы хотим убедиться, что она захватывается и запускается только одним сервером.Если два сервера проверит его одновременно и запустят, это может повредить наши данные.
- Рабочая нагрузка может варьироваться, в настоящее время это 150 000 записей url, но это может быть намного ниже или намного выше.Хотя я не ожидаю более 10% изменений в день, было бы неплохо иметь автоматическое масштабирование.
- После того, как каждый запрос возвращает HTML, нам нужно проанализировать его и обновить записи в нашей базе данных с помощьюотдельные части данных.Некоторые хост-провайдеры разрешают бесплатные входящие данные, но взимают плату за исходящие.Поэтому в идеале кодовая база, которая запрашивает веб-страницу и затем анализирует данные, также имеет прямой доступ к SQL.(В отличие от микросервисного подхода)
Что-то вроде многосерверной коллекции блокировок (очередь Azure?), Автоматическое масштабирование виртуальных машин, которые опрашивают очередь, один хост-сервер базы данных, который также запрашивается MVCприложение, которое отображает данные для пользователей.Любые советы или критические замечания приветствуются.