DRDS:分布式数据库服务

最近在做阿里云相关的项目,用到阿里的很多接口服务的API,于是想把这段项目做个总结,顺便梳理下阿里云的云计算的相关知识点。

DRDS:分布式数据库服务。

1.相关术语

DRDS(Distribute Relational Database Service),分布式关系型数据库服务:分布式数据库服务,基于rds,提供分库分表功能。

DrdsInstance(Distribute Relational Database Instance),分布式数据库实例:一个独立占用物理内存的分布式数据库服务进程,可以有不同的规格,规格会决定该实例的性能(包含IOPS、连接数)。

DrdsInstanceId(Distribute Relational Database  Instance ID),分布式数据库实例名:实例名可标识一个实例的名称,全局唯一。

DrdsDB(Distribute Relational Database),分布式数据库:Drds数据库是在一个实例下创建的逻辑单元,一个实例可以创建多个数据库,在实例内数据库命名唯一,所有数据库都会共享该实例的资源。

DrdsDBName(Distribute Relational Database  Name),分布式数据库名:标识每个分布式DB的名称,在一个实例范围内,数据库名惟一。

DrdsDBAccount(Distribute Relational Database  Accoun),分布式数据库帐号/帐号:帐号是标识数据库的访问权限,目前一个数据库对应一个帐号,一个帐号关联一个数据库。

2.DRDS产品简介

2.1 DRDS产品概要:

单机数据库能够方便的满足用户对于关系查询类的需求,是目前业务应用中最常使用的软件。然而,对于很多应用而言,单机数据库最终都会碰到单机性能上的天花板,在TPS(系统吞吐量)/QPS(每秒查询率)/内存容量/磁盘容量等等一系列系统资源上会碰到各类限制。DRDS的主要目标,就是帮您解决这方面的各类问题,他主要提供了两个功能:读写分离和数据库切分。

读写分离,能够允许您实现一台机器写入,多台机器读取,这对于读多写少的应用,能够以极低的成本解决系统的瓶颈。

数据库切分是一个解决系统存储瓶颈的最终极解决方案,数据库切分的核心思想其实很简单,就是分而治之。将数据分散到多台机器,并保证请求能够平均的分发到这些机器上,就可以以极低的成本来解决业务的各类性能瓶颈。

当然,切分也是有代价的,最明显的代价就是,分布式数据库会对一些原有单机数据库的场景进行限制,因为这些操作,在分布式环境下的延迟或效率非常低效,就算是能够实现出来,也会因为性能问题而无法使用。

针对这类问题,阿里的中间件团队曾经成功的协助过近300个业务应用系统实现了数据库的切分,因此,我们在这个领域内积累了大量的实战经验和成熟的产品,希望这类产品也能够为您提供相同的服务,让您的数据库再也不必担心性能问题。

2.2DRDS与MySQL兼容性:

支持点:

DRDS支持90%以上MySQL sql,包括常用的insert/update/replace,select/join/union/subquery/exist等各种语法+条件组合

DRDS抽象出21种数据类型,int/float/double/long/decimal/data/time/datetime/timestamp/bit/bits...

DRDS兼容MySQL 80%的函数实现,主要包括:数学、字符串、时间

DRDS支持map/reduce计算模型

DRDS支持函数的二次计算,如如count(id) + 1 , sum(pv)/count(person)

DRDS支持跨库join的函数计算,比如select count(*)+1 from a join b on a.id = b.id.

DRDS支持特殊类型计算,比如count(distinct id).

DRDS支持跨数据节点join(分布式join)

DRDS支持跨数据节点多重嵌套子查询

DRDS支持多种并行执行模式

目前不支持:

不支持group by/order by 列为函数列且不存在与select列中

不支持join列为函数计算,比如on.id=b.id+1

DRDS server未开放DDL支持,只能在控制台做DDL

不支持复杂update/delete语句(比如update多表,有join等)

不支持强一致分布式事务

2.3 数据水平拆分

DRDS帮助您实现分库分表,能够将原来只能在单节点执行的SQL,转变为多节点执行的SQL,如同单个数据库体验。通过支持系统实现数据存储的动态水平扩展,目前DRDS在公司内已经有超过几百个应用系统使用超过5年,高效安全且稳定。

但是分布式数据库和单机数据库本身必然会存在一定的使用习惯上的不同,例如低效的分布式事务、分布式join等,针对这些问题,DRDS的选择是:优先考虑性能和稳定性,兼顾软件的兼容性。

与市面上的一些开源的数据库切分工具相比,DRDS能够更智能的分析您的SQL,在结果集合并和分布式join优化等关键领域,我们都有成熟解决方案,能够帮您解决在分布式数据库场景中面临的大部分问题。

2.4 平滑扩容

DRDS能够帮助用户实现在线的数据库平滑扩容,让用户能够按需的自由增减数据库,从而实现弹性按需使用数据库集群。

在线数据库扩容的重点在于“在线”两字,也就是用户不需要停止业务系统进行割接操作,直接就可以添加新的RDS节点到集群中,实现无缝的自由扩展。DRDS则将整个扩容的过程分为几个阶段,包括全量迁移,增量同步,切换数据库等几个步骤。数据会提前进行搬迁,并进行增量并行同步一段时间,因此,我们可以在非常短的时间内(秒级别)完成数据库的最终扩容切换工作,对您的业务没有影响。

2.5 小表广播

在一些大的业务表进行了切分后,总会存在一些表的数据量不大,更新量也不大的原始信息表。这些表往往会与我们的切分后大表进行join操作。这种操作物理上就会造成分布式join查询,效率从整体上会比较低下。

针对这种分布式join的场景,我们开发了OETL 专用工具来帮您进行小表广播,将原信息表的所有数据(包括增量更新)全部自动的广播到大表的机器上,这样,就可以让原来的分布式查询变成单机本地查询了。

2.6  全局唯一ID

在分布式环境下,原有的mysql sequence生成机制无法高效的生成全局唯一的sequence.我们借鉴了oracle的sequence生成样例,实现了一个在mysql基础上的高效sequence生成器,能做到没有单点性能瓶颈,具备大并发获取和低延迟特性。

DRDS sequence功能的目标只是为了保证数据的全局唯一,虽然基本上是按时间序列获取的,但并不全局有序。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。