服务A和B通过发布/订阅消息传递系统共享域数据的一小部分。服务B仅对服务A中域实体的一个属性感兴趣。服务A是此属性的“所有者”。在属性更改时,特定的事件数据集将写入服务A中的事件表,并发送到消息主题。
想法:为避免数据重复(属性位于实体AND事件表中),请将属性移至事件表,并提供一个小接口以从此处写入/读取属性。
优势:服务A的业务逻辑开发人员不再忘记发送更改事件,因为数据存储在一个地方。
您如何看待这个想法?
答案 0 :(得分:0)
简短的回答:不要这样做。
长答案:
想法:为避免数据重复
重复数据和冗余数据之间存在差异。在使用分布式系统和面向服务的方法时,您这样做是因为要简化交互并减少组件之间的耦合。但是,这是有代价的。您的体系结构越分散,耦合越少,就需要更多的数据重复。对于微服务来说,这是极端的,在微服务中,实际上有效的数据可能存在于许多不同的地方。
将这种重复数据视为错误的本能是正确的-这是我们在学习编程和构建软件时所学的知识!允许这样的数据复制似乎在某种程度上不利于最佳实践。 但是,对于微服务而言,重复数据是一件好事,这是系统的基本功能!它是具有许多巨大好处的建筑风格的促成因素。如果没有数据重复,您将获得更少的分发和更多的耦合,这将使您的系统构建,拥有和更改的成本更高。
因此,要明确地说,我并不是说您的想法肯定是错误的-这可能是您的最佳解决方案,但我是说不要基于避免数据重复来推动您的决策。