пейджинг микросервиса с фильтром из другого сервиса. большая сплоченность - PullRequest
0 голосов
/ 04 августа 2020

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

У нас есть следующие варианты использования / запросы от клиента

  • Пользователь может получить сведения о книге
  • Пользователь может управлять личными сносками
  • Пользователь может управлять личными списками избранных книг

Теперь мы создали сложный процесс доступа. есть несколько фильтров, которые определяют, есть ли у вас видимость этих книг. Они могут всегда меняться, например, клиент покупает новую подписку и получает мгновенный доступ к этим книгам. Каждый запрос с книгой должен использовать этот логин доступа c. в большинстве случаев это простая служба доступа, которая возвращается, если у вас есть доступ к книге или нет. Так что теоретически мы можем создать «микросервис доступа».

Но в списке фаворитов у нас есть пейджинг по запросу sql. В этот запрос sql включен весь фильтр доступа, что действительно очень болезненно. Моя проблема сейчас в том, как я могу создать список избранных страниц, в котором другой микросервис определяет фильтр.

В настоящее время мое лучшее решение - получить все избранные клиента, отфильтровать все эти избранные с помощью службы доступа в кеше и затем сделайте подкачку в кеш. Но, как всегда, есть покупатели, у которых в списке фаворитов находится около 5'000 книг.

Звучит странно, что в вашем списке фаворитов может быть книга, которую вы не видите. Это связано с тем, что ваша подписка может истечь, и мы не хотим удалять эти книги из вашего списка избранных, если вы покупаете новую подписку. Также есть разные устройства, на которых доступно меньшее количество книг. Это означает, что вы можете увидеть книгу на веб-сайте, а в приложении для смартфона - нет. (есть разные приложения для разных вариантов использования)

Как я могу разделить эти варианты использования на хорошие микросервисы? В настоящее время я много читаю о микросервисах, и они говорят, что микросервисы не должны звонить друг другу. Как службе списка избранного узнавать, к каким книгам у покупателя есть доступ на текущем устройстве? служба доступа действительно сильно связана почти со всеми службами, как я могу устранить эту связь? Я не могу кэшировать доступ клиента к услуге списка избранных (у нас около 1 млн книг и клиентов).

введите описание изображения здесь

...