我们目前正在尝试打破我们在微服务中的单体应用,而我目前遇到了一个用例问题。
我们有来自客户的以下用例/请求
- 用户可以得到bookdetails
- 用户可以管理私人笔记
- 用户可以管理私人收藏的书籍
现在我们创建了一个复杂的访问过程。如果您对这些书籍有可见性,则有一些过滤器可以声明。例如,他们可以随时更改,客户购买新订阅并可以即时访问这些书籍。每个请求一本书,都必须使用这个访问逻辑。在大多数用例中,它是一个简单的访问服务,如果您可以访问一本书,它就会返回。所以理论上我们可以创建一个“接入微服务”。
但是在收藏夹列表中,我们对 sql 请求进行了分页。在这个sql请求中都包含了访问过滤器,这确实很痛苦。我现在的问题是,如何创建一个分页收藏夹列表,其中另一个微服务定义了一个过滤器。
目前我最好的解决方案是获取客户的所有收藏夹,使用缓存中的访问服务过滤所有这些收藏夹,然后在缓存中进行分页。但与往常一样,有些客户的收藏夹中有大约 5,000 本书。
听起来很奇怪,您的收藏夹中可以有一本书,而您看不到。这是因为您的订阅可能会过期,如果您购买新订阅,我们不想从您的收藏夹中删除这本书。还有一些不同的设备可以提供较少的书籍。这意味着您可以在网站上看到这本书,但在智能手机应用程序上可能看不到。(不同的用例有不同的应用程序)
如何将这些用例拆分为好的微服务?我目前正在阅读很多关于微服务的内容,他们说微服务不应该互相调用。收藏夹服务应该如何知道客户在当前设备上可以访问哪些书籍?访问服务与几乎所有服务都有很大的内聚力,我怎样才能消除这种内聚力?我无法缓存客户对收藏夹服务的访问(我们有大约 1mio 书籍和客户。)。