数据双向复制中的6个数据冲突场景和解决思路 - 云+社区 - 腾讯云

标签: | 发表时间:2021-06-26 14:11 | 作者:
出处:https://cloud.tencent.com

在双向复制,数据多活中,核心的一个部分就是数据处理,如何保证数据的如下几个问题,是整个方案设计的关键技术。

  • 数据错乱
  • 数据冲突
  • 数据回环
  • 数据一致性

数据错乱的部分主要是基于消息队列的处理内容,可以转化为基于消息队列的消息延迟,消息丢失,消息重复这几个场景进行细化。

其中数据回环的部分可以参考之前的一篇文章。

MySQL双主模式下是如何避免数据回环冲突的

在整个数据流转的过程中,如何处理数据冲突问题,我设定了如下的几个场景,欢迎留言补充。

场景1: INSERT导致的唯一性冲突

同步INSERT语句时违背了唯一性约束,例如双向同步的两个节点同时或者在极为接近的时间INSERT某一个主键值相同的记录,那么同步到对端时,会因为已经存在相同主键值的记录,导致Insert同步失败。

解决思路:

① 使用分布式ID的方案来规避,对于失败的写入,生成新的分布式ID重新应用

② 对于流水型数据,ID自增的方式,可以在写入时不解析id列,采用目标端和消费端的业务ID一致性

③ 对于流行型数据,ID自增的方式,写入采用了id列的方式,可以生成新的异常域(比如9999999999开头的ID列)消费应用

场景2: 表结构不同步导致的数据写入失败

在表结构变更过程中,可能因为同步延时问题,出现部分字段,约束不一致导致的数据写入失败

解决思路:

① 表结构变更过程需要避免DML写入,新增字段如果不为空,需要考虑设置默认值

② 数据应用解析需要指定字段名和字段顺序

③ 对于新增字段的操作,比如数据字段约束(如不为空)写入失败,需要重新修改JSON数据,重新推送消费

④ 对于删除字段的操作,比如字段不一致导致写入失败,需要重新修改JSON数据,重新推送消费

场景3: 字段顺序不一致导致的数据写入失败

解决方法:

① 需要在初始化时维护两端的字段顺序,确保一致

② 通过后端的服务进行字段稽核,分为周期性或者主动监测

③ 对于insert语句,在消费数据时,需要指定字段顺序

场景4:UPDATE更新的记录不完全匹配

1) UPDATE要更新的记录在同步目标实例中不存在

解决思路:数据操作转换为幂等SQL,转换为INSERT ON DUPLICATE模式

2) UPDATE要更新的记录出现主键或唯一键冲突

解决思路:

对于状态型数据,如果存在update操作中的唯一性冲突,需要对该记录进行持久化,并阻塞后续对于此记录的事务处理操作,结合业务场景进行分析

场景5: DELETE对应的记录不存在

DELETE要删除的记录在同步的目标实例中不存在。

解决思路:出现这种冲突时,不论配置何种冲突修复策略,可以选择忽略DELETE此类操作。

场景6:表不存在

对一些数据存在周期性管理,可能会触发drop类操作,导致两端的表结构信息丢失

解决思路:

① 对于状态型数据,如果存在DML操作失败,需要对该记录进行持久化,并阻塞后续对于此记录的事务处理操作,稍后结合业务场景进行分析

② 对于流水型数据,如果存在DML操作失败,需要对该记录进行持久化,不阻塞后续对于此记录的事务处理操作,稍后结合业务场景进行分析

在这个基础上,对于数据消费方案和一致性方案,我们在明天给出一些设计方案。

相关 [数据 复制 数据] 推荐:

数据库复制-Goldengate

- - 人月神话的BLOG
参考: http://wenku.baidu.com/view/4fd7ea22bcd126fff7050b5d.html. GoldenGate TDM(交易数据管理)软件是一种基于日志的结构化数据复制软件,它通过解析源数据库在线日志或归档日志获得数据的增删改变化,再将这些变化应用到目标数据库,实现源数据库与目标数据库同步、双活.

MySQL数据库复制概论

