Пакетный комбинаторный вызов Java Streams

Мой вопрос дня касается комбинаторных операций при создании микросервисов.

Давайте воспользуемся вымышленным сценарием: я хочу построить информационную панель. Панель инструментов состоит из группы людей и их информации (история, обзоры, покупки, последние поисковые продукты).

Читая spring-cloud и spring-reactor, я хотел бы иметь неблокирующее решение, вызывающее несколько микросервисов: пользовательскую службу, службу проверки, службу поисковой системы, ....

Моей первой догадкой было сделать что-то вроде

  • загрузить пользователей,
  • для каждого загрузите свои обзоры, затем
  • загрузите его историю тогда
  • объединить все данные

В псевдокоде что-то вроде loadUsers().flatmap(u -> loadReviews(u))....reduce(). Как видите, это действительно приблизительно.

При загрузке 1 пользователя мы можем оценить, что нам нужно еще 4 http-вызова. Для 100 пользователей, 400 дополнительных вызовов и т. д. Большой O не кажется линейным.

В худшем случае, когда микросервис также делегирует загрузку данных из микросервисов XYZ, мы получаем: для 1 пользователя -> N вызовов, включая 1 обзорный вызов -> 1 вызов XYZ. Извините, я не рассчитал Big-O (квадратичное?).

Чтобы избежать этого, мы, возможно, можем загрузить всех пользователей, извлечь их идентификаторы, вызвать микросервисы поиска с набором идентификаторов. Каждый микросервис может загружать все данные сразу (возможно, список отзывов, сопоставленных с идентификатором), и исходный вызов объединит все эти списки. (своего рода функция почтового индекса)

Резюме: я только что прочитал этот вопрос о составе Observables. Мой вопрос можно резюмировать следующим образом: «Используете ли вы ту же стратегию, когда у вас нет уникального пользователя в начале цепочки, а есть сотни пользователей?» (производительность может быть проблемой, нет?)


person Archange    schedule 24.10.2015    source источник


Ответы (1)


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

person dolan    schedule 22.12.2015
comment
Нравится разрушение Hystrix? - person Archange; 07.01.2016