请考虑以下情况:
因此可以从S1和S2发布信息。
假设用户最初的名称为N1。
在时间t1,销售人员将姓名从N1更新为N3。
现在,S1使用来自S3的事件,并将名称更新为N3。 S2消耗来自S1的事件,并将名称更新为N2。
在S3中,名称可以是N2或N3,取决于首先消耗哪个事件。
这导致了各个系统之间的大量数据一致性。
在理想的系统中,只有一个发布者,但是由于要求,我们不得不从“销售”面板中添加发布事件。可以采取什么措施来最大程度地减少数据不一致性?
答案 0 :(得分:2)
问题似乎出在确定谁是用户数据的主控者,因为目前S3试图服务于两个主控者。
S1 --> S3
S2 --> S3
让S1成为用户数据的主数据,以便其他任何接受该数据的系统(例如S2)仅负责更新主数据。这样S3可以从单一来源(用户数据的主数据)获取用户数据。
S1 --> S3
S2 --> S1 --> S3
主服务器负责使用和产生其拥有的数据。另一个系统可能会使用(甚至存储)相同的数据,但它们只能产生给主服务器。除了该数据的主数据外,任何系统都无法生成该数据不属于任何其他系统。
哪个系统是主系统并不重要,只要只有一个系统即可。只要有一个主服务器,存储多少数据副本的系统实际上并不重要。每个系统拥有一种类型的数据可能比单个系统拥有所有数据更具可伸缩性。
答案 1 :(得分:1)
让我再改一下。
在这种情况下,我将使用Master DB / System,它将成为每个系统的单点数据源。
如果任何系统要更改数据,则数据1st需要在Master Db /系统上进行更新,则该数据应传播到其他系统以反映更改。
对于Pub-Sub,我将采用扇入和扇出方法。
通过这种方式,您可以实现系统之间的数据一致性。您唯一需要注意的就是此过程中的延迟,如果任何系统出现故障,都可能会发生。
希望我能回答您的查询。
答案 2 :(得分:0)
维护一张表以跟踪所有最新更新(最新的一天更新)。假设最终可以在几分钟之内通过pub / sub系统将所有更新传播到所有其他系统。
在更新条目之前(所有字段,例如姓名,电子邮件和联系电话),所有系统都应联系该主要来源
如果该主源表中已经存在一个条目,则需要验证 这是最新的。如果他们是较新的条目,则需要提醒用户 同一记录最近发生了一些更新,您仍然 要更新它。
如果没有条目,则可以轻松地使用新的 数据并将一个条目插入这些主源表中。
每当任何系统通过pub-sub处理更新时,只有在同一记录没有新的更新发生时,它才应该更新。