如何解决我可以在微服务架构中将一个数据库的表的副本保留在另一个数据库中吗?
我目前是微服务架构的新手,所以在此先感谢。
我有两个不同的服务,一个用户服务和一个Footballer服务,每个服务都有各自的数据库(User数据库和Footballer数据库)。 Footballer服务具有一个带有单个表的数据库,该表存储了Footballer信息。 用户服务具有一个数据库,该数据库存储用户详细信息以及其他与用户相关的数据。
现在,用户可以通过查询Footballer服务将足球运动员添加到他们的团队中,我需要将它们存储在某个地方以便以后显示。 当前,我将每个用户的足球运动员存储在用户数据库的表中,由此我调用足球运动员服务以按ID提供特定足球运动员的详细信息,并通过映射到USer ID将其保存在USer数据库中
这样做是一个好主意吗?它在任何两个机会之间都意味着要在两个服务之间复制数据 如果不是,我还能通过什么其他方式实现相同的功能?
解决方法
当前,我将每个用户的足球运动员存储在用户数据库中的表中,从而调用足球运动员服务以按ID提供特定足球运动员的详细信息,并通过映射将其保存在USer数据库中用户ID。
“缓存”是一种相当常见的模式。从用户微服务的角度来看,来自Footballer的数据只是您可以保存或不保存的另一个输入。如果要进行缓存,通常需要对缓存的数据进行某种时间戳/版本转换。
缓存标识符非常正常-我们经常需要某种correlation identifier才能在两个不同的地方连接数据。
如果您发现自己在用户域逻辑中使用了Footballer数据(也就是说,用户更改的方式取决于可用的Footballer数据)...则更可疑,可能表明您的边界绘制不正确/您的某些功能位置不正确。
如果您希望用户服务是自治的,也就是说,即使Footballer不在服务中也能够继续发挥其作用,则您的代码需要能够从数据的缓存副本中工作并可以暂停其工作的一部分,直到获得该数据的新副本为止。
,对于微服务,人们通常遵循DDD(域驱动设计): 因此,根据您的情况,这里有两个域,即2个服务:
- 用户
- 足球运动员
因此,用户服务仅应执行特定于用户的任务,而不必关心足球运动员的数据。
因此,根据DDD,与用户链接的足球运动员应存储在足球服务中。
在微服务架构中,复制ID不会被视为复制。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。