微服务“ JOINS”

时间:2019-04-22 08:41:52

标签: microservices

假设我们要使用微服务创建应用。

我们有一个页面,其中显示一些项目(产品)。

这些产品具有多个联接(类别,标签,用户等)。

如果用户,类别数据在另一个服务中,我们如何管理和过滤结果?

例如,在SQL中,您创建并连接了3,4个连接。

使用微服务-我必须过滤类别,然后过滤标签,然后过滤产品-这可能比SQL查询的速度慢10倍。

如果我有一个表“ products_categories”,该表为每个产品负责的产品设置了类别?产品服务还是类别服务?

谢谢

4 个答案:

答案 0 :(得分:2)

在微服务架构中,有两种处理方法。

  1. API组合模式-这是最简单的方法,应尽可能使用。它的工作原理是使拥有数据的服务客户端负责调用服务并合并结果。

  2. 命令查询责任隔离(CQRS)模式-比API组合模式更强大,但也更复杂。它维护一个或多个视图数据库,其唯一目的是支持查询。

我将更喜欢使用CQRS,定义视图数据库,这是一个只读副本,专门支持该查询。其余服务将通过订阅(创建,更新,插入)数据所有者服务发布的事件来使副本保持最新状态。

答案 1 :(得分:1)

无论何时构建任何微服务,这都是一个非常标准的问题。人们总是觉得微服务是解决所有不正确问题的方法。

此问题的解决方案在设计上更好。设计时要在性能和数据冗余之间取得平衡。更高的性能(更低的延迟数)意味着跨微服务的不同数据库的数据重复性更高。您不应以实现与SQL Join一样好的性能为目标;但也不要重复太多数据。需要平衡。.

最重要的是,需要将需求划分为正确的微服务集。

答案 2 :(得分:0)

我假设您为每个数据库表创建了一个“微服务”。这些不是微服务,它们只是数据库的基于HTTP的CRUD接口。

首先,知道为什么需要微服务。 (是否有实际原因?)其次,您必须创建包含至少一个软件完整(业务)功能的微服务。意味着它不需要其他服务即可。

如果您需要一个需要来自多个微服务的数据的表,那么就定义而言,您所犯的错误是微服务。如果微服务在没有其他服务帮助的情况下无法提供其自己的UI,那么它就不会完全包含其自身的功能。

答案 3 :(得分:0)

是什么让您无法拥有多种服务来读取/写入同一数据库/表?例如:

  • 一项服务可写入categories
  • 一项服务可写入tags
  • 一项服务可写入products

然后,您可以编写另一个服务来从所有这三个服务中读取,但是,这可能不是在HTTP级别,而是可以从database服务中的同一read进行读取,并且利用SQL的力量。

读取的服务可以包含您的join逻辑,这意味着您不需要使用周围的其他服务。