Database design 如何在微服务中处理公共数据
我试图找出一个关于微服务架构的一般理解问题 例如,如果我有三项服务:Database design 如何在微服务中处理公共数据,database-design,service,architecture,microservices,Database Design,Service,Architecture,Microservices,我试图找出一个关于微服务架构的一般理解问题 例如,如果我有三项服务: 订单服务 产品服务 用户服务 并且每个服务数据都需要连接到用户。那么哪个用户添加了产品,哪个用户订购了东西等等 所以我需要说“嘿,订单服务,给我一个特定用户的所有订单”。这意味着在订单服务数据库中会有一列“用户ID”,对吗?但那只是一个与用户服务数据库中的用户数据无关的列,对吗?这样做吗 因此,如果用户被删除,可能需要询问订单服务是否仍有用户id为etx的订单 所以问题是,是否有用户id的列根本没有连接到用户表,所以没有外
- 订单服务
- 产品服务
- 用户服务
非常感谢 微服务的理念是,你应该将它们视为单独的服务,它们很小——“微”。这在设计上意味着(逻辑上)独立的数据库。实际上,您可能会使用相同的数据库(例如,更简单,节省成本),但您会将表分开-服务之间没有外键。您还可以避免在同一个DB事务中接触来自多个微服务的表 注意:这与NoSQL数据库类似-即使您使用相同的数据库,也要保持数据在逻辑上至少是分开的 这意味着始终存在“最终一致性”——一个对象不能在多个微服务中同时删除,始终存在延迟 以下是处理此类用户和订单服务的一种方法:
在本例中,Order表可能有类似于“user_id”列的内容,该列将映射到用户表中的用户id。但即使Order表(来自Order microservice)和User表(来自User microservice)使用相同的DB实例,它也不会被设置为外键。只是快速阅读了一下,据我所知,共享同一数据库不会违反微服务体系结构,只要每个微服务拥有的数据是该数据库的私有数据。接下来,我相信需要某种形式的外键来将信息绑定到用户。在继续向订单服务请求与该特定密钥匹配的订单之前,该密钥可能必须由用户服务获取。请记住,我还没有开发微服务,所以这只是我对这个主题的初步理解。非常感谢,这正是对我想法的确认!