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

优质博文:IT-BLOG-CN

数据库出海流程

【1】业务出海:1)数据库出海;2)应用出海;3)流量分发;
【2】数据库出海:涉及业务方、信安、DBA和框架组。

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

注意事项:
【1】若出海的数据分散在多个库,先汇总到一个集群,统一出海;
【2】双向复制时,需要做好流量切分,避免数据复制出现冲突;
【3】保留流量切分到上海的能力,防止复制中断影响业务;
【4】如果相同的数据存在多个更新场景,在并发的情况下还容易产生数据冲突的问题,也需要通过单元化部署避免;

数据同步方案

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

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

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

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

【1】用户A下单,订单ID=10001,订单状态为S ,此时流量和数据都只是在上海机房;
【2】执行数据迁移,流量仍然指向上海机房,迁移完成后上海机房和AWSDB都有ID=10001的订单,且订单状态都是S;
【3】用户进行退票操作,由于流量指向上海机房,所以操作后上海机房的DB中订单状态被值为C,而AWS上订单状态还是S;
【4】进行流量切换,将用户A的流量切换到AWS,双边的数据各自保持不变,仍然不一致;
【5】用户进行查询操作,由于流量指向AWS,读取AWSDB的数据,看到订单状态S。退票操作差生的S-->C的增量变更丢失了;

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

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

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

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

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

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

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

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

订单号分配基本原则:
【1】全局唯一性:不能出现重复订单号;
【2】趋势递增:有序的主键,保证写入性能;
【3】单调递增:下一个ID一定大于上一个ID;
【4】信息安全:避免让竞争对手获取单量;

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/457971.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Go 语言基础教程:7.Switch 语句

