Как повысить производительность серверной части, когда данные извлекаются из нескольких API последовательно?

#node.js #database #api

Вопрос:

Я создаю приложение Nodejs, которое последовательно использует API нескольких серверов, поскольку следующий запрос зависит от результатов предыдущих запросов. Например, регистрация пользователей осуществляется на нашей платформе в базе данных PostgreSQL. Каналы пользователей, чаты, сообщения хранятся на серверах GetStream. Роли и разрешения пользователей управляются с помощью CMS. Если на странице мы хотим отобразить список подписчиков пользователей с некоторыми кнопками в соответствии с разрешениями пользователя, то сначала мне нужно найти список подписчиков моего текущего пользователя из GetStream, затем обогатить их своей базой данных PostgreSQL, а затем получить их разрешения из CMS. Поскольку один запрос должен ждать другого, требуется много времени, чтобы дать ответ. Мне нужно предоставить все эти данные в определенном формате. Я использовал Promise.all (), где запросы не зависели друг от друга. Я подумал о способе хранения предварительно обработанных данных, готовых к обработке, но я не уверен, как это сделать. Каков наилучший способ решения этой проблемы?

Комментарии:

1. Привет, сумитк, как ты уже сказал, «следующий запрос зависит от результатов предыдущих запросов», вряд ли ты сможешь что-то сделать. В противном случае вам потребуется предоставить конкретные сведения об обрабатываемых вами данных и о том, как зависят зависимости каждого запроса, чтобы кто-либо мог предоставить входные данные. Можете ли вы отредактировать эту информацию в своем вопросе?

2. Привет, Мэтт, я обновил свой вопрос.

Ответ №1:

последовательный способ, поскольку следующий запрос зависит от результатов предыдущих запросов

вы можете попробовать использовать async/await, чтобы каждый запрос выполнялся последовательно.

Комментарии:

1. Я уже использую его, но проблема в том, что, когда эта цепочка затягивается, время ожидания увеличивается, иногда даже на 5-10 секунд, что создает плохой пользовательский интерфейс.