微服务和域逻辑连接

时间:2015-09-28 20:24:19

标签: join architecture microservices

部署微服务托管他们自己的数据库。

当业务需求需要跨多个服务中的数据加入时,您采用了哪些策略?

示例问题:您正在实施电影评论网站。你有一个电影微服务,持有电影数据库。您还有一个评论微服务,可以在自己独立的数据库中管理评论。评论通过GUID链接到电影;但由于这些是作为单独的数据存储实现的,而不是关键约束。

您希望在最后一分钟准确地提供一份报告,该报告会告诉您每个评论级别的评论总数,该评论级别按照评论字数>的电影的第一个字母分组。 25个字。您目前为40,000部电影主持了500万条评论。

E.G。评论超过25个字:

  • A [8457“1星”] [16615“2星”] [...
  • B [98445“1星”] [80210“2星”] [...
  • ...

为您的项目选择了微服务架构,您现在将采用哪些策略来实现此功能?

3 个答案:

答案 0 :(得分:2)

我想在这一点上,我会问自己,你正在尝试建立的域名究竟是什么。如果域名是严格渲染电影和电影评论,我的问题是为什么有两个单独的服务,电影和电影评论服务。

从本质上讲,我会将这两项服务合并为一项服务,并将其称为电影评论服务,因为对电影的评论都是值得关注的。在这种情况下,连接不再存在问题。

就个人而言,我认为真正要问的问题是电影服务是否应该存在以及它扮演的角色。在您的示例中,将其分解为单独的服务似乎是无关紧要的。虽然这可能不是一个令人满意的答案,但提供的示例在技术上有点过于简单,无法使微服务架构变得有价值,因为需要分离关注点的组件越来越少,真正将它们分解为多个服务。

如果示例足够复杂以保证微服务架构具有这两个单独的服务,那么电影评论服务和电影服务中的数据冗余只是为了完全非规范化。这个想法是服务应该尽可能地完全依赖自己,而不是向非常精细的服务发出多个请求,从而导致反模式 - 纳米服务架构。希望这有帮助!

答案 1 :(得分:1)

如果您需要通过电影标题的第一个字母检索评论,请输入名为"电影评论键"甚至是评论服务中的电影片名。

我必须学习非规范化在微服务中的生活方式。如果你试图严格规范你的服务,你最终会得到FAR太多的烦恼。很少变化的东西(比如电影名称)肯定会被复制到一个单独的商店。

答案 2 :(得分:1)

  

为您的项目选择了微服务架构,那是什么   您现在会采用哪些策略来实现此功能?

假设您将应用程序拆分为微服务是正确的,我会说,不需要加入。

在最终用户Web应用程序中,您将获得一个审核实体列表,通过查询Review微服务来满足报告条件。没有Movie个对象。只有他们的GUID。然后,您迭代收集Movie GUID的集合,并要求Movie微服务为您提供带有这些GUID的对象。

然后,您只需使用两个对象集合(例如,通过id键入)将报告呈现给用户。

这对你有用吗?