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

本文涉及的产品
云原生数据库 PolarDB 分布式版,标准版 2核8GB
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 在阿里云生态日,袋鼠云首席数据库架构师赵晓宏分享了《高容量大并发数据库服务——数据库分布式架构设计》。他从分布式需求、拆分原则、拆分难点及解决方案、数据库规范设计、运维相关五个方面进行了分享。在分享中,他主要介绍了水平拆分的原则以及解决方案,分享了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 中各个节点的含义,以及如何对不同配置的PolarDB-x 进行压测。
相关文章
|
1月前
|
SQL NoSQL 前端开发
基于BS架构的饰品购物平台设计与实现(程序+文档+数据库)
基于BS架构的饰品购物平台设计与实现(程序+文档+数据库)
|
1月前
|
Oracle 关系型数据库 分布式数据库
分布式数据库集成解决方案
分布式数据库集成解决方案
200 0
|
2月前
|
存储 监控 安全
360 企业安全浏览器基于阿里云数据库 SelectDB 版内核 Apache Doris 的数据架构升级实践
为了提供更好的日志数据服务,360 企业安全浏览器设计了统一运维管理平台,并引入 Apache Doris 替代了 Elasticsearch,实现日志检索与报表分析架构的统一,同时依赖 Doris 优异性能,聚合分析效率呈数量级提升、存储成本下降 60%....为日志数据的可视化和价值发挥提供了坚实的基础。
360 企业安全浏览器基于阿里云数据库 SelectDB 版内核 Apache Doris 的数据架构升级实践
|
3月前
|
存储 缓存 关系型数据库
鱼和熊掌如何兼得?一文解析RDS数据库存储架构升级
阿里云RDS率先推出新型存储类型通用云盘,提供低延迟、低成本、高持久性的用户体验。
鱼和熊掌如何兼得?一文解析RDS数据库存储架构升级
|
4月前
|
存储 SQL Java
数据库TiDB-01.数据库架构概述
TiDB兼容MySQL 5.7协议,支持水平扩容或者缩容的金融级高可用的云原生分布式数据库。
264 2
数据库TiDB-01.数据库架构概述
|
3月前
|
NoSQL 中间件 API
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)(下)
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)
80 2
|
3月前
|
NoSQL Java API
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)(上)
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)
71 0
|
1月前
|
存储 SQL 分布式计算
TiDB整体架构概览:构建高效分布式数据库的关键设计
【2月更文挑战第26天】本文旨在全面概述TiDB的整体架构,深入剖析其关键组件和功能,从而帮助读者理解TiDB如何构建高效、稳定的分布式数据库。我们将探讨TiDB的计算层、存储层以及其他核心组件,并解释这些组件是如何协同工作以实现卓越的性能和扩展性的。通过本文,读者将能够深入了解TiDB的整体架构,为后续的学习和实践奠定坚实基础。
|
1月前
|
存储 供应链 安全
新一代数据库技术:融合区块链与分布式存储的未来前景
传统的数据库技术在面对大规模数据存储和安全性方面存在诸多挑战,而新一代数据库技术正在崭露头角。本文将探讨如何融合区块链与分布式存储技术,为数据库领域带来全新的发展机遇,并分析其在实际应用中的潜力与前景。
|
1月前
|
运维 关系型数据库 分布式数据库
客户说|从4小时到15分钟,一次分布式数据库的丝滑体验
识货APP致力于为广大用户提供专业的网购决策指导,为喜欢追求性价比的网购朋友带来及时劲爆的运动、潮流、生活、时尚等网购优惠资讯,产品覆盖国内外主流购物商城。它提供了全球范围内的时尚品牌、潮流单品的信息,帮助用户发现和购买最新、最热、最具性价比的时尚商品。近年来,各大电商平台上的商品信息持续增加,海量商品信息增加了消费者的选购成本。识货从用户视角出发,不断整合行业渠道供给,降低发现和筛选成本,帮助用户更高效地购买到最具性价比的产品。