我有一个关于分解为微服务的问题。假设我们有 2 个微服务:用户和产品。假设我们现在需要向系统添加类别。更具体地说,产品具有一个或多个类别(例如,产品红色微型法拉利属于玩具和汽车类别),并且用户可以具有她喜欢的类别(例如玩具和鞋子)。现在,当我们检索产品的完整列表时,我们希望对它们进行排序,以便属于首选用户类别的产品位于顶部。
基本上有一个在微服务之间共享的概念(在本例中为类别)。如何在微架构环境中对此进行最佳建模?我看到两种解决方案:
解决方案1:
解决方案2:
>
创建一个单独的“类别”微服务来管理类别的 CRUD
类别服务还具有 API 调用,用于将产品 ID 链接到类别
类别服务还具有将用户 ID 链接到类别的 API 调用
在产品服务中,我们有一个API调用来获取按偏好排序的产品(为了完成此工作,产品服务需要调用类别服务来获取用户和产品类别(或侦听事件)
两种解决方案的优点/缺点是什么?
好吧,解决方案2已经出来了,因为你将在不同的服务中使用类别来处理很多事情,如果让类别服务在所有这些不同的领域中实现搜索,就会破坏关注点的分离。
此外,实际的产品或用户搜索可以包括类别以外的其他条件。让所有这些不同条件的服务实现自己的产品搜索通常不是一个好的实现,因为在多条件搜索中合并结果的成本可能很高,因此这种在定义条件对象的服务中实现搜索的模式无法缩放。
解决方案1很接近,但是没有理由让产品服务知道或调用用户服务。产品服务应该有一个使用各种标准搜索产品的API,包括类别。通过让客户端传递类别ID列表而不是用户ID来实现类别搜索可能会更好。那么它就不必调用用户服务本身,你保持产品和用户服务的独立性。此外,按类别搜索产品对其他事情也很有用(比如浏览产品!),并且因为您没有将类别搜索与用户绑定,所以您可以使用相同的API来处理其他情况。
我会说你应该有一个更复杂的服务和三个简单的服务。你的品类服务应该只是品类的CRUD而已,你的用户服务对用户应该是CRUD的,你的产品应该比较复杂,叫它产品列表服务,然后还是有一个简单的产品服务。
您的产品列表服务应该具有所有的复杂性,但可能是非规范化的。
GET/POST/PUT/DELETE /product
GET/POST/PUT/DELETE /category
GET/POST/PUT/DELETE /user
POST/PUT /productlisting/usercategory/<userid> <list of categories>
POST/PUT /productlisting/productcategory/<productid> <list of categories>
GET /productlisting
要么这样,要么把它们组合成一个整体...它们不是独立的问题,从长远来看,通过ID耦合它们只会让你难过,因为你的耦合会很脆弱。我从不让一个服务知道另一个服务的实体ID。这种关系约束在分布式系统中只是自找麻烦。
第三个备选解决方案是不要让微服务只是表格。将具有CRUD功能的“东西”放在单独的服务中的问题是,大多数时候,它们会有很多交叉依赖。这就是你现在的问题。
您可以创建与功能而不是数据一致的服务。创建“搜索”服务、“购物车”服务、“计费”服务等。所有这些通常都需要同一“事物”(如产品)的不同方面。例如,我可以想象类别仅与“搜索”相关,但与其他两个无关。
一些人已经在这里写过这种方法,名为自容系统。
我读了一些文章,看了一些视频,但在为这些微服务提供服务方面,没有找到具体的建议。我的理解是,他们应该使用自己的应用程序服务器。 我的问题是它们应该部署在不同的服务器上,还是没关系。 当它们在同一台服务器(计算机)上提供服务时,不会有端口冲突吗?
本文向大家介绍详解Java 微服务架构,包括了详解Java 微服务架构的使用技巧和注意事项,需要的朋友参考一下 一、传统的整体式架构 传统的整体式架构都是模块化的设计逻辑,如展示(Views)、应用程序逻辑(Controller)、业务逻辑(Service)和数据访问对象(Dao),程序在编写完成后被打包部署为一个具体的应用。如图所示: 系统的水平扩展 如果要对系统进行水平扩展,通常情况下,只需要
我有几个微服务,每个微服务都有用于CRUD操作的RESTendpoint。我必须创建一个工作流,该工作流将从一个带有一些初始输入的微服务开始,但一个微服务的稍后输出可以用作其他微服务的输入。可以对这些REST API进行一些同步和异步调用。 我已经寻找了一些工作流引擎,但我不认为我可以在不编写任何java代码的情况下创建我的工作流。
创建一个单独的服务来管理数据(如用户管理),这是一个好的实践吗?实现之后,只有该服务将有权访问用户和其他相关的DB表。所有其他服务都必须调用这个新的用户微服务来执行与用户相关的任务。 这种方法将迫使我们通过添加反规范化来重构DB模式。我们不会得到在多个微服务之间提供的基础表。如果服务器服务需要数据,它将通过微服务共享。
我是测微计新手。有人能告诉我如何在spring boot中集中管理微服务指标吗? 在哪里可以获得influxdb中所有注册的服务信息、矩阵和存储的度量?
我有两个微服务和调用来更新数据,然后插入另一个数据,但让我们考虑一下 失败,然后我们需要回滚由 更新的数据,否则我们将处于不一致的状态。 我也经历了佐贺patterns.will它满足了这种矛盾 谁能为此提出更好的解决方案?