Microservices “微服务”;加入;

Microservices “微服务”;加入;,microservices,Microservices,假设我们想用微服务创建应用程序 我们有一些页面显示一些项目(产品) 这些产品具有多个联接(类别、标记、用户等) 如果用户、类别和数据位于其他服务中,我们如何管理和过滤结果 例如,在SQL中,您创建3,4个联接并获取 使用微服务——我必须过滤类别,然后过滤标签,然后过滤产品——这可能比SQL查询的速度慢10倍 另外,如果我有“products\u categories”表,该表为每个产品设置了类别,由哪个服务负责?产品服务还是分类服务 谢谢无论何时构建任何微服务,这都是一个非常标准的问题。。人们总

假设我们想用微服务创建应用程序

我们有一些页面显示一些项目(产品)

这些产品具有多个联接(类别、标记、用户等)

如果用户、类别和数据位于其他服务中,我们如何管理和过滤结果

例如,在SQL中,您创建3,4个联接并获取

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

另外,如果我有“products\u categories”表,该表为每个产品设置了类别,由哪个服务负责?产品服务还是分类服务


谢谢

无论何时构建任何微服务,这都是一个非常标准的问题。。人们总是觉得微服务可以解决一切不真实的问题

解决这个问题的办法是设计得更好。进行设计,以便在性能和数据冗余之间取得平衡。更高的性能(更低的延迟数)意味着微服务的不同数据库之间的数据更加重复。您不应该以实现与SQL连接一样好的性能为目标;但也不要重复太多的数据。需要平衡

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

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

首先,了解您为什么需要微服务。(有实际原因吗?)其次,您必须为您的软件创建包含至少一个完整(业务)功能的微服务。这意味着它不需要其他服务来完成


如果您需要一个需要来自多个微服务的数据的表,那么根据定义,您创建了错误的微服务。如果一个微服务在没有其他服务的帮助下无法提供自己的UI,那么它就不能完全包含自己的功能。

是什么阻止了您使用多个服务来读取/写入同一个数据库/表?例如:

  • 一个要写入
    类别的服务
  • 一个要写入标签的服务
  • 一种写入
    产品的服务
然后,您可以编写另一个服务来读取所有这三个服务,但是,这可能不是HTTP级别的,相反,您可以从
read
服务中的同一
数据库中读取,并利用
SQL
的功能


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

在微服务体系结构中,有两种方法来处理它

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

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


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

    根据定义,每个服务都应该有单独的数据库,他们说,如果不是,那就不是真正的微服务。谁定义了这一点?为什么每个微服务都应该有单独的数据库?我曾经研究过在SOA中与同一个数据库通信的系统。。如果两个微服务访问同一个数据库,它实际上不是一个“微服务”,而是不同的模块或类似的模块。它没有封装在服务中。谢谢分享。我在任何地方都看不到这句话,尽管建议使用多个数据存储。与使用SQL不同,您是否考虑过将数据扁平化并使用Elasticsearch或Solr之类的工具存储数据?您也不需要每个服务都使用一个数据库。您可以在每个服务维护的一个数据库中有多个表。这是我的观点,我同意,但这意味着整个数据库应该是一个服务,因为任何表都可能依赖于其他表。因此,如果付款取决于用户、产品、类别,我将如何创建PaymentsService。正如您所指出的,您现在拥有的数据库(产品、用户等)实际上无法拆分。你也必须重新设计你的数据。网上商店的一个典型分类是“搜索”服务,例如,一个产品的所有文本和图像都是“搜索”服务。“订购”,即SKU、价格等存在的地方。一种“物流”,其中包含所有用户地址等。基本上,您也必须拆分“单片”数据表。显然,这在很大程度上取决于您的用例,所以我不知道什么适合您的项目。