首页 > 解决方案 > 微服务之间的数据重复 - 解决 ONE 服务中的冗余

问题描述

服务 A 和 B 通过发布/订阅消息系统共享一小部分域数据。服务 B 只对服务 A 中域实体的一个属性感兴趣。服务 A 是该属性的“所有者”。在属性更改时,将特定事件数据集写入服务 A 中的事件表并发送到消息主题。

想法:为了避免数据重复(属性在实体和事件表中)将属性移动到事件表并提供一个小接口来从这里写入/读取属性。

优点:服务 A 的业务逻辑开发人员不再忘记发送更改事件,因为数据存储在一个地方。

你怎么看这个想法?

标签: duplicatesmicroservices

解决方案


简短的回答:不要这样做。

长答案:

思路:避免数据重复

重复数据和冗余数据之间存在差异。当您使用分布式系统和面向服务时,您这样做是因为您希望简化交互并减少组件之间的耦合。然而,这是有代价的。你的架构越分散,它的耦合就越少,需要的数据重复就越多。这在微服务中发挥到了极致,实际上相同的数据可能存在于许多不同的地方。

将此类数据重复视为错误的本能是正确的——这是我们在学习编程和构建软件时所学到的!允许这样的数据复制似乎在某种程度上违反了最佳实践。但是,使用微服务,数据复制是一件好事,是您系统的基本功能!它是一种建筑风格的推动者,具有许多巨大的好处。如果没有数据重复,您将获得更少的分布和更多的耦合,这会使您的系统构建、拥有和更改的成本更高。

所以要明确一点,我并不是说你的想法肯定是错误的——它可能是你的最佳解决方案,但我说的是不要基于避免数据重复来推动你的决策。


推荐阅读