@egorkozelskij

Как правильно организовать структуру Worker Pool?

Здравствуйте!

Подскажите, как правильно организовать архитекруту приложения для решения следующей задачи:

В БВ с периодичностью +-200 записей в минуту вставляются задачи для "почти парсинга" (url, куда отправить запросы и их количество).
Важно, что один запрос должен быть с 1прокси адреса и далее прокси должна бездействовать 0.5 секунды для защиты от бана.
Сервер поддерживает 500 одновременных запросов по сети.
Мне важна архитектура, которая позволит контролировать скорость запросов в минуту по каждой задаче.

То есть у меня есть 500 потоков, есть 10к прокси и 200 в минуту новых задач.
Если задача - обратиться 100 раз по URL и скорость 50 в минуту, то я могу за одну итерацию потратить 50 прокси и потом надо некоторое время ждать, чтобы не привысить лимит скорости.

Пока не совсем понятно как грамотно контролирвать распределение прокси по задачам и контролировать скорость задач.
  • Вопрос задан
  • 383 просмотра
Пригласить эксперта
Ответы на вопрос 2
bitniks
@bitniks
Go/PHP/Symfony developer
Использовать алгоритмы Rate Limiting — https://en.wikipedia.org/wiki/Rate_limiting
Пакет с реализацией rate limiter: https://godoc.org/golang.org/x/time/rate
Ответ написан
Комментировать
Это называеся throttling.
Можно отправлять задачи потштучно в очередь, а оттуда брать с использованием механизма rate limit (гуглится).
Если есть несколько экземпляров сервиса, то можно использовать Redis.

Дополнительная информация:
https://docs.microsoft.com/ru-ru/azure/architectur...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы