数据一致性检测的应用场景与实践

数据一致性检测的应用场景与实践

随着业务规模的扩大,企业系统变得越来越复杂。在这种复杂的分布式系统架构下,出现了远程调用失败、消息发送失败、并发错误等问题。将不可避免地发生。

这些问题最终会导致系统之间的数据不一致,从而导致用户体验受损、用户兴趣受损以及平台资本损失。因此,如何持续保证系统的业务稳定性是企业非常重要的课题。本文旨在介绍一些常见业务应用场景下确保业务数据一致性的最佳实践。

离线or在线,事前or事后

处理业务数据不一致问题的正常操作是配置定时任务,在每个固定时间点提取一段时间的历史数据进行比较,判断是否有数据故障。例如,hadoop用于执行批量MapReduce操作。这种离线计算方法时效性差。对于电子商务系统或实时性要求高的系统,问题发现得越晚,损失就越大。因此,我们需要一种在线验证模式来实时发现数据不一致的问题。

在线验证模式指的是每次出现数据时的比较。这种比较模式也可以分为比较前和比较后。

这里有一个冗长的句子。有些人可能会阅读它并问,由于检查是在业务活动发生后进行的,它有多重要?诚然,与之前的验证相比,他无法保证每个数据都是正确的,但是在实际操作中,在电子商务这样的场景中,我们通过日常环境-高级环境-测试-在线环境的过程来执行业务功能迭代,特别是在高级环境和测试的情况下,我们通常会执行一些在线排水或模拟数据测试,其特点是量小。即使出现问题,也只是局部的,不会造成灾难。

在这种情况下,事件后验证的意义非常重大。它可以预先验证函数和数据的正确性,而不会对线路造成强耦合效应。该功能完全在线后,事件后验证的功能是及时发现不一致的数据,以避免问题的进一步扩散。

总之,对于业务数据验证的及时性不高、开发和访问成本较低的场景,离线验证是更合适的方法。对于对业务数据验证的及时性有一些要求的场景,事后验证是更合适的方法。对于业务验证的及时性非常格并且可以投入更多资源的场景,事前验证更合适。

数据一致性检测实践案例

处理业务数据不一致问题的正常操作是配置定时任务,在每个固定时间点提取一段时间的历史数据进行比较,判断是否有数据故障。例如,hadoop用于执行批量MapReduce操作。

这种离线计算方法时效性差。对于电子商务系统或实时性要求高的系统,问题发现得越晚,损失就越大。因此,我们需要一种在线验证模式来实时发现数据不一致的问题。

商店会员业务,会员退库操作应结合商店系统、标识系统和会员系统进行,如下图:

数据一致性检测的应用场景与实践

在这个业务场景中,买方在商店会员页面上启动一个会员应用程序,并成功地向外部发送一个会员元q消息。下游业务系统根据元数据信息给用户标记标签,用户在下单时根据标签判断自己是否有权先购买。既然有会员,就会有退出。撤回还将向用户发出取消投标的元报价信息。

因此,无论会员资格或退出,企业都要求商店系统的会员资格状态(会员资格或退出)必须与用户系统的标签状态(是或否)一致。一旦发现数据不一致,如果已经商店的用户仍然拥有用户的会员标签,用户可以购买受限商品,这将导致商业资本的损失。因此,必须有对账业务来确保数据的一致性。一旦发现数据不一致,必须通知相关人员检查数据。如有问题,应修改数据。

这种情况对对账系统的选择有以下要求:

实时:必须在同一天尽快处理。Can报警必须支持不同的域模型。接口调用需要一些延迟,以便下游系统可以在处理完所有进程后进行检查。由于加入或离开俱乐部时,metaq可能会丢失或出现故障,因此无法根据此消息进行协调。

在这种业务场景中,我们可以看到业务是异步的,会员系统不能在发起会员操作后立即对用户系统进行标记,因此实时预验证不适合这种场景,因为当会员系统发起会员操作时,在用户系统中找不到标记状态,需要延迟一段时间,所以只能通过后验证来完成。

我们在这个场景中的方法是:从存储成员数据库中提取实时binlog日志数据,并将其提供给验证系统。验证系统对日志数据进行分析,得到待标记会员的id,经过一段时间的延迟后,进入会员系统查询会员的会员状态,并与日志中的状态进行一致性比较。如果发现任何不一致,将发出警报。

案例二、新老库迁移

当新老系统需要更换时,通常会涉及数据迁移。因为数据量非常大,不允许停机,所以迁移必须是一个逐步的过程。整个过程分为两个部分。第一部分是双重写入,以确保新添加数据的两侧同步。

第二步是开始迁移股票数据,并缓慢地完成后台任务。在此过程中,一些字段可能不同步,更新数据可能不正常,导致数据内容不一致。因此,有必要对迁移进行数据一致性检查,并及时发现数据问题进行修订或缺陷修复。

由于我们的目的是将数据迁移到新系统,数据验证的触发条件是新系统已经写入数据。这里的一些人可能会问,如果旧系统的同步失败,那么新系统将不会写入数据,也不会触发验证。

这里有一个检查边界的问题,也就是说,我们假设同步系统将成功同步。如果同步失败,不允许跳过,并且将一直尝试同步。因此,如果同步失败,同步将暂停,并将打印同步错误日志。这不是检查系统的问题。我们将通过同步进程或同步日志来观察这种现象。

数据一致性检测的应用场景与实践

所以我们在这个场景中的方法是:来接收新库的数据库更改的binlog日志数据,分析日志内容,并通过这个数据id查询旧库的相应数据来比较数据内容。

由于双重写入的存在,一段数据可能会发生多次变化。这要求我们的核查必须实时进行。否则,获得的日志数据的内容似乎是旧的(该数据已被再次更新),导致旧数据库中的数据查询不一致。事实上,这是一场虚惊。

极牛网精选文章《数据一致性检测的应用场景与实践》文中所述为作者独立观点,不代表极牛网立场。如若转载请注明出处:https://geeknb.com/3474.html

(36)
打赏 微信公众号 微信公众号 微信小程序 微信小程序
主编的头像主编认证作者
上一篇 2019年11月21日 上午9:54
下一篇 2019年11月21日 上午10:25

相关推荐

发表回复

登录后才能评论
扫码关注
扫码关注
分享本页
返回顶部