10 000 запросов HTTP в минуту - PullRequest
0 голосов
/ 23 мая 2018

Я достаточно опытен с веб-сканерами, однако этот вопрос касается производительности и масштаба.Мне нужно запросить и просканировать 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приложение, которое отображает данные для пользователей.Любые советы или критические замечания приветствуются.

1 Ответ

0 голосов
/ 23 мая 2018

Обмен сообщениями

Я повторяю комментарий Эвандро и изучу очереди сообщений служебной шины концентраторов событий для загрузки очереди, которая будет обрабатываться вашими вычислительными узлами.Очереди сообщений поддерживают блокировку записей, которая может быть привлекательной на основе вашей записи.

Параметры вычислений

Я также согласен с тем, что функции Azure обеспечат хорошую платформу для масштабирования вычислений/ обработка операций (вызов API и очистка HTML).Кроме того, функции Azure могут запускаться очередями сообщений, концентраторами событий или сеткой событий.[Примечание. Сетка событий позволяет подключать различные службы Azure (pub / sub) к надежным сообщениям.Так что это может сыграть полезную роль посредника в вашем сценарии.]

Еще одним вариантом для вычислений могут быть инстансы контейнеров Azure (ACI), поскольку вы можете ускорять контейнеры по требованию для обработки ваших записей.Это не обладает той же возможностью автоматического масштабирования, что и функции, хотя и не поддерживает операции прямого связывания.

Обработка данных (вход / выход)

Действительно, Azure не взимает плату за вход данных, но любые данные, покидающие Azure, будут иметь плату за выход после начальных 5 ГБ каждыймесяц.[https://azure.microsoft.com/en-us/pricing/details/bandwidth/]

У вас должна быть возможность обработки дескрипторами функций Azure API, очистки HTML и записи в базу данных.Возможно, вам придется разбить их на отдельные функции, но вы можете легко объединить функции вместе либо напрямую, либо с помощью LogicApps.

...