Мы создаем инфраструктуру, в которой есть сервер Node.js и Express.
На сервере происходит следующее:
- Сервер принимает входящий HTTP-запрос от клиента.
- Сервер генерирует два файла (эта операция может быть "относительно длинной", что означает также 0,1 секунды или около того)
- Сервер загружает сгенерированные файлы (~ 20-200 КБ каждый) на внешний CDN
- Сервер отвечает клиенту, и это включает в себя URI файла на CDN
В настоящее время сервер делает это последовательно для каждого запроса, и это работает достаточно хорошо (Node/Express может обрабатывать параллельные запросы автоматически). Однако, поскольку мы планируем расти, количество одновременных запросов может расти выше, и мы считаем, что нам лучше реализовать очередь для обработки запросов. В противном случае мы можем столкнуться с слишком большим количеством задач, запущенных одновременно, и слишком много открытых подключений к CDN. Быстрое реагирование на клиента не является релевантным.
То, о чем я думал, состоит в том, чтобы иметь отдельную часть на сервере Node, которая содержит несколько "рабочих" (2-3, но мы будем проводить тесты для определения правильного количества одновременных операций). Итак, новый поток будет выглядеть примерно так:
- После принятия запроса от клиента сервер добавляет операцию в очередь.
- Есть 2-3 (для тестирования) работников, которые берут элементы из очереди и выполняют все операции (генерируют файлы и загружают их в CDN).
- Когда рабочий обработал операцию (не имеет значения, останется ли она в очереди в течение относительно длительного времени), он уведомляет сервер Node (обратный вызов), и сервер отвечает клиенту (который имеет ожидали в то же время).
Что вы думаете об этом подходе? Вы считаете, что это правильный?
В основном важно, КАК это может быть реализовано в Node/Express?
Спасибо за ваше время