- - Float_Luuu的博客
每当我们讨论一项(新的)领域技术的时候,最好的方式通常是首先抛出一些问题,这些问题大致分为三类:诶. 这项技术又是什么玩意(What)?这项技术为什么会存在. 我们已经有那么多解决方案(Method)了,我们问什么要用它(Why). 如果这项技术那么好且我们正好有场景可以用到这项技术,且能使我们的系统得到很乐观的优化,那么我们怎么用呢(How).

MySQL添加Hadoop数据实时复制功能

- - searchdatabase
  MySQL复制操作可以将数据从一个MySQL服务器(主)复制到其他的一个或多个MySQL服务器(从). 试想一下,如果从服务器不再局限为一个MySQL服务器,而是其他任何数据库服务器或平台,并且复制事件要求实时进行,是否可以实现呢?.   MySQL团队最新推出的 MySQL Applier for Hadoop(以下简称Hadoop Applier)旨在解决这一问题.

SymmetricDS 3.5.14 发布,数据库同步和复制

- - 开源中国社区最新新闻
SymmetricDS 3.5.14 发布,此版本修复了 6 个 bug :路由、数据差异检测器、升级过程和 Oracle smallints 同步等;还有 4 处改进:快照支持,SQL 事件;classpath 简化和文档. 更多更新内容请查看 更新日志. SymmetricDS是一个平台独立的数据同步和复制的解决方案.

数据复制中心DRC实践 - 简书

- -
DRC(Data Replication Center)是我在阿里听过的一个概念,它的业务域是支持异构数据库实时同步,数据记录变更订阅服务. 为跨域实时同步、实时增量分发、异地双活、分库分表等场景提供产品级的解决方案. 支持异地多活、大数据实时抽取、搜索实时更新数据、数据表结构重构、多视图数据存储、大屏实时刷新等.

OGG双向复制oracle数据库配置

- -
Oracle GoldenGate supports an active-active bi-directional configuration, where there are two systems with identical sets of data that can be changed by application users on either system.

MySQL复制可能造成数据不一致的地方

- - 掘金 前端
上周在讲复制故障处理,利用DML在从主上手工造数据,导致主从复制中断,然后处理复制故障,同时给大家安利了:. 课程Demo程序:主从故障自动修复:zhishutech/ReplGurd (github.com)  建议fork|star | watch  有完善的地方请pull回来. 复制主从数据一致性校验、修复程序:pt-table-checksum/pt-table-sync 使用.

MySQL 数据库双向同步复制 - mindwind - 博客园

- -
MySQL 复制问题的最后一篇,关于双向同步复制架构设计的一些设计要点与制约. 数据库的双主双写并双向同步场景,主要考虑数据完整性、一致性和避免冲突. 对于同一个库,同一张表,同一个记录中的同一字段的两地变更,会引发数据一致性判断冲突,尽可能通过业务场景设计规避. 双主双写并同步复制可能引发主键冲突,需避免使用数据库自增类主键方案.

数据双向复制中的6个数据冲突场景和解决思路 - 云+社区 - 腾讯云

- -
在双向复制,数据多活中,核心的一个部分就是数据处理,如何保证数据的如下几个问题,是整个方案设计的关键技术. 数据错乱的部分主要是基于消息队列的处理内容,可以转化为基于消息队列的消息延迟,消息丢失,消息重复这几个场景进行细化. 其中数据回环的部分可以参考之前的一篇文章. MySQL双主模式下是如何避免数据回环冲突的.

玩转数据中心:Twitter复制谷歌成名秘密武器

- - 博客 - 伯乐在线
[ 导读]谷歌和Twitter将数据中心当做一个超大型的计算机来看待,最终全世界也会这样做. Twitter的本海因德曼. 《连线》周二刊登了一篇署名为卡德梅茨(Cade Metz)的评论文章,借谷歌(微博)网络帝国最核心的软件系统伯格(Borg)分析了Twitter如何重建谷歌的秘密武器. 约翰威尔克斯(John Wilkes)说,加入谷歌就象是《黑客帝国》中的尼欧(Neo)吞下红药丸一样,那就是选择了觉醒.