微服务:如何有效地处理微服务之间的数据依赖关系

时间:2017-06-07 18:47:49

标签: node.js mean-stack microservices

我正在开发一个利用微服务开发方法和平均堆栈的应用程序。我遇到了需要在多个微服务之间共享数据的情况。例如,假设我有用户,视频,消息(发送/接收,收件箱等)服务。现在视频和消息记录属于帐户记录。当用户创建视频和发送/接收消息时,存在必须与他们创建的视频和消息记录相关联的外键(userId)。我有一些场景,我需要显示与每个视频相关的第一个,中间和最后一个名称。现在让我们在前端说出用户正在滚动浏览上传到系统的视频列表,一次50个。在最糟糕的情况下,我可以看到一种情况,即每个视频与唯一用户绑定时会出现50的拉动。

这个问题似乎有两种方法:

一,我对用户服务进行api调用,并将每个用户绑定到列表中的每个视频。这似乎效率低下,因为如果我为每个视频拨打一个电话,它可能会非常繁琐。在api呼叫场景的第二个中,我将获得视频列表并发送用户外键的不同列表以进行查询以使每个用户与每个视频绑定。这似乎更有效,但似乎我失去了性能,把所有东西重新组合在一起发送出去,或者它需要被操纵。

二,每当创建一个新用户时,帐户服务就会将一个消息与每个其他服务所需的用户信息一起发送到一个扇出队列,然后由各个服务负责将新用户添加到其中的一个表中。 #39;自己的数据库因此保持松耦合。这里的极端缺点是数据重复,并且需要在需要进行更新时处理扇出队列以确保最终的一致性。虽然从长远来看,这种方法似乎从性能角度来看是最有效的。

我在这两种方法之间徘徊,因为他们都有自己的权衡。哪种方法最有意义实施?为什么?

2 个答案:

答案 0 :(得分:1)

不要将您的设计决定限制在您概述的那两个选项中。微服务最难的事情就是了解服务是什么以及如何将应用程序切割成有意义的块/服务,以实现“微服务”。

仅仅因为您拥有这3个实体(用户,视频和消息)并不意味着您必须实施3项服务。如果您的实际用例显示这些服务(或实体)相互依赖,以满足来自前端的简单请求,那么这是一个明确的信号,表明您的切割不正确。

从我的示例中我看到,我设计了1个满足请求的微服务。请记住,微服务的设计基础之一是尽可能独立。 没有必要过度复杂的服务,它不是SOA。

https://martinfowler.com/articles/microservices.html - >好读!

此致 拉斯

答案 1 :(得分:1)

我也对这个问题感兴趣。

首先,您描述的场景很常见。用户,视频和消息肯定是三种不同的微服务。如何将系统分解成碎片没有问题。

其次,有多种选择,如何解决数据共享问题。看看来自auth0的精彩文章:https://auth0.com/blog/introduction-to-microservices-part-4-dependencies/

相关问题