Запросы массовой публикации ForEach не выполняются

У меня есть этот сценарий, в котором я беру большой набор данных и вызываю удаленный API, используя запрос-обещание, используя метод публикации. Если я делаю это индивидуально, запрос работает просто отлично. Однако, если я перебираю примерный набор из 200 записей, используя forEach и async/await, только около 6-15 запросов возвращаются со статусом 200, остальные возвращаются с ошибкой 500.

Я работал с владельцем API, и их журналы показывают только 200 запросов. Поэтому я не думаю, что узел на самом деле отправляет те, которые возвращаются как 500.

Кто-нибудь сталкивался с этим и/или знает, как я могу обойти это?


person TheJason    schedule 14.07.2019    source источник


Ответы (1)


Насколько мне известно, в node.js нет кода, который автоматически делает для вас ответ 500 http. Эти 500 ответов, по-видимому, исходят из сети целевого сервера. Вы можете посмотреть трассировку сети на вашем сервере, чтобы убедиться в этом.

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

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

person jfriend00    schedule 14.07.2019
comment
Я тоже так думал. Но интересно то, что я могу использовать PostMan для отправки одного и того же запроса 200 раз без проблем. - person TheJason; 14.07.2019
comment
Мне просто любопытно, есть ли вероятность того, что моя служба узла истечет время ожидания запроса, если в очереди слишком много? - person TheJason; 14.07.2019
comment
@TheJason - Насколько мне известно, размер очереди не ограничен. Кроме того, он просто не выполнит HTTP-запрос, а не выдаст ответ 500, что означает успешное подключение к цели, которая вернула ответ 500. - person jfriend00; 14.07.2019
comment
@TheJason - Когда вы делаете это из Postman, вы выполняете их один за другим или 200 запросов за раз, все в полете одновременно? - person jfriend00; 14.07.2019
comment
@TheJason, когда вы делаете это из почтальона и когда вы делаете это из узла, они оба выполняются на одной машине? Кроме того, возможно, что между ними есть прокси или обратный прокси? возможно, у него есть правило для определенных клиентов/пользовательских агентов, и, возможно, у этого прокси есть ошибка в реализации правила... - person root; 14.07.2019
comment
Как указал Рут, проверьте журналы обратного прокси-сервера, если они имеют nginx или HAP, сидящие поверх него, тогда эти журналы доступа очень полезны в режиме реального времени для оценки проблемы. 500 в общем случае означает сбой сервера или невозможность обслужить запрос. - person Gandalf the White; 14.07.2019