【发布时间】:2017-11-09 06:36:31
【问题描述】:
我正在使用平均堆栈的微服务开发方法开发一个应用程序。我遇到了需要在多个微服务之间共享数据的情况。例如,假设我有用户、视频、消息(发送/接收、收件箱等)服务。现在视频和消息记录属于一个帐户记录。当用户创建视频并发送/接收消息时,有一个外键(userId)必须与他们创建的视频和消息记录相关联。例如,我有需要显示与每个视频关联的名字、中间名和姓氏的场景。现在假设在前端,用户正在滚动浏览上传到系统的视频列表,一次 50 个。在最坏的情况下,我可能会看到每个视频都与一个唯一用户相关联的情况下出现 50 的拉动。
似乎有两种方法可以解决这个问题:
第一,我对用户服务进行 api 调用,并让每个用户与列表中的每个视频相关联。这似乎效率低下,因为如果我为每个视频打一个电话,它可能会变得非常健谈。在第二个 api 调用场景中,我将获取视频列表并发送不同的用户外键列表进行查询,以使每个用户与每个视频相关联。这似乎更有效,但似乎我仍然失去了性能,将所有东西重新组合在一起以发送显示,或者需要对其进行操作。
二,每当创建一个新用户时,帐户服务都会向一个扇出队列发送一条包含每个其他服务所需的用户信息的消息,然后各个服务负责将新用户添加到它的表中自己的数据库,从而保持松散耦合。这里的极端缺点是数据重复,并且必须在需要进行更新以确保最终一致性时处理扇出队列。不过,从长远来看,从性能的角度来看,这种方法似乎是最有效的。
我在这两种方法之间犹豫不决,因为它们都有各自的权衡取舍。哪种方法最适合实施?为什么?
【问题讨论】:
标签: node.js mean-stack microservices