数据同步 #
推拉结合 #
- 数据发送方基于消息队列实时同步最新数据。
- 数据接收方每隔一段时间按批次进行主动拉取,避免因消息中间件出现问题造成少数据。
优化方案:
- 数据消费方消费时将数据保存到Redis中,实现幂等性,避免重复推。
- 数据接收方主动拉取时,可以先拉取新增数据量;数据量不一致时再拉取新增ID集合;还是不一样再拉取新增数据。
支持数据修改的优化方案:
- 数据发送方生产新数据时,记为version=1。
- 每次修改数据时,新数据记为version=2。
- 删除数据时,数据记为version=999。
- 数据接收方将数据落入临时表。
- 日切后,数据接收方对临时表中的数据进行筛选后移动到正式表,同流水号只保留version最大的数据,并丢弃version=999的数据。
除了日切筛选外,也可以实时进行旧数据的淘汰。
基于完整性校验 #
- 数据发送方将数据按时间维度划分为块。例如10作为基准时间,11点作为对账时间。
- 数据发送方抽取基准时间和对账时间内的所有数据,通过md5生成校验码。
- 数据发送方发送当前窗口的数据、当前窗口的md5(currMd5)和上一个窗口的md5(preMd5)。
- 数据接收方检查两个校验码是否一致。
- preMd5和currMd5都一致。将新数据写入数据库。
- preMd5一致,currMd5不一致。要求数据发送方重新发送数据。
- preMd5不一致。要求数据发送方重新发送上一个窗口的数据。
基于中间服务实现数据同步 #
数据同步
- 数据交换平台启动交换任务。
- 从数据发送方获取数据,经过格式转换后发送给数据接收方,同时记录数据总数。
数据对账
- 数据交换平台根据之前记录的数据总数进行分片,交给对账服务器进行对账。
- 对账服务器根据分片信息从数据发送方和数据接收方抽取数据,进行对账。
- 有遗漏时,数据交换平台从发送方获取数据同步给接收方,实现自动修复。