duplicates - 微服务之间的数据重复 - 解决 ONE 服务中的冗余
问题描述
服务 A 和 B 通过发布/订阅消息系统共享一小部分域数据。服务 B 只对服务 A 中域实体的一个属性感兴趣。服务 A 是该属性的“所有者”。在属性更改时,将特定事件数据集写入服务 A 中的事件表并发送到消息主题。
想法:为了避免数据重复(属性在实体和事件表中)将属性移动到事件表并提供一个小接口来从这里写入/读取属性。
优点:服务 A 的业务逻辑开发人员不再忘记发送更改事件,因为数据存储在一个地方。
你怎么看这个想法?
解决方案
简短的回答:不要这样做。
长答案:
思路:避免数据重复
重复数据和冗余数据之间存在差异。当您使用分布式系统和面向服务时,您这样做是因为您希望简化交互并减少组件之间的耦合。然而,这是有代价的。你的架构越分散,它的耦合就越少,需要的数据重复就越多。这在微服务中发挥到了极致,实际上相同的数据可能存在于许多不同的地方。
将此类数据重复视为错误的本能是正确的——这是我们在学习编程和构建软件时所学到的!允许这样的数据复制似乎在某种程度上违反了最佳实践。但是,使用微服务,数据复制是一件好事,是您系统的基本功能!它是一种建筑风格的推动者,具有许多巨大的好处。如果没有数据重复,您将获得更少的分布和更多的耦合,这会使您的系统构建、拥有和更改的成本更高。
所以要明确一点,我并不是说你的想法肯定是错误的——它可能是你的最佳解决方案,但我说的是不要基于避免数据重复来推动你的决策。
推荐阅读
- java - 为什么 StringBuffer 类使用 Array 作为底层数据结构而不是 LinkedList?
- c++ - 如何将我的 Angular 2+ 前端与用 C++ 编写的后端通信?
- python - 使用 cx_Freeze 从 Python3.6 脚本导入 pandas 构建可执行文件时出错
- java - Java 子类通过超类构造函数传递自身
- ios - CoreML 多输入/多分类器输出
- javascript - 无法让我的外部 JS 文件正常工作
- git - 致命的:不是 git 存储库:'
' - jquery - 显示和隐藏动作的单独缓动
- javascript - 单击按钮后如何显示来自mongodb的数据到reactjs?
- javascript - 管理 HTMLjQuery 的历史