MySQL 数据出海之数据同步方案

云掣YunChe7个月前行业资讯312

数据库出海流程

【1】业务出海:1)数据库出海;2)应用出海;3)流量分发;

【2】数据库出海:涉及业务方、信安、DBA和框架组。


数据库出海,流量在国内 --> 应用出海,流量在国内 --> 公有云,灰度流量[GateWay] --> 完成灰度,流量切分完成


注意事项:

【1】若出海的数据分散在多个库,先汇总到一个集群,统一出海;

【2】双向复制时,需要做好流量切分,避免数据复制出现冲突;

【3】保留流量切分到上海的能力,防止复制中断影响业务;

【4】如果相同的数据存在多个更新场景,在并发的情况下还容易产生数据冲突的问题,也需要通过单元化部署避免;


数据同步方案

方案一:手工触发数据迁移,将海外数据迁移到AWS的DB。然后将海外流量从上海机房切换到AWS;



备注 : 灰度过程中一般会分为多个批次进行,每个批次对应的数据和流量,都是重复上述操作;


优点: 流程简单,容易操作,因为操作失误而导致出错的几率极低


缺点1. 增量数据可能丢失:数据迁移的操作,是需要一定的时间才能完成的,而在这一段时间内,可能有用户写入新数据或者修改数据,若修改时间点正好是这条数据已经完成迁移但又在流量切换之前,导致AWS上的数据不是最新数据,即增量数据在AWS上丢失了。问题场景的时序如下:



【1】用户A下单,订单ID=10001,订单状态为S ,此时流量和数据都只是在上海机房;

【2】执行数据迁移,流量仍然指向上海机房,迁移完成后上海机房和AWS的DB都有ID=10001的订单,且订单状态都是S;

【3】用户进行退票操作,由于流量指向上海机房,所以操作后上海机房的DB中订单状态被值为C,而AWS上订单状态还是S;

【4】进行流量切换,将用户A的流量切换到AWS,双边的数据各自保持不变,仍然不一致;

【5】用户进行查询操作,由于流量指向AWS,读取AWS的DB的数据,看到订单状态S。退票操作差生的S-->C的增量变更丢失了;


缺点2. 数据迁移的分批策略需要与流量切换的分批逻辑保持一致:分批多次切换的过程中,每次切换都涉及流量切换和数据迁移,二者的分批逻辑必须保持严格一致。再加上我们的数据多样化,会有多种切换维度和策略,会导致数据迁移工具的实现难度和工作量很大。


缺点3. 无法回切流量到上海机房:数据单向同步到AWS,即灰度过程中AWS上会有全量的数据,但上海机房的AWS数据,会随着切换比例逐渐减少,上海机房将无法处理历史数据的变更,也就无法支持全部的AWS流量。当云上的应用出现流程或者环境问题时,只能是尽量快速解决AWS上的问题,而不能将AWS流量回切到上海。由于上云项目涉及的应用和开发组非常多,大家对公有云的运维经验较少,上线初期出现问题的几率较高,解决问题的速度也可能比较慢,无法将流量回切上海,带来的风险和影响较大。


改进方案一:实时同步数据到AWS

灰度过程中,启用数据同步,将上海的AWS数据全部同步到AWS机房,时间跨度是从灰度开始一直持续到灰度结束。由于增量数据会持续的同步到AWS,AWS上始终是全量的最新数据,避免缺点1的问题;数据同步是同步所有的海外数据,不依赖与流量切换的分批维度,可以直接使用公司通用的数据同步工具,避免缺点2的问题。



缺点: 由于数据同步只是单向的从上海到AWS,仍然无法保证上海是全量的最新数据,缺点3的问题仍然存在,即无法回切流量到上海机房。


改进方案二:双向实时数据同步

灰度过程中,同时启用两个方向的数据同步,不仅将海外数据同步到AWS,也将AWS的海外数据全部同步到上海机房,时间跨度是从灰度开始一直持续到灰度结束。这样,上海机房和AWS机房都有全量的海外数据,可以随时将海外流量切换到AWS,也可以随时回切流量到上海,避免缺点3



缺点 : 双向数据同步可能产生数据冲突,必须对数据写入逻辑进行严格控制,避免冲突。


海外订单号数据库独立部署

目的:海外订单号中存放Location信息,通过订单号就能确定是那个Region的订单,方便保障订单的处理。 产生订单号的数据库,在海外独立部署,和国内订单号数据库不关联。订单号分配逻辑保留海外的可扩展性。


订单号分配基本原则:

【1】全局唯一性:不能出现重复订单号;

【2】趋势递增:有序的主键,保证写入性能;

【3】单调递增:下一个ID一定大于上一个ID;

【4】信息安全:避免让竞争对手获取单量;


数据库多IDC扩展性: 引入RegionCode插入用户数据时增加记录机房标识RegionCode。根据RegionCode确定数据所在Region,使得常用的数据查询或业务处理操作可以在单个节点上执行,以达到数据单元化处理和数据合规策略动态调整的效果,从而避免跨节点带来额外性能消耗和数据跨境合规问题。


原文链接:MySQL 数据出海之数据同步方案_navicat数据同步怎么用-CSDN博客


本文系转载,版权归原作者所有,如若侵权请联系我们进行删除!  

云掣基于多年在运维领域的丰富时间经验,编写了《云运维服务白皮书》,欢迎大家互相交流学习:

《云运维服务白皮书》下载地址:https://fs80.cn/v2kbbq

想了解更多大数据运维托管服务、数据库运维托管服务、应用系统运维托管服务的的客户,欢迎点击云掣官网沟通咨询:https://yunche.pro/?t=shequ

相关文章

Docker:namespace隔离实战

Docker:namespace隔离实战

namespacenamespace通过一种内核技术来实现,允许将不同的系统资源隔离和封装到独立的命名空间中。为容器化、虚拟化和隔离提供强大的基础。通过使用namespace技术,Linux内核可以创...

如何重塑IT运维核心竞争力?可观测运维这么做!

如何重塑IT运维核心竞争力?可观测运维这么做!

随着云计算、大数据、人工智能等新兴技术的兴起及运用,无论是通讯、金融、教育,还是交通、政府、企业等行业,都得到飞速发展,但在高速发展的同时,各行业巨大的 IT 维护和管理成本也在与日俱增,存在监控工具...

Linux 导入MySQL数据库(四)

Linux 导入MySQL数据库(四)

一、导出数据库一、导出数据库用mysqldump命令(注意mysql的安装路径,即此命令的路径):1、导出数据和表结构:mysqldump -u用户名 -p密码 数据库名...

Docker--Docker是什么和对Docker的了解

Docker--Docker是什么和对Docker的了解

Docker 的本质Docker的本质是LXC(Linux容器)之类的增强版,它本身不是容器,而是容器的易用工具。Docker通过虚拟化技术,将代码、依赖项和运行环境打包成一个容器,并利用隔离机制来使...

【Docker】深入了解 Docker:终极命令指南(下)

【Docker】深入了解 Docker:终极命令指南(下)

5. 网络管理Docker 网络使得容器之间的通信变得简单。以下是管理网络的基本命令:5.1 创建和管理网络命令 说明 示例docker network create <network>...

docker composer 安装sentry的运维总结--未完待续

docker composer 安装sentry的运维总结--未完待续

一、sentry安装1、下载最新的github工程地址是https://github.com/getsentry/self-hosted。我们安装的时候最新版本还是Sentry 21.6.1, 截止目...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。