dbaplus社群 01月06日
小红书MySQL数据一致性校验能力探索与实践
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文介绍了小红书如何结合自身业务实践并落地数据一致性校验,以及该校验在小红书内部带来的实际收益。文章详细阐述了数据一致性校验的背景、应具备的能力,以及在小红书内部的实现方案。小红书自研的数据校验系统,通过全量和增量校验方式,有效解决了数据迁移、数据同步等场景下数据不一致的问题。该系统具备适应数据动态变化、无锁不停服校验、快速定位不一致内容等特性,为小红书内部业务提供了可靠的数据一致性保障。

💡 **数据一致性校验背景与挑战**:在数据迁移、同步和多数据中心部署等场景中,数据一致性至关重要,但同步链路中的误写、延迟等因素可能导致数据不一致。小红书的数据一致性校验工具需要应对数据量和内容变化、无锁不停服校验、数据库性能影响、适配不同数据源以及数据分布不均等挑战。

🛠️ **小红书数据校验方案实现**:小红书的数据一致性校验工具支持全量和增量校验,并根据数据源类型、表结构和数据分布等因素自动选择最佳校验方式。全量校验采用分块抽样校验法,分为同构和异构校验,同构校验使用checksum,异构校验逐行对比。增量校验则基于binlog驱动,实时监控数据变更。

🚀 **校验工具的核心组件与特性**:该工具包含读取端(Reader)、处理端(Processor)和写入端(Writer)组件,实现了业务逻辑的解耦。它具备动态数据变化适应性、无中断无锁校验、校验参数动态可配置、快速定位不一致内容和支持自定义列校验等特性,并通过分块校验和复检机制提高了校验效率和准确性。

🎯 **数据校验的实际应用与收益**:小红书的MySQL数据一致性校验工具在数据库迁移、单元化等重要场景中得到应用,为内部业务提供了数据一致性保障。该工具通过全量和增量校验,有效地解决了数据不一致问题,提升了数据质量。

🔮 **未来展望**:小红书计划在未来继续深化数据一致性校验工具的功能,简化操作流程,提升用户体验。同时,扩展其应用范围至数据入湖入仓、数据变更订阅等场景,并完善数据修复功能和数据质量大盘。

等你加入的 2025-01-06 07:16 广东

已经在数据库迁移、单元化等重要场景得到了很好的应用,为小红书内部业务提供了数据一致性保障。




本文主要介绍数据一致性校验如何结合小红书的业务进行实践并落地,以及数据一致性校验在小红书内部拿到的实际收益。




一、背景


1.1 什么是数据一致性校验


在数据迁移、数据同步以及多数据中心部署等场景中,数据的一致性要求极为严格。然而冗长的同步计算链路产生的误写或丢失、主从复制延迟产生的脏读,业务双写、人为误操作产生的脏数据等众多因素,都可能导致数据不一致。


通过建设数据一致性校验能力,能够及时、准确的发现并解决数据不一致问题,有效降低对业务的影响。


1.2 数据一致性校验应具备的能力


在小红书内部,数据传输服务每天服务着众多的业务,保障着众多的数据同步任务,在数据同步过程中,源端和目标端的数据一致性需要严格保证,否则将会产生业务损伤。同时,在面对不同的业务场景下,数据一致性校验工具能够进行无损且快速的数据校验。因此,针对数据一致性校验工具我们需要面对以下难点:









二、现状分析


随着小红书公司业务的不断发展,原先的MySQL集群容量已经无法满足业务的发展,因此需要对原先的MySQL集群进行扩容等操作,以满足业务不断增长的需求。数据迁移一般需要将全部数据从源端迁移到目标数据源上,迁移通常是一次性的,迁移之后链路即停止。常见的场景有:


集群扩缩容,当预期流量增长或者资源达到瓶颈,对整个数据库集群分片扩容,以减轻各个分片的压力,同理预期流量下降或者资源利用率偏低时,要对集群缩容,避免资源浪费。


库表迁移,由于容量或者业务逻辑变动,将数据库集群上的部分库或表迁出,到新的集群中,或者分表规则变更(分表键,分表数,分表规则变更)都需要将原有数据同步一份至新表中。


异构数据源迁移,比如技术升级或者存储介质变更,需要将历史数据同步至新的数据源。



在数据迁移过程中,我们利用自研的数据传输服务将数据从源集群同步到新集群。然而,网络抖动、脏写污染等问题可能导致源端与目标端数据出现不一致。然而,现在的一些业界解决方案可能无法满足现在小红书内部的复杂业务场景,我们需要一款适配上述各种场景的数据一致性校验工具,来确保在数据传输过程中的数据质量,保障数据的一致性。因此,我们决定为小红书打造一套全新的数据校验系统,以应对内部业务的多样化和现有基础架构的挑战,它融合了业界成熟的校验技术。其主要具有以下特性:









三、数据一致性校验在小红书内部的实现


3.1 校验类型


按照数据校验的方式,可以划分为全量数据校验和增量数据校验:




在实际应用中,我们会根据具体情况灵活结合这两种校验方式,以更有效地确保数据的准确性和时效性。



在实际实践中,我们将全量数据校验根据源端和目标端校验表结构的差异又细分为同构校验和异构校验,它们的主要区别如下:



