基于不同ms统计的所有用户页面微服务通信

Microservice communication on all users page based on different ms statistics

我在开发用于学习目的的 MS 项目时 运行 遇到了一些问题。

所以目前的想法是我现在有 2 个微服务:

  1. 用户 MS (UMS)
  2. 统计短信(SMS)

但是在我的 UI 上有一个用户页面,其中显示了所有用户,但他们应该按“统计 MS”数据排序。

目前,我有 4000 个假用户,为每个用户发送新的 API 调用是疯狂的。我有一个每页 30 个用户的分页,即使我正在使用缓存。

所以这意味着现在发送了 30 个请求来获取每个用户的统计信息这是一个可行的解决方案,但是非常慢,而且它不会根据统计信息对用户进行排序。

因为我正在按 DESC 对用户进行排序,并且只是向统计服务发送 API 调用以收集每个用户的统计信息。

但我需要的是:

当有人打开 /users 页面时,系统会自动从“统计服务”中对他们进行排序,例如,具有最佳统计信息的用户将排在最前面。

F.Y.I。统计数据是根据用户 activity 计算的,所以它是一个新的 MS。但是 /users 页面应该有一个过滤器,这样每个人都可以过滤所有具有最佳统计信息的用户,等等。

这种方法会违反高可用性并且效率低下。例如,如果 statistics MS 宕机了,您的 user MS 也会宕机。我认为这里最好的方法是 自包含 非规范化数据库。为了更清楚,您可以在用户的​​ table 中添加一个字段,该字段确定每个用户的统计值。

但是,这可能会给您的代码增加一些复杂性,因为您必须使两个微服务(用户、统计信息)保持同步。在这种情况下,您可以在微服务之间使用消息代理(例如 RabbitMQ、Kafka 等),因此对于 statistics MS 中的每个统计变化,它都会在用户 MS 收听的特定频道以更新其数据库。

现在您无需为每个请求都调用统计 MS,您只需通过 SQL 查询即可对用户进行排序。此外,statistics MS 的失败不会影响 user MS 功能。