2016-02-19 2 views
0

Я использую модуль кластера, чтобы иметь нескольких рабочих, которые извлекают данные из API, обрабатывают их и записывают агрегат в БД. Проблема в том, что API ограничил количество запросов в секунду. Теперь я ищу решение для синхронизации ограничений для всех работников.Ограничение количества запросов Node.js в секунду при использовании модуля кластера

Я благодарен за каждый намек, чтобы решить эту проблему.

ответ

0

Если у вас ограниченное количество запросов в секунду, вы можете отслеживать, сколько запросов вы оставили в главном потоке, и каждый ребенок может запросить главный поток, если он может отправить запрос перед отправкой, и главный поток выполнит запрос только тогда, когда у него есть запросы, доступные для текущей секунды. Here is another answer showing how master -> slave communication works.

В конце каждой секунды вы затем сбросите главный поток на количество доступных запросов.

Этот подход был бы лучше всего для достижения максимума, однако гораздо более простой подход состоял бы в том, чтобы запустить N число потоков и позволить им делать K количество запросов в секунду, где K * N меньше числа запросы разрешены в секунду. Самый безопасный и наименее вероятный способ ограничить это заключается в том, чтобы сделать setTimeout между окончанием одного запроса и началом следующего запроса, но это позволит избежать задержки, требуемой для обработки запроса. Следующий лучший вариант - для каждого потока, чтобы запустить N количество запросов в начале второго, а не стрелять снова до следующей секунды.

Ваше безопасное решение - не приближаться к пределу и вместо этого придерживаться максимального количества N/2 запросов в секунду, где N - максимальное количество запросов в секунду.

Смежные вопросы