数据库分布式架构巧设计,水平拆分不再难

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云原生数据库 PolarDB 分布式版,标准版 2核8GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 在阿里云生态日,袋鼠云首席数据库架构师赵晓宏分享了《高容量大并发数据库服务——数据库分布式架构设计》。他从分布式需求、拆分原则、拆分难点及解决方案、数据库规范设计、运维相关五个方面进行了分享。在分享中,他主要介绍了水平拆分的原则以及解决方案,分享了DRDS的架构与实践。

在阿里云生态日,袋鼠云首席数据库架构师赵晓宏分享了《高容量大并发数据库服务——数据库分布式架构设计》。他从分布式需求、拆分原则、拆分难点及解决方案、数据库规范设计、运维相关五个方面进行了分享。在分享中,他主要介绍了水平拆分的原则以及解决方案,分享了DRDS的架构与实践。

 

以下内容根据直播视频整理而成。

 

分布式需求

为什么要做分布式?首先是因为高并发,分布式应用带来更大量的数据库请求;高容量,业务增长,产生大量在线数据,关系型数据库要支持业务就要支持大数据量的存储;资源向上扩展存在天花板,无法做到无限制的纵向扩展;支撑业务高速发展,平滑扩容。

拆分原则

051b421049878add9a7e33b37e6148ace02858ca

上图是数据库改造的进阶。业务初期,客户量比较少,可能在一个实例上把所有的服务、数据都能存放下来并且支持业务的发展。当客户量和数据量变大时,数据库很容易成为一个瓶颈,怎么去做改造?建议先做服务化的改造,不同的业务模块做一个垂直的梳理,不同服务的数据库相互隔离,中间的交互由业务去实现,这样数据库就可以分布在不同的实例上,并且可以支持相对较高的并发和容量。再往上发展时,单实例依然是一个瓶颈,此时要考虑做一个水平的拆分,把一个服务的数据分布在不同的实例上。拆分需要循序渐进,先垂直后水平,防止过度设计,紧密结合业务及应用架构设计。

拆分难点及解决方案

水平拆分难点

首先是系统复杂度增大,系统架构设计需要彻底的重构;技术挑战,应用需要处理复杂的分布式逻辑;稳定性挑战;分布式的局限性,不支持跨库join、分布式事务、全局sequence等。

解决方案:客户端实现数据路由

825db0289a9d5aad234f3c55321eae1f3c48052d

该方案的优点是不需要引入中间件,直接在客户端配置,程序把控力强,简单场景方便使用。缺点是对代码侵入性强,因为代码端要去管理路由;配置管理复杂,如果配置错误,数据可能完全乱掉,修复也会比较复杂。

解决方案:数据库中间件

b53e3666f239a0fc291edc0163b6f65b6dc52825

使用中间件可以实现自动的分库分表,对应用透明,使用类似于单实例;使用门槛低,应用只需要考虑分布式事务,跨库join,而不用考虑数据的路由;方便水平扩容。使用了中间件之后,应用看到的还是单实例数据库,不需要考虑分布式的情况,对开发来说是比较有优势的。

水平切分原理及设计原则

3146548d78dd526e230b1d3c5226d130382ba703

数据库拆分都是用字段hash把数据分配到不同的底层库。选择的原则是拆分尽量均匀并且一次查询尽量落到单实例库上,这样能够更快的返回,而且有更大的并发。那么,中间件怎么实现数据库的分布式?如上图所示,选择了MEMBE_ID字段,将字段值做一个hash分类到不同库中。比如发出查询test1234的请求,就会直接转到库1里。

数据访问——SQL转发

8d9bceb8987f9a62044ea888c33c56e115017fc2

当我们输入一个SQL语句:select * from tb1 where member_id =‘test1234’,APP输入请求会转到中间件,中间件会对这条SQL语句进行解析,按照路由规则把这条请求分发到底层的数据库,库2还有一个请求是查询MEMBE_ID是1234的数据。最终的查询结果会返回DRDS层做一个聚合,速度也比较快。

