Claws Garden

两表的最终一致性检验

问题描述

最近在公司中遇到一个项目,要求我们把一个数据预计算逻辑迁移到新平台,保持业务逻辑不变。其中很重要的一步就是在使用新平台对原有逻辑进行重构后,要验证新的应用能够和原来的表可以生成一样的数据,确保迁移后不会影响上层的其他业务,才能进行后续的流量切换。这里的“一样”,不能简单地通过两个表的直接联结对比来实现,这是因为两个表的数据更新都只遵循最终一致性,也就是可以容忍短时间内的不一致现象。直接比较得到的difference并不一定就是真正的区别,而有可能是由于更新延迟造成的。

问题分析

可以将更新数据按照更新的时间分两部分看待:

每次比较只比较了当前时间上更新数据的快照,如果需要增强对“两个表数据一直能够保持一致”的观点的信息,则需要多次采样比较。最简单的就是采用固定的时间间隔,比如每个小时比较一次。

解决方案

在数据更新时,将两个表中的更新数据发送到队列,并通过简单的逻辑处理后写入比较专用的数据库或数据仓库中。对每个表都记录两个表中对应键更新的最后时间。

每一小时对一致性进行一次比较,比较已稳定的数据。选取两个表最后更新时间都在10分钟(这是最终一致性的容忍延迟时间)前的键,就可以过滤出稳定的数据。为了避免重复比较,可以在比较相等后,删除已经验证的记录。

持续比较一段时间(2周),就可以以较高的信心确认两个表数据的最终一致性。

#数据