Я нахожусь в процессе разработки архитектуры микросервиса, и у меня есть вопрос, связанный с производительностью. Вот что я пробую с моим дизайном:
- У меня есть несколько микро-сервисов, которые выполняют различные действия и сохраняют эти результаты в собственном хранилище данных.
- Микро -услуги получают работу через очередь сообщений, где они получают запросы на запуск своего процесса для указанных данных c. Микро-сервисы НЕ связываются друг с другом.
У меня есть API-шлюз, который фактически имеет три пути:
1) Получите запрос на обработку данных, которые затем преобразуются в несколько сообщений, которые он помещает в очередь для обработки микросервисами в свое время. Время обработки может быть в минутах или дольше (не мгновенно)
2) Получает запрос о статусе процесса, в котором возвращается ход всего процесса.
3) Получает запрос на объединенные данные, представляющий собой некоторую комбинацию всех результатов от служб.
Моя проблема заключается в № 3 выше и производительности этого процесса.
Всякий раз, когда этот запрос получен, шлюз API должен поместить запрос сообщения в очередь для получения информации от всех служб, затем он должен дождаться ответа всех служб с последним состоянием их данных и затем он объединяет эти данные и возвращает вызывающему.
Этот процесс, очевидно, довольно медленный, так как он должен ждать ответа от каждой службы. Какой способ ускорить это?
Единственный способ, которым я решил решить эту проблему, - это иметь другую агрегированную службу / хранилище данных, где дублированные данные хранятся и запрашиваются моим шлюзом API. Мне действительно не нравится этот подход, так как он дублирует данные и требует дополнительной работы / кода.
Каков «правильный» и эффективный способ запроса актуальных данных из моих микро-сервисов.