DRDS

阿里云的DRDS是淘宝积累多年的产品。DRDS具有五大功能:分库分表,DRDS的核心功能,支持数据的多维度切分和路由访问;内建读写分离功能,可以灵活配置访问权重;自带全局唯一ID组件,DRDS层维护全局的sequence;小表广播,查询引擎识别和下推复杂查询,兼容98% MySQL语法;弹性扩容组件实现自动化在线水平扩容。

3a759a8a5907a06c4b9f5453992cafae93016431

DRDS框架如上图所示。网络层完全兼容MySQL协议,可以做SQL解析、执行计划,实现路由功能来决定SQL分配到一个库还是多个库。结果集处理包括排序、聚合等动作,此外还支持一些管理工作。底层依赖MySQL协议和底层物理库通信。

8bf0dbbec7453c9d30605f8e509b9a238d5dd252

DRDS物理层框架上层是应用服务器,连接DRDS的一个集群。DRDS是集群式的,不是主备,保证了可扩展和高可用性。集群连接的是底层的MySQL。

7d19e61da0f0d6737ebfa7f2abe64d2ed5cd21ac

主库和读库是使用数据库的原生复制实现的,数据是强一致的。DRDS会自动判断请求,然后做一个分发,事务型的操作会全部路由到一个主库上。

f6058e129dcf175f9d276ca93b14190bfc653a70

下推join是指把join从DRDS层往下,在MySQL层实现join。所以,在业务设计上要避免跨库join,比如有两张表join,则必须保证有相同的拆分原则,上图中table1和table2都是根据ID做拆分,相同的ID分配到相同的数据库。

4da74954cf9a50cd6e24065a9080bf189d2ed590

广播表也是避免跨库join的一个方法。上图中,table1已经做过拆分,table2没有做过拆分,它是一个小表,我们可以把它的数据完全冗余到每一个库里面,那么任何一个跟table2做join的查询都能在一个库去实现。最后,把结果在DRDS层做聚合。

数据库规范设计:最佳实践

查询应尽可能带上分库条件,如果说一个表拆分到底层10个库,每次查询如果都带上分库条件的话DRDS很轻易把这个请求路由到底层库上,如果没有分库条件,DRDS不知道数据到底存放在哪里,这样的话会分别从10个库取数据,然后在DRDS层做聚合,网络、计算的开销比较大。Join有几种解决方案:尽可能参与Join的每张表都带上相同的分库条件,这样就还会限定在一个库里面;分库键=分库键的Join;广播表Join。单库事务尽量限制在单库范围内,避免引入分布式事务。

运维相关

cc0a3c09e4ce243441cb6aa2fc97b3c18b0c3913

DRDS支持直接实例的创建、释放以及拆分库的创建、建表的接入。数据运维支持导入、扩容、小表复制(即小表广播,DRDS层自己实现数据的复制)、规格升级(纵向的升级)。数据服务包括分库分表、读写分离、异构索引(从不同的维度在大表中查询,如何选择拆分?异构索引底层也是做数据冗余,根据不同的拆分情况做查询)、DRDS指令。

b290b92d16b387b8fda542d0fcfc5362ff18f094

