Nodejs - предотвращение одновременных асинхронных вызовов на кластерном сервере - PullRequest
0 голосов
/ 18 ноября 2018

Я использую сервер Nodejs Express в кластерной среде. Сервер получает сотни запросов на один и тот же ресурс.

При обработке запроса на этот ресурс я выполняю асинхронный вызов другой службе (скажем, службе A), ожидаю его результата, запоминаю обещанный вызов для службы A в памяти и возвращаю ответ на запрос.

Поскольку я использую кластерный сервер, другие работники начинают принимать запросы на тот же ресурс. И поскольку запомненное обещание для службы A относится к одному работнику, а обещание еще не выполнено, я заканчиваю тем, что несколько раз обращаюсь к одному и тому же ресурсу в службу A.

Есть ли способ предотвратить повторные вызовы в службу, пока я работаю в кластерной среде?

1 Ответ

0 голосов
/ 18 ноября 2018

Вы должны использовать общую память для всех процессов кластера.

Как уже упоминалось, вы можете использовать redis, что предпочтительнее, если вам нужно масштабировать за пределы одного компьютера кластера.

Но если выУ меня нет большого количества данных для запоминания. Я бы реализовал супер-простой ключ: хранилище значений с помощью node-ipc (get, set)

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

Другой подход

Создайте микро-сервис, который вызывает API A, B, C по требованию, и сохраните результат в памяти.Вы также можете реализовать глобальное регулирование таким образом.

Затем кластер получает запросы и вызывает ваш микро-сервис, который либо немедленно возвращает (приводит к кешу), либо вызывает api A.

PS -если вам нужно масштабировать этот микросервис, лучше использовать redis и просто подключить его к кластеру.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...