一、为什么需要做数据一致性校验
在数据的服务生命周期过程中,经常会因为数据迁移、主从复制、数据集成等原因产生数据流动及复制。在数据复制过程中,由于人为误操作、软件bug或硬件故障等原因,无法完全规避复制数据的准确性。如何有效保障复制数据的一致性变得至关重要。
当前市面上专门用于解决“数据一致性校验”的工具比较匮乏。很多企业依然在使用:人工抽检的原始解决方案,数据一致性导致的业务故障频发。
举一个客户遇到CASE,客户是一个电商SAAS服务提供商。如同其他SAAS服务,出于成本优化及大租户稳定隔离的业务诉求,经常会涉及用户数据的跨机搬迁。当前,客户并没有对应的数据一致性校验工具,所以,每次迁移完成,都是人工抽核心表进行数据量的检测。正应了“常在河边走,哪有不湿鞋”的俗语,有一次迁移一个大商家数据的时候,在没有完整数据一致性校验的情况下,直接切换商家业务,最终出现因迁移数据【订单】不一致,导致的商家业务故障,给大商家造成比较大的业务影响及品牌影响。
二、一个好的工具应该具备哪些能力
同行们血淋淋的经验告诉我们,拥有一个好的数据一致性校验工具是必不可少的【关键时刻能救命~】。那么究竟我们需要怎么样的工具呢。小编认为一款校验工具至少应该具备如下六个特质。
1. 能做结构一致性校验
利用表存储数据,几乎成为大部分数据存储的通用标准。所以表结构能否正确迁移直接影响迁移数据的一致性。同时,数据库提供了诸多非表对象,包括视图、存储过程、函数、触发器等。用户一般基于这些对象实现轻量的业务逻辑,所以非表对象的能否成功迁移也会直接影响业务的迁移。由此,小编认为,具备结构一致性的快速校验是校验工具的基础能力。
2. 完善的数据一致性校验
除了结构,数据无疑是另一关键的校验内容。数据存储支持丰富的数据类型,差异化的数据类型默认值、数据格式、字符集以及时区等。因此,能否支持完善的数据类型,屏蔽源及目标数据源在数据范围、数据格式、字符集及时区上的差异,也成为数据校验工具的核心能力。
3. 快速定义不一致内容
数据校验的目的是为了验证数据一致性,并针对不一致数据进行快速补救。所以,能够定位并提供具体不一致的内容也是数据校验工具的重要特质。
4. 快速订正数据的能力
当数据校验定位到不一致内容后,是否能够提供数据订正脚本帮助用户快速修复不一致数据也是校验工具必不可少的基础能力。
5. 校验速度要快,“天下武功唯快不破”
小编认为校验速度够快也是核心要求。尤其在数据迁移、数据集成场景,在这种场景下,数据校验会影响业务停机时间,或者下游数据生产基线【例如,报表生产时间】,对校验时间要求较苛刻。
6. 对数据库的性能影响要可控
校验工具一般都会高并发读取数据库的数据,此时,数据库同时承担着线上的业务应用。如何有效平衡数据校验速度以及数据库稳定性是校验工具应该解决的重要命题。
三、市面上都有哪些常见的方案
1. NineData
官网地址:https://www.ninedata.cloud/
NineData 是玖章算术旗下的多云数据管理平台,它是一款即开即用的数据管理SAAS服务。当前 NineData 已经支持数十种常见同异构数据源(MySQL、SQLServer、CK等)之间的结构对比、数据对比及数据订正能力。NineData 结构及数据对比作为独立服务,可以灵活支持IDC、云主机自建及云托管数据源的数据一致性校验及快速修复。从使用体验、产品能力、稳定性及性能等维度综合来看,NineData 是一款综合实例比较强、比较难得的校验工具。
2. Percona-toolkit
percona-toolkit是由数据库厂商percona提供的工具集,其中: pt-table-checksum、 pt-table-sync 提供了MySQL主从复制一致性校验及修复的能力。Pt-table-checksum主要通过在MySQL主中运行checksum query,然后利用MySQL主从复制,query流转到slave中,进行check对比。由于,需要借助MySQL主从复制的能力,percona-toolkit只能应用主从复制场景。其优势在于,当前工具使用比较广泛,成熟度比较高。
3. 云厂商迁移校验工具
配合数据迁移工具,部分云厂商会提供对应的一致性校验能力。当前云厂商提供的校验能力,一般只支持数据校验,不支持结构校验,且数据订正能力比较弱。由于厂商的校验工具是跟迁移工具配合使用,所以,对于不使用迁移工具的数据源,当前不能提供数据校验能力。同时,其对云数据库的迁移支持较好,但是对于云主机上自建数据库以及IDC自建数据库支持不好或不支持。
四、NineData,即开即用的数据一致性校验服务
正如前面所述的推荐指数来看,NineData提供的结构对比、数据对比功能确实是综合实力比较强,也比较推荐的一款产品。除了基础的全量对比外,NineData还提供了快速对比、周期性对比及不一致复检等多种对比形态。
- 快速对比,相较于全量对比,快速对比主要用以校验窗口期比较短的情况。快速对比会对数据量、数据分布进行校验,同时会随机抽样一定的比例进行校验。
- 周期性对比,自定义对比频率及对比方式,NineData会自动周期性调度对比任务进行结构及数据对比。小编理解这个功能应该用于长期数据复制场景的数据对比,例如主从复制、数据容灾、数据多活或数据仓库实时集成等场景。
- 不一致复检,即针对上一次对比结果中不一致数据进行重新复检。这个功能主要应用于数据订正、主从复制【主从延迟】场景下,进行快速的复检。
接下来,带大家感受下这个产品的使用体验。
1. 配置对比任务
整个任务配置过程很简单,主要分为三个步骤:
- 选择数据源,即配置对比的源实例及目标实例;
- 选择对比对象,即配置需要对比的对象,对比对象可以选择库、表|非表、列;
- 配置映射关系及过滤条件,即配置对比表的映射关系;或者通过配置SQL过滤条件,可以只对关键数据进行对比。
2. 对比结果
NineData 会提供完善的对比结果,其会定位不一致内容。针对不一致内容,提供快速订正脚本。
五、最后
数据作为企业的核心资产,数据的准确性关于业务可靠性及企业品牌口碑。为此,还是推荐大家在线上主从环境、数据迁移、数据复制等场景中,配套使用可靠的数据校验工具。平台工具 NineData 以其完善的校验能力、产品体验、校验速度、稳定性及数据源环境的广泛适配性成为了市面上比较出彩的校验工具,推荐大家使用。