EasyDB 是数据库的自动化管理平台,支持Oracle和MySQL、Redis,能够实现基本的监控、审计、备份、高可用、一键切换、资源管理。
相关实践学习
跟我学:如何一键安装部署 PolarDB-X
《PolarDB-X 动手实践》系列第一期,体验如何一键安装部署 PolarDB-X。
相关文章
|
5天前
|
存储 安全 数据管理
新型数据库技术:基于区块链的分布式数据存储系统
传统数据库系统面临着中心化管理、数据安全性和可信度等方面的挑战。本文介绍了一种基于区块链技术的新型数据库系统,通过分布式存储和去中心化的特性,提高了数据的安全性和可信度,同时实现了高效的数据管理和共享。该系统在多个领域如金融、医疗和物联网等具有广阔的应用前景。
|
5天前
|
机器学习/深度学习 存储 人工智能
新一代数据库技术:融合人工智能与分布式系统的未来前景
传统数据库技术在应对大规模数据处理和智能化需求方面逐渐显露出瓶颈。本文探讨了新一代数据库技术的发展趋势,重点关注了人工智能与分布式系统的融合,以及其在未来数据管理和分析中的潜在优势。通过深度学习和自动化技术,新型数据库系统能够实现更高效的数据处理和智能化决策,为企业带来更灵活、可靠的数据解决方案。
|
5天前
|
算法 Go 分布式数据库
构建高可用的分布式数据库集群:使用Go语言与Raft共识算法
随着数据量的爆炸式增长,单一数据库服务器已难以满足高可用性和可扩展性的需求。在本文中,我们将探讨如何使用Go语言结合Raft共识算法来构建一个高可用的分布式数据库集群。我们不仅会介绍Raft算法的基本原理,还会详细阐述如何利用Go语言的并发特性和网络编程能力来实现这一目标。此外,我们还将分析构建过程中可能遇到的挑战和解决方案,为读者提供一个完整的实践指南。
|
5天前
|
存储 监控 关系型数据库
关系型数据库设计集群架构节点规划
【5月更文挑战第6天】在实际项目中,可能还需要考虑其他因素,如安全性、合规性、成本等。因此,在进行关系型数据库设计集群架构节点规划时,建议与经验丰富的数据库管理员和架构师合作,以确保项目的成功实施和稳定运行。
22 4
关系型数据库设计集群架构节点规划
|
5天前
|
存储 负载均衡 关系型数据库
关系型数据库设计集群架构架构选择
【5月更文挑战第6天】还可以考虑使用现有的数据库管理系统(DBMS)提供的集群解决方案,如MySQL的InnoDB Cluster、PostgreSQL的Streaming Replication和Patroni等。这些解决方案已经经过了广泛测试和验证,可以大大降低集群架构设计和实现的难度。
19 1
关系型数据库设计集群架构架构选择
|
5天前
|
分布式计算 负载均衡 关系型数据库
关系型数据库设计集群架构需求分析
【5月更文挑战第6天】关系型数据库设计集群架构的需求分析是一个综合考虑业务需求、性能、可用性、可扩展性、数据一致性、安全性、成本效益和技术选型等多个方面的过程。通过深入分析和评估,可以设计出满足业务需求且高效可靠的数据库集群架构。
20 3
关系型数据库设计集群架构需求分析
|
5天前
|
缓存 监控 负载均衡
关系型数据库设计集群架构
【5月更文挑战第5天】关系型数据库设计集群架构
21 3
关系型数据库设计集群架构
|
5天前
|
存储 负载均衡 Go
【Go 语言专栏】使用 Go 语言实现分布式数据库操作
【4月更文挑战第30天】本文探讨了使用Go语言实现分布式数据库操作,强调其在并发性能、网络编程、语法简洁和跨平台性上的优势。关键技术和步骤包括数据分片、数据同步、负载均衡及故障转移。通过实例分析和挑战解决,展示了Go语言在大规模数据处理中的高效与可靠性,为开发者提供指导。
|
5天前
|
SQL 监控 关系型数据库
TiDB 分布式数据库快速入门详解
这些示例展示了TiDB的一些基本操作。实际使用时,你可能需要根据具体的业务需求和环境进行调整和优化。
|
5天前
|
存储 运维 物联网
【专栏】OceanBase 是一款先进的分布式数据库系统,以其分布式架构、高扩展性、高可用性和强一致性特点,应对大规模数据处理挑战
【4月更文挑战第29天】OceanBase 是一款先进的分布式数据库系统,以其分布式架构、高扩展性、高可用性和强一致性特点,应对大规模数据处理挑战。它支持混合负载,适用于金融、电商和物联网等领域,提供高性能、低成本的解决方案。尽管面临技术复杂性、数据迁移和性能优化等问题,通过合理策略可克服挑战。随着技术发展,OceanBase 在数字化时代将持续发挥关键作用。