在这篇教程中,我们将学习 Go 语言中的 switch 语句,它是条件分支的重要结构。我们将通过一个示例程序逐步解析 switch 的不同用法。 package mainimport ("fmt""time" )func main() {i : 2fmt.Print("Write ", i, " …

Python画笔案例-094 绘制 神奇彩条动画

1、绘制 神奇彩条动画 通过 python 的turtle 库绘制 神奇彩条动画,如下图: 2、实现代码 绘制 神奇彩条动画,以下为实现代码: """神奇彩条动画.py一个用海龟画图的图章功能配合颜色渐变和动画原理做成的动画。 """ from random import randi…

重学SpringBoot3-Spring WebFlux之SSE服务器发送事件

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ Spring WebFlux之SSE服务器发送事件 1. 什么是 SSE?2. Spring Boot 3 响应式编程与 SSE为什么选择响应式编程实现 SSE? 3. 实现 SSE 的基本步骤3.…

MySQL-32.索引-操作语法

一.语法 二.代码实现 指定某个字段为主键,其实就是建立一个主键索引。而指定某个字段唯一,就是建立一个唯一索引。 -- 索引 -- 创建:为tb_emp表的name字段建立一个索引 create index idx_emp_name on tb_emp(name);-- 查询:查…

Handler、Looper、message进阶知识

Android Handler、Looper、Message的进阶知识 在Android开发中,Handler、Looper和Message机制是多线程通信的核心。为了深入理解并优化它们的使用,尤其是在高并发和UI性能优化中,可以利用一些高级特性。 1. Handler的高阶知识 Handler在基本…

Axure随机验证码高级交互

亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢! 课程主题:字母数字随机验证码高级交互 主要内容:4位字母数字随机验证码生成、错误提示与State状态同步 应用场景:登录验证码、其他类…

Linux - 文件描述符 | 文件系统 | 软硬链接

文章目录 一、文件描述符1、补充知识2、文件描述符是什么?3、处理文件的系统调用接口4、文件描述符的分配规则5、简单理解Linux下一切皆文件6、FILE7、重定向 二、文件系统三、软硬链接1、软连接2、硬链接3、软硬链接对比 一、文件描述符 1、补充知识 (…

5G NR:BWP入门

简介 5G NR 系统带宽比4G LTE 大了很多,4G LTE 最大支持带宽为20MHz, 而5G NR 的FR1 最大支持带宽为100MHz, FR2 最大支持带宽为 400MHz。 带宽越大,意味了终端功耗越多。为了减少终端的功耗,5G NR 引入了BWP(Band Wid…

从零实现数据结构:一文搞定所有排序!(下集)

1.快速排序 思路框架: 在有了前面冒泡选择插入希尔排序之后,人们就在想能不能再快一点,我们知道排序算法说人话就是把大的往后放小的往前放,问题就在于如何更快的把大的挪到数组队尾小的挪到数组前面。这里我们先总结一下上集前…

NVR录像机汇聚管理EasyNVR多品牌NVR管理工具/设备视频报警功能详解

在科技日新月异的今天,视频监控系统作为现代社会的“第三只眼”,正以前所未有的方式深刻影响着我们的生活与社会结构。从公共场所的安全监控到个人生活的记录分享,视频监控系统以其独特的视角和功能,为社会带来了诸多好处&#xf…

【Linux】————磁盘与文件系统

作者主页: 作者主页 本篇博客专栏:Linux 创作时间 :2024年10月17日 一、磁盘的物理结构 磁盘的物理结构如图所示: 其中具体的物理存储结构如下: 磁盘中存储的基本单位为扇区,一个扇区的大小一般为512字…

Python 自动化运维:Python基础知识

Python 自动化运维:Python基础知识 目录 📊 Python 基础复习 数据类型、控制结构与常用函数面向对象编程(OOP)与类的使用函数式编程概念与 lambda 表达式异常处理与日志记录的基本实践 1. 📊 Python 基础复习 数据…

二十二、Python基础语法(模块)

模块(module):在python中,每个代码文件就是一个模块,在模块中定义的变量、函数、类别人都可以直接使用,如果想要使用别人写好的模块,就必须先导入别人的模块,模块名须满足标识符规则(由字母、数…

SwiftUI(三)- 渐变、实心形状和视图背景

引言 在现代的应用的UI设计中,渐变和形状背景为界面带来了丰富的层次与视觉效果,而SwiftUI提供了一系列简单且强大的API,可以轻松实现这些效果。在这篇文章中,我们将介绍SwiftUI中的渐变、实心形状和视图背景的基础用法&#xff…

【论文阅读】Learning persistent homology of3D point clouds

摘要 motivation:PD计算过程非常耗时,严重限制了TDA的应用 本文提出了一种端到端的神经网络模型TopologyNet,用于直接从3D点云数据中拟合拓扑表示。TopologyNet显著减少了生成拓扑表示的计算时间,并在实际实例中保持了较小的近似…

Python4

4. 更多控制流工具 除了刚介绍的 while 语句&#xff0c;Python 还用了一些别的。我们将在本章中遇到它们。 4.1. if 语句 if elif else if x<0: x 0 print(Negative changed to zero) elif x0: print( zero) else: print(More) 4.2. for 语句 Pyth…

2024.7最新子比主题zibll7.9.2开心版源码+授权教程

授权教程&#xff1a; 1.进入宝塔搭建一个站点 绑定 api.zibll.com 域名 并上传 index.php 文件 2.设置伪静态 3.开启SSL证书&#xff0c;找一个能用的域名证书&#xff0c;将密钥(KEY)和证书(PEM格式)复制进去即可 4.在宝塔文件地址栏中输入 /etc 找到 hosts文件并打开&a…

【Docker】docker | 部署nginx

一、概述 记录下nginx的部署流程&#xff1b;将conf配置文件映射到宿主机 前提依赖&#xff1a;自行准备nginx的镜像包 二、步骤 1、运行、无映射 docker run --name nginx -p 80:80 -d nginx:1.18.0-alpine 80&#xff1a;80&#xff0c;前面是宿主机端口&#xff1b;如果冲…

uniapp:上拉加载更多、下拉刷新、页面滚动到指定位置

提醒 本文实例是使用uniapp进行开发演示的。 一、需求场景 在开发商品&#xff08;SKU&#xff09;列表页面时&#xff0c;通常有三个需求&#xff1a; 页面下拉刷新&#xff0c;第一页展示最新数据&#xff1b;上拉加载更多数据&#xff1b;列表页面可以滚动到指定位置&#x…

Liunx权限概念及权限管理

目录 一&#xff1a;shell命令以及运行原理 二&#xff1a;Linux权限的概念 三&#xff1a;Linux的权限管理 3.1文件访问者的分类 3.2文件类型和访问权限&#xff08;事物属性&#xff09; 3.3文件权限的表达方式&#xff1a; 3.4文件访问权限的相关设置方法 四&…