分布式数据库中间件DDM的实现原理

随着数据量不断增大,传统的架构模式难以解决业务量不断增长所带来的问题,特别是在业务成线性、甚至指数级上升的情况。此时我们不得不通过水平扩展,把数据库放到不同服务器上来解决问题,也就是我们说的数据库中间件。


作为数据库中间件,分布式数据库中间件DDM将底层数据库存储引擎以集群方式管理起来,用户使用非常方便。应用程序不需要关心具体有多少分片。类似操作单机数据库,用户通过DDM管理控制台进行数据库运维,使用JDBC等驱动服务或SQL客户端连接数据库,进行数据读写。


DDM服务的业务架构图示



分片是解决数据库存储容量限制的直接途径。分片包括垂直分片与水平分片两种方式。


垂直分片

垂直分片又叫纵向分割,即以逻辑表为单位,把原有数据库切分成多个数据库。切分后不同的表存储在不同的数据库上。

垂直分片与业务架构设计有密切的联系。比如从业务领域对系统进行架构优化,分成多个子业务系统,各个子业务系统耦合度较低。子业务系统间以接口方式进行数据通信和数据交换。垂直拆分后业务清晰,拆分规则明确,系统之间容易整合与扩展。一般用于数据库上层架构设计。


垂直分片示意图


水平分片

水平分片又叫横向分割,即以逻辑表中的数据行记录为单位,把原有逻辑数据库切分成多个物理数据库分片,表数据记录分布存储在各个分片上。

水平分片主要用业务架构无法继续细分,而数据库中单张表数据量太大,查询性能下降的场景。通过水平分片,即解决单库容量问题,同时提高并发查询性能。


水平分片示意图



DDM实现了自动水平分片,应用无需关心某个数据该存储在哪一块分片上。对逻辑表水平分片需要依据一定的分片规则,例如一个订单跟踪系统(见上图),我们选取订单号(OrderId)作为拆分键,分别对“订单流水表”、“订单详情表”以及“物流跟踪表”进行水平拆分,拆分规则为对键值Hash后求模,则分片计算规则如下:

H(Key(OrderId)) = Hash(Key(OrderId))%N

其中,N表示一共有N个数据分片,H(Key(OrderId))表示该订单经过订单号Hash并求模后存储的分片编号。

分片后数据存储示意图


路由分发

路由分发与水平分片同为DDM的基础功能。在分布式数据库中,路由的作用即将SQL语句进行解析,并转发到正确的分片上,保证SQL执行后得到正确的结果,并且节约QPS资源。例如:订单支付系统包含了shard0、shard1、shard2三个分片,订单号2017010112345678的订单数据存储在shard0分片上,则应该将以下语句路由分发到shard0分片上执行。

select Customer, OrderStatus, CreateDate from Order

where OrderId = ‘2017010112345678‘;

如果同时路由到shard0、shard1、shard2三个分片,会造成多余的查询,浪费资源;如果路由到shard1、shard2分片,则得不到正确的返回结果。

DDM对单张表的路由解析流程如下:


单张表的路由解析流程


读写分离

数据库中对计算和缓存资源消耗较多的往往是密集或复杂的SQL查询。当系统资源被查询语句消耗,反过来会影响数据写入操作,进而导致数据库整体性能下降,响应缓慢。因此,当数据库CPU和内存资源占用居高不下,且读写比例较高时,可以为数据库添加只读实例。

添加只读实例的作用有以下:

1、将查询非事务性查询SQL路由到只读实例中执行,主实例上执行事务性SQL,在很大程度上缓解主实例上的S锁与X锁的竞争。

2、对只读实例上的表可配置不提供事务支持的数据库引擎,进而提升查询效率。

3、增加只读实例,也相当于数据库横向扩展,直接增加负载能力,同时增加数据冗余,确保数据库高可用。

DDM服务实现了自动读写分离,用户购买了RDS只读实例后,将只读实例信息同步到DDM中即可,无需再做其他配置。同时,DDM支持用户在SQL中自定义读写分离策略,具体用法请参考如何实现读写分离。

读写分离示意图


平滑扩容

随着业务增长,逻辑库存储空间不足,并发压力较大,此时可对DDM实例逻辑库进行平滑扩容,通过增加RDS实例来提高数据存储能力与并发支持能力。

平滑扩容是一种水平扩容方式,通过增加RDS实例的数量来提升总体数据存储容量,把分库平滑扩容到新增加的RDS实例上,保证所有的数据都是均衡分布在每个分库上,降单个RDS实例的处理压力。平滑扩容原理如下图所示。

平滑扩容原理



以上就是对分布式数据库中间件DDM实现原理的浅析,目前华为云DDM推出了免费体验活动,想要了解更多,欢迎前往分布式数据库中间件查看。

原文地址:http://blog.51cto.com/13739602/2131370

时间: 2024-10-11 09:29:32

分布式数据库中间件DDM的实现原理的相关文章

【干货】浅谈分布式数据库中间件之分库分表

