当数据分布在不同的微服务上时进行有效排序

问题描述 投票:0回答:1

在微服务环境中,我们如何有效地对属于两个不同微服务的数据进行排序。

例如,假设我们有两个微服务

  1. 用户服务(拥有与用户相关的所有信息)
  2. 订单服务(拥有与用户所下订单相关的所有信息,以用户 ID 为参考)

现在在管理 UI 上,假设我们有一个页面,我们在其中显示特定时间段之间下的订单,我需要对用户显示名称进行排序功能。

我的问题是如何有效地实现这一目标,以下是可以应用的两种可能的选项

  1. 从两个服务中获取所有数据,然后进行内存中合并(效率不高)
  2. 复制其他服务上的数据,例如在订单服务上添加用户显示名称(这样我们就有冗余数据,我们需要注意一致性)。

有没有其他方法可以实现这一点,想知道在现实世界的应用中如何解决这样的情况

注意:这里提供的场景更像是假设,只是想了解当事情是这样的时候如何解决

microservices backend distributed-system system-design high-level-architecture
1个回答
0
投票

我解决这个问题的方法是实现“订单+用户”微服务,它是“订单”和“用户”微服务的物化视图。这意味着视图将所有具有关联用户的订单存储到其表中。该视图侦听其他微服务的更改以使其自身保持最新(您永远不会直接修改视图的内容)。

这意味着数据的重复,而且实现起来并不是最简单的事情,但它有以下优点:

  • 您不会在“订单”和“用户”微服务的数据库之间进行 JOIN,这会导致数据库单体。
  • 您保持“订单”服务干净。想象一下,您想通过用户、产品等信息来搜索订单……这将导致令人难以置信的混乱“订单”服务。
  • 您将获得超快速的搜索,因为视图已经对数据进行了非规范化!
© www.soinside.com 2019 - 2024. All rights reserved.