在实际进行全量数据校验时,数据一致性校验工具会自动根据源端和和目标端的数据源类型、校验表的数据分布以及数据校验任务配置等多种因素为校验任务选择合适的校验方式,此过程中用户不感知。


3.2 方案实现


基于实时数据流传输服务的特点,我们抽象了读取端(Reader)、写入端(Writer)和处理端(Processor)组件,实现了业务逻辑解耦。






3.3 全量数据校验


全量数据校验是指对数据库中的全量数据进行一次对比,它是一次性任务。在实际实践中,全量数据校验一般会被多次运行,从而确保数据的完整性和准确性。全量数据校验需要在数据传输服务全量同步任务运行完成后,且增量同步任务追平延迟后开启,否则会因为数据同步延迟导致大量数据不一致误判。



全量数据校验分为同构校验和异构校验,两者均采用分块抽样校验法。数据一致性校验工具在执行全量校验时,会分批次从源端和目标端提取数据块,然后对比这些数据块以验证一致性。分块策略允许用户配置数据块的大小,每次从数据库中提取固定数量的数据进行校验。一旦完成一个数据块的校验,程序就会继续下一个数据块。当提取的数据量小于设定的数据块大小时,校验结束。若在某个数据块中发现不一致,将进行复检,仅当多次校验均不一致时,才会记录为数据不一致。采用分块校验的原因包括:




同构全量数据校验通过校验和(checksum)实现,因为上下游数据分布是均匀的,我们可以通过主键对数据进行分块的checksum校验。在此过程中,待校验表的数据被划分为多个固定大小的校验块(chunk)。在特定时刻,源端和目标端的对应数据块将进行整体Hash校验和(如CRC32),以判断数据是否一致,同构校验过程中,校验块的大小可以动态调整,设置过大可能会增大数据库压力,同时可能会因为区间过大导致区间数据不一致概率大;设置过小,可能会降低校验速度。在实际应用中,业务可以根据上下游数据库的指标以及数据变化情况进行动态调整数据块的大小。



当校验过程中,发现某个 chunk 的上下游的 checksum 不一致,通过二分法将原来的 chunk 划分成大小接近的两个子 chunk,对子 chunk 进行 checksum 对比,进一步缩小不一致行的可能范围。通过 checksum 对比不断的缩小不一致行的可能范围,可以减少需要进行逐行对比的数据行,加快对比速度,减少内存损耗,并且由于每次计算 checksum 都相当于遍历一次二分后的子 chunk,理论上不考虑多次额外消耗,二分检验的开销相当于只对原 chunk 多做两次 checksum,当chunk大小变成1时,即可找到对应的不一致记录。但是,在一个校验块内,如果我们发现源端的数据比目标端数据要少,我们会通过逐行对比的方式去寻找出不一致的数据。


异构全量数据校验采用逐行对比的方法。在执行校验时,系统会分批次从源端提取数据,并通过一系列预设规则进行处理,以便与目标端的数据进行比较。一旦发现数据不一致,系统将自动进行复检,且复检的间隔时间会逐渐延长,呈指数级增长。这种机制旨在减少对系统的不必要负担,同时确保数据的准确性。



3.4 增量数据校验


增量数据校验专注于验证数据迁移、同步或更新过程中新增或修改的数据,确保数据的完整性和准确性,对保持数据一致性和可靠性至关重要。数据一致性校验工具的增量校验功能实时监控源端数据变更,并与目标端数据进行比对。它与全量数据校验独立运行,用户可按需选择是否启用增量校验。



增量校验以源端数据库为基准,利用其binlog来驱动校验过程。通过主键或唯一键,系统会检索目标数据库中相应的行数据,进行一致性对比。考虑到数据同步或校验任务可能存在延迟以及数据频繁变更等问题,实际的源端与目标端数据库数据可能比已消费的binlog位点更新。为应对这种情况,我们设计了延迟点查以及复查机制来对两边数据库的当前数据执行一致性比对,确保数据的准确性。


四、总结与展望


4.1 阶段性总结


小红书MySQL数据一致性校验工具自上线以来,已经在数据库迁移、单元化等重要场景得到了很好的应用,为小红书内部业务提供了数据一致性保障。


4.2 展望


后续关于数据一致性校验将在以下方面继续深入建设。






作者介绍

初原(张勇),小红书关系型数据库部研发工程师,数据库中间件小组成员,毕业于西北工业大学,现主要负责小红书数据传输服务的日常维护与迭代。

元甲(郑云龙),小红书关系型数据库部研发工程师,数据库中间件小组成员,毕业于浙江大学,曾就职于美团基础架构中间件中心,目前是小红书数据传输服务负责人。

克邪(沈力锴),小红书关系型数据库部研发工程师,数据库中间件小组负责人,毕业于中国科学技术大学,现主要负责小红书数据传输服务、数据库代理和数据库SDK等数据库中间件产品的整体架构和技术演进。


来源丨公众号: 小红书技术REDtech(ID:gh_f510929429e3

dbaplus社群欢迎广大技术人员投稿,投稿邮箱:editor@dbaplus.cn


阅读原文

跳转微信打开

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

数据一致性 数据校验 小红书 MySQL 数据迁移
相关文章