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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 阿里巴巴数据库分库分表的实践(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 精卫提供的自服务体验提升数据同步服务接入效率


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

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4月前
|
人工智能 前端开发 JavaScript
代码采纳率从 22% 到 33%,通义灵码辅助数据库智能编码实践
通义灵码本质上是一个AI agent,它已经进行了大量的优化。然而,为了更完美或有效地调用模型的潜在能力,我们在使用时仍需掌握一些技巧。通常,大多数人在使用通义灵码时会直接上手,这是 AI agent 的一个优势,即 zero shot 使用,无需任何上下文即可直接使用通义灵码的能力。
|
4月前
|
数据库
|
6月前
|
关系型数据库 OLAP API
非“典型”向量数据库AnalyticDB PostgreSQL及RAG服务实践
本文介绍了非“典型”向量数据库AnalyticDB PostgreSQL及其RAG(检索增强生成)服务的实践应用。 AnalyticDB PostgreSQL不仅具备强大的数据分析能力,还支持向量查询、全文检索和结构化查询的融合,帮助企业高效构建和管理知识库。
328 19
|
6月前
|
缓存 NoSQL JavaScript
Vue.js应用结合Redis数据库:实践与优化
将Vue.js应用与Redis结合,可以实现高效的数据管理和快速响应的用户体验。通过合理的实践步骤和优化策略,可以充分发挥两者的优势,提高应用的性能和可靠性。希望本文能为您在实际开发中提供有价值的参考。
130 11
|
7月前
|
弹性计算 安全 关系型数据库
活动实践 | 自建数据库迁移到云数据库
通过阿里云RDS,用户可获得稳定、安全的企业级数据库服务,无需担心数据库管理与维护。该方案使用RDS确保数据库的可靠性、可用性和安全性,结合ECS和DTS服务,实现自建数据库平滑迁移到云端,支持WordPress等应用的快速部署与运行。通过一键部署模板,用户能迅速搭建ECS和RDS实例,完成数据迁移及应用上线,显著提升业务灵活性和效率。
|
7月前
|
存储 数据管理 关系型数据库
数据库分库分表的原因?
分库分表通过减少单库单表负担来提升查询性能。垂直切分按业务耦合度将表或列分布于不同库或表中,减少数据量,优化性能。水平切分则按数据逻辑关系将表分散至多库多表,减小单表数据量,实现分布式处理。选择方式需根据具体需求决定。
117 19
|
7月前
|
运维 监控 Cloud Native
云原生之运维监控实践:使用 taosKeeper 与 TDinsight 实现对 时序数据库TDengine 服务的监测告警
在数字化转型的过程中,监控与告警功能的优化对保障系统的稳定运行至关重要。本篇文章是“2024,我想和 TDengine 谈谈”征文活动的三等奖作品之一,详细介绍了如何利用 TDengine、taosKeeper 和 TDinsight 实现对 TDengine 服务的状态监控与告警功能。作者通过容器化安装 TDengine 和 Grafana,演示了如何配置 Grafana 数据源、导入 TDinsight 仪表板、以及如何设置告警规则和通知策略。欢迎大家阅读。
231 0
|
19天前
|
人工智能 运维 关系型数据库
数据库运维:mysql 数据库迁移方法-mysqldump
本文介绍了MySQL数据库迁移的方法与技巧,重点探讨了数据量大小对迁移方式的影响。对于10GB以下的小型数据库,推荐使用mysqldump进行逻辑导出和source导入;10GB以上可考虑mydumper与myloader工具;100GB以上则建议物理迁移。文中还提供了统计数据库及表空间大小的SQL语句,并讲解了如何使用mysqldump导出存储过程、函数和数据结构。通过结合实际应用场景选择合适的工具与方法,可实现高效的数据迁移。
133 1
|
2月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
4月前
|
关系型数据库 MySQL Java
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库

热门文章

最新文章