分库分表,顾名思义就是把原本存储于一个库的数据分块存储到多个库上,把原本存储于一个表的数据分块存储到多个表上.那么关于分库分表,你了解多少呢?接下来,我们将从什么是数据分片及如何进行分片两方面对DDM分库分表做一个阐释.什么是数据分片 分片是解决数据库存储容量限制的直接途径.分片包括垂直分片与水平分片两种方式. 垂直分片 垂直分片又叫纵向分割,即以逻辑表为单位,把原有数据库切分成多个数据库.切分后不同的表存储在不同的数据库上. 垂直分片与业务架构设计有密切的联系.比如从业务领域对系统进行架构优化

分布式数据库中间件的实现原理介绍四:平滑扩容

声明:本文并非原创,转自华为云帮助中心的分布式数据库中间件(DDM)服务的产品介绍. 随着业务增长,逻辑库存储空间不足,并发压力较大,此时可对DDM实例逻辑库进行平滑扩容,通过增加RDS实例来提高数据存储能力与并发支持能力. 平滑扩容是一种水平扩容方式,通过增加RDS实例的数量来提升总体数据存储容量,把分库平滑扩容到新增加的RDS实例上,保证所有的数据都是均衡分布在每个分库上,降单个RDS实例的处理压力. 平滑扩容使用限制如下: RDS实例与DDM实例需要在相同VPC,且RDS实例没有被其它DD

分布式数据库中间件的实现原理介绍一:分库分表【转】

声明:本文并非原创,转自华为云帮助中心的分布式数据库中间件(DDM)服务的产品介绍. 分片是解决数据库存储容量限制的直接途径.分片包括垂直分片与水平分片两种方式. 垂直分片 垂直分片又叫纵向分割,即以逻辑表为单位,把原有数据库切分成多个数据库.切分后不同的表存储在不同的数据库上. 垂直分片与业务架构设计有密切的联系.比如从业务领域对系统进行架构优化,分成多个子业务系统,各个子业务系统耦合度较低.子业务系统间以接口方式进行数据通信和数据交换. 图2 垂直分片示意图  垂直拆分后业务清晰,拆分规则明

分布式数据库中间件–(3) Cobar对简单select命令的处理过程

友情提示:非原文链接可能会影响您的阅读体验,欢迎查看原文.(http://blog.geekcome.com) 原文地址:http://blog.geekcome.com/archives/284 在上一篇中介绍了Cobar和client初次建立连接的过程,Cobar监听端口,client发起连接请求,Cobar发送握手数据包,client发送认证数据包最后依据认证的结果Cobar向client发送认证结果. 在认证成功后Cobar会将该连接的回调处理函数由FrontendAuthenticat

分布式数据库中间件–(2) Cobar与客户端的握手认证

Cobar启动完成,监听特定端口.整个认证的流程图: NIOAcceptor类继承自Thread类,该类的对象会以线程的方式运行,进行连接的监听. NIOAcceptor启动的初始化过程如下: 1 .打开一个selector,获取一个ServerSocketChannel对象,对该对象的socket绑定特定的监听端口,并设置该channel为非阻塞模式,然后想selector注册该channel,绑定感兴趣的事件位OP_ACCEPT. 01 public NIOAcceptor(String n

分布式数据库中间件–(1) Cobar初始化过程

Cobar-Server的源代码地址:GitHub 欢迎Fork. 官方文档描写叙述Cobar的网络通信模块见下图. Cobar使用了Java的NIO进行处理读写.NIO是Java中的IO复用.而不须要对每一个连接都建立一个处理线程. 具体请看 非堵塞I/O–Java NIO教程 Cobar的初始化流程图例如以下: 在Cobar实例化过程中三个XML配置文件的载入类图关系例如以下(具体的成员没有标明): 这样Cobar系统就在执行了: 每一个Processor都启动反应堆的两个线程R和W来处理N

从零开发分布式数据库中间件 一、读写分离的数据库中间件(转)

从零开发分布式数据库中间件 一.读写分离的数据库中间件 .embody { padding: 10px 10px 10px; margin: 0 -20px; border-bottom: solid 1px #ededed } .embody_b { margin: 0; padding: 10px 0 } .embody .embody_t,.embody .embody_c { display: inline-block; margin-right: 10px } .embody_t {

现代Java服务端开发核心技术之分布式数据库中间件MyCAT入门

现代Java服务端开发核心技术之分布式数据库中间件MyCAT入门 现代Java服务端开发核心技术 MyCAT系统环境搭建 如下列表展示了搭建MyCAT运行时环境所需要的软件及其版本说明. 软件名称 软件版本 os centos7.5 JDK JDK1.8u191 MySQL MySQL5.7 Mycat Mycat1.6.5 Navicat Navicat12.08 在非集群的环境下,MyCAT仅仅依赖JDK就可以良好的运行在Windows,Linux,macOS等操作系统之上. CentOS7

分布式数据库中间件对比总结

摘要:目前数据库中间件有很多,基本这些中间件在下都有了解和使用,各种中间件优缺点及使用场景也都有些心的.所以总结一个关于中间件比较的系列,希望可以对大家有帮助. 分布式数据库中间件对比总结(1) 目前数据库中间件有很多,基本这些中间件在下都有了解和使用,各种中间件优缺点及使用场景也都有些心的.所以总结一个关于中间件比较的系列,希望可以对大家有帮助. 1. 什么是中间件 传统的架构模式就是 应用连接数据库直接对数据进行访问,这种架构特点就是简单方便. 但是随着目前数据量不断的增大我们就遇到了问题: