Чтобы было понятно, что происходит:
- Клиент отправляет запрос "сделай это за меня ..."
- Код узла запускает асинхронную операцию (или несколько связанных друг с другом)
- Проход две минуты
- Тайм-аут HTTP-запроса
- Клиент повторно отправляет запрос
- Теперь выполняются два запроса
- И так до тех пор, пока не будет запущено множество запросов
Мне кажется, я слышал, что это называется "эффект собачьей кучи". Я не знаю ни одной стандартной библиотеки в node.js или jQuery, чтобы помочь вам, хотя кто-то начал работу над кэширующим прокси-сервером, чтобы помочь с этим в случае, когда ответ будет «кэшируемым»:
https://github.com/simonw/dogproxy
Итак, вам нужно спроектировать собственную систему, чтобы обойти это.
Существуют разные способы обработки пакетных заданий, и часто это зависит от характера задания.
Что я чаще всего видел для задач, которые занимают много времени, так это то, что API возвращает идентификатор задания сразу, а затем клиент использует опрос (или длительный опрос), чтобы дождаться завершения задания. Вам понадобится какая-то база данных для хранения состояния (% выполнено) и результата задания, которое позволит клиенту дождаться изменения этого состояния. Это также может позволить вам «отменить» задание, хотя в этом случае серверный код должен периодически проверять, чтобы увидеть, было ли оно отменено.
Просто имейте в виду, что где бы вы ни хранили состояние работы, оно должно быть общим для всех узлов кластера, если приложение будет или будет масштабировано позже. Для этого вы можете использовать какую-нибудь высокоскоростную облегченную систему хранения, такую как memcached или redis.