欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数据库分布式架构巧设计_水平拆分不再难 中间件配置管理sqlcLotus 

程序员文章站 2024-02-09 21:43:28
...
阅读原文请点击:http://click.aliyun.com/m/23435/
摘要: 在阿里云生态日,袋鼠云首席数据库架构师赵晓宏分享了《高容量大并发数据库服务——数据库分布式架构设计》。他从分布式需求、拆分原则、拆分难点及解决方案、数据库规范设计、运维相关五个方面进行了分享。在分享中,他主要介绍了水平拆分的原则以及解决方案,分享了DRDS的架构与实践。

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



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



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

拆分原则
051b421049878add9a7e33b37e6148ace02858ca

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

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

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

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

解决方案:数据库中间件
b53e3666f239a0fc291edc0163b6f65b6dc52825

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

水平切分原理及设计原则
3146548d78dd526e230b1d3c5226d130382ba703

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

数据访问——SQL转发

阅读原文请点击:http://click.aliyun.com/m/23435/