Как организовать поиск в микросервисной архитектуре?

Например, у меня есть два сервиса: клиенты и заказы и gateway, который выдаёт наружу API.
Я хочу чтобы к гейту можно было отправить запрос: выдай мне все заказы клиента с фамилией Иванов, оформленные позже 25 ноября.

Проблема следующая: сервис клиентов знает фамилии, но не знает даты заказов. А сервис заказов знает даты, но не знает фамилию (заказы связываются с клиентами через ID клиента).

Как правильно организовывать поиск в этом случае?

Я вижу три решения:
1. Добавить третий сервис (сервис поиска), который знает и о заказах и о клиентах (тогда не понятно зачем первые два сервиса);
2. Добавить третий сервис, который работает, например, с Elasticsearch, а первые два сервиса периодически пушат туда индексы;
3. С гейта сначала искать всех клиентов с фамилией Иванов, а потом передавать их ID в сервис заказов и фильтровать по дате.

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

Короче говоря, как организовывать поиск, сортировку и постраничный вывод в микросервисах?
  • Вопрос задан
  • 217 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы