阿里巴巴数据库分库分表的实践(5)

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介: 阿里巴巴数据库分库分表的实践(5)

1)多线程管道实现


在精卫平台应用的早期,数据的同步均是采用单线程管道任务模式,即如

5-12中对binlog进行单线程的处理。随着业务的发展,需要同步的数据量越来越大,单纯的单线程管道任务已经成为系统的瓶颈,后来开发了对多线程管道任务的支持(如图5-14所示)。


image.png


但多线程管道就会带来数据同步的顺序问题。在对binlog数据进行多线程并行处理后,就不能保证在源数据库中执行的SQL语句在目标数据库的顺序一致,这样在某些业务场景中一定会出现数据不一致性的问题。对于这个问题,目前精卫中提供的解决思路是保证同一条记录或针对同一分库表发生的数据同步按照顺序执行。


如果最后发送到分布式数据层的SQL语句中没有分库键,则通过对库名+表名+主键值哈希后对线程数取模,这样就能让同一条记录的数据同步事件处理都会在同一线程中顺序执行,保证了该记录多次变更的顺序性,但是不保证不同记录间的顺序。如果SQL语句中有分库键,则通过库名+分库键值哈希后对线程数取模,效果是保证不同逻辑表针对相同分库逻辑的记录变化顺序。


2)数据的安全


凡是牵涉数据的操作,数据的安全一定是最重要的。如何保证在分布式环境下同步任务效率最大化,同时保证服务的稳定和数据的安全,是很多此类平台精益求精、力求突破的方向。


平台稳定性保障。为了保证同步任务执行的效率最大化,同时互相不会因为资源会抢占或某些同步任务的异常对其他任务造成影响,在精卫的系统设计中,支持多个服务节点作为任务执行的集群,通过统一的任务调度系统(Zookeeper集群),将任务分配到集群中的各节点并行执行。


为了保证任务间不会因为同步任务性能或异常造成互相的干扰,采用了每个同步任务都是独立Java进程的方式运行,出现异常该任务自动终止。任务调度系统会定期轮询任务列表,发现任务缺少立即抢占式启动该任务。


心跳+报警。运行集群与ZooKeeper采用定时心跳的方式,将集群节点的运行状态以及任务完成的位点(即目前同步任务处理binlog的进度信息)信息同步到Zookeeper上,如果心跳信息异常或位点时间落后过大则立即报警。在抽取器和分发器发生任何错误复制任务立即转变成STANDBY状态,集群中其他机器上的服务在感知后会立即将自己启动,继续执行前一复制任务。


MySQL主备切换。利用比对主备数据库的状态信息,通过以下顺序,采用手工的方式处理MySQL出现主备切换时进行同步任务的恢复:


1)查看新主库的当前位点Show master status,获取到PA状态。


2)查看老主库拉去新主库的位置Show slave status,获取到PR状态。


3)如果PR>PA,直接用新主库的位点PA切换到新主库上读取。


如果希望通过自动化的方式,实现的思路则可利用binlog里的serverId和时间戳,发现dumpbinlog中的serverId发生变化记录变化时间戳,然后在给定的MySQL服务器中查找到有同样变化的数据库,根据探测到的serverId发生变化的时间戳进行回溯,在新的机器符合条件的位点进行dump


MySQL异常挂掉。利用数据库上binlog文件修改时间,按照以下顺序采取手工的方式进行整个文件回溯:


1)在数据库所在的服务器上找到服务挂掉的时间点。


2)到新的主机上查看找到服务挂掉时间点之前最近的binlog文件。



3)从这个文件的位点开始进行回溯。


如果希望通过自动化的方式自动进行恢复,可同样借鉴MySQL主备切换中提到的自动化实现思路。


3)友好的用户自服务接入体验


精卫平台是整个电商业务实现数据实时同步复制的统一平台,负责来自上千个不同应用的需求,如果每一个应用的接入都需要平台的技术人员给予入门的培训和支持都是非常大的工作量,也会影响到前端应用的用户体验。所以提供一个用户体验友好,自带常用功能的平台,能针对大部分的业务需求可以让应用方在界面上通过配置的方式就能实现,大大降低接入开发成本。


如图5-15所示,精卫平台给应用方客户提供了Web的配置界面,可让用户针对需要同步的数据源进行设置,并对数据同步的事件类型(增、删、改)和是否进行分表以及分库分表键列等进行设置。


精卫平台的数据库分发器支持一些高级功能,如字段过滤、字段映射、action转换等,如果自带功能不满足需求,可以上传包含自己的业务逻辑的过滤代码。这些功能的使用也提供了界面的方式,让用户对源数据库表中的字段如何映射到目标数据库表进行设置(如图5-16所示)。


image.png


5-16 精卫提供的自服务体验提升数据同步服务接入效率


正是有了这样简单易用的用户体验,使得精卫平台在应用的接入效率和用户满意度上都有非常不错的表现。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
4月前
|
存储 人工智能 NoSQL
AI大模型应用实践 八:如何通过RAG数据库实现大模型的私有化定制与优化
RAG技术通过融合外部知识库与大模型,实现知识动态更新与私有化定制,解决大模型知识固化、幻觉及数据安全难题。本文详解RAG原理、数据库选型(向量库、图库、知识图谱、混合架构)及应用场景,助力企业高效构建安全、可解释的智能系统。
|
11月前
|
人工智能 前端开发 JavaScript
代码采纳率从 22% 到 33%,通义灵码辅助数据库智能编码实践
通义灵码本质上是一个AI agent,它已经进行了大量的优化。然而,为了更完美或有效地调用模型的潜在能力,我们在使用时仍需掌握一些技巧。通常,大多数人在使用通义灵码时会直接上手,这是 AI agent 的一个优势,即 zero shot 使用,无需任何上下文即可直接使用通义灵码的能力。
|
5月前
|
存储 弹性计算 Cloud Native
云原生数据库的演进与应用实践
随着企业业务扩展,传统数据库难以应对高并发与弹性需求。云原生数据库应运而生,具备计算存储分离、弹性伸缩、高可用等核心特性,广泛应用于电商、金融、物联网等场景。阿里云PolarDB、Lindorm等产品已形成完善生态,助力企业高效处理数据。未来,AI驱动、Serverless与多云兼容将推动其进一步发展。
271 8
|
7月前
|
人工智能 运维 数据挖掘
瑶池数据库Data+AI驱动的全栈智能实践开放日回顾
阿里云瑶池数据库重磅推出“Data+AI能力家族”,包括DTS AI数据准备、Data Agent系列智能体及DMS MCP统一数据访问服务,重构数据与AI协同边界。通过智能化工具链,覆盖数据全生命周期,提升企业数据开发、分析、治理与运维效率,降低技术门槛,激活数据资产价值,助力企业迈向全栈智能新时代。
|
8月前
|
人工智能 运维 数据挖掘
瑶池数据库开放日:全新发布Data+AI能力家族,赋能企业全栈智能实践
近日,阿里云瑶池数据库生态工具产品重磅升级,推出“Data+AI能力家族”,并举办了为期3天的全栈智能实践开放日活动。发布会上首次公开了 “Data Agent for Analytics、Data Agent for Meta、DAS Agent”等瑶池数据库Data Agent系列能力,以工具智能化 × 智能化工具的双引擎重构数据与AI的协同边界,揭秘AI时代数据价值释放的全新路径。
|
11月前
|
数据库
|
5月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
444 158
|
5月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
|
5月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
1040 152