首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何与微服务体系结构保持关系的完整性

如何与微服务体系结构保持关系的完整性
EN

Software Engineering用户
提问于 2018-11-10 03:01:11
回答 3查看 6.2K关注 0票数 6

目前,当我构建应用程序时,我将它们构建为一个大型的单块应用程序,这样所有东西都驻留在一个编译好的程序集中,数据驻留在一个SQL数据库中(使用了redis/elasticsearch作为支持)。就我的目的而言,这是比较好的工作方式,但我想转向设计微服务架构。然而,当您的服务/数据库分布在多个服务器上时,我很难理解如何维护任何关系完整性。

观察以下图表:

在本例中,标识服务与订购服务是分开的。显然,Identity Microservice需要从数据库中获取用户数据,内容包括名字、姓氏、密码、角色/声明等。

显然,系统的其他部分与用户有关系。例如,每个订单都可能与下订单的用户绑定。在传统的SQL数据库中,只需有一个外键来保持关系的完整性。使用上面的图表,"Ordering“看起来完全独立于用户数据库。在这种体系结构中如何维护关系完整性?订购服务是否只是用用户的ID插入“订单”记录,而没有在任何地方保持任何关系?如果该用户随后被从系统中删除,会发生什么情况。在这个特定的示例中,您可能仍然希望维护订单数据,但是在删除用户时,需要删除与该用户相关的数据。在一个微服务体系结构中,这一切似乎都是手工完成的,有很大的出错空间。

EN

回答 3

Software Engineering用户

发布于 2018-11-10 09:08:35

订购服务是否只是用用户的ID插入“订单”记录,而没有在任何地方保持任何关系?

是的

这里要记住的是,尽管这些服务被称为“微”,但它们往往是相当大的。您将有大量紧密耦合的对象,例如地址或它们中的任何内容。

任何系统都会选择一个范围,上面写着“好吧,我不关心100年前的客户家谱,也不在乎他们开的是哪种类型的车”。

Microservice体系结构要求您考虑整个系统可能不是单个范围。

当您习惯于编写单点或大型关系数据库时,立即的想法是“但我需要客户和订单之间的引用完整性!”但现实往往是你没有。

你可以想象出一整吨与维护客户/客户系统相关的逻辑,而这实际上与你的系统是一个电子商务网站、一个留言板、还是一个税务系统或其他任何东西都没有关系。

您希望能够在系统的该部分添加功能,而不必考虑购买商品或填写纳税申报表。

因此,在其他系统中,用户id的松散耦合是很好的,当然,在删除或丢失用户信息时,您需要小心。维护审计跟踪或复制关键字段(如名称和地址)到其他系统,如果这样做是明智的,例如在已完成的订单上,需要一个送货标签。

票数 8
EN

Software Engineering用户

发布于 2018-11-10 05:37:41

您使用API:s和松散耦合的微服务。实际上,这意味着您的服务之间的休息通信。如果一个实体在一个微服务中被添加、删除、编辑或还原,而这会影响到其他微服务中的数据,则可以让第一个服务通过http发出REST请求,该请求可能使用http头中的令牌进行身份验证,而该请求使第二个服务更新其底层数据,而不管其结构如何,这样它才能保持其有效性。

票数 0
EN

Software Engineering用户

发布于 2018-11-10 17:21:54

我认为您应该有一个入口点组件(可能,eshop webapp MVC)到您的miscroservices的生态系统中,它将扮演协调器的角色,当然,您的微服务可能会在http上进行协作,但是对于写操作,这种请求应该通过一个条目,而执行器必须确保用户的操作顺序(通过队列和操作状态),否则,当用户删除订单时(仅举一个例子),您可能会遇到问题,这就是为什么您必须保持这样的操作顺序才能获得身份。

您还可以将体系结构转换为事件驱动的体系结构,这也可以确保操作的顺序。

票数 0
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/381279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档