【发布时间】:2019-09-14 17:49:39
【问题描述】:
考虑以下情况:
- 有一个 User 表,其中包含姓名、电子邮件、contact_no 等字段。
- 我们有多个产品/系统(带有自己的数据库),它们将用户信息用于各种目的。
- 这些系统通过发布-订阅模式保持同步,例如:系统 1 更改名称由系统 2 使用并在系统 2 中进行更改。
- 为简单起见,我们假设有 3 个系统:
- S1 为用户提供 UI。在这里用户可以自己更改他的信息。
- 给销售人员的 S2 系统。用户可以在此处致电销售人员并更新他们的信息。
- S3 另一种产品,它使用来自 S1 和 S2 的信息进行各种计算。
所以信息可以从 S1 和 S2 发布。
假设用户最初的名字是 N1。
- 在时间 t1,用户将名称从 N1 更新为 N2。
在时间 t1,销售人员将姓名从 N1 更新为 N3。
现在 S1 使用来自 S3 的事件并将名称更新为 N3。 S2 使用来自 S1 的事件并将名称更新为 N2。
在 S3 中,名称可以是任何 N2 或 N3,具体取决于首先使用哪个事件。
这造成了各个系统之间的大量数据一致性。
在理想的系统中只有一个发布者,但由于要求我们必须从销售面板添加发布事件。可以做些什么来最大程度地减少数据不一致?
【问题讨论】:
-
S3 是发布者还是消费者,还是两者兼而有之?声明“信息可以从 S1 和 S2 发布”似乎与“S1 从 S3 消费事件”相冲突。
标签: design-patterns architecture publish-subscribe software-design distributed-system