0
金山云DragonBase
编辑
简介:金山云作为先进的云服务提供商,拥有多年的分布式数据库技术和运营经验积累,针对海量存储、高并发、高可靠和高可用等应用场景进行了大量实践。通过对分布式数据库各类应用场景的深入分析,我们进行了大量普适性和针对性的优化和定制(如分布式事务、数据强一致等),构建了金山云分布式数据库DragonBase。

目录

一、DragonBase产品介绍

1.1 产品概述

DragonBase是金山云打造的分布式数据库产品,可以提供关系型数据库服务、分布式数据库服务和全面的数据库管理服务。DragonBase可提供资源虚拟化、多租户、弹性扩容、数据备份恢复、数据迁移等能力,同时具备细粒度权限管理、访问控制、安全审计和加密等安全类功能。既支持标准x86平台部署,也支持国产化平台部署,并提供“两地三中心”和“三地五中心”的地域级故障自动无损容灾的能力。

DragonBase旨在为企业用户提供高可用、高可靠、高性能、高安全、可扩展、强一致和高度兼容的分布式数据库服务。

1.2 产品架构

DragonBase产品架构如下图:

DragonBase01.png

如上图,DragonBase产品架构采用计算与存储分离的分布式架构,其主要包括数据库管理平台和数据库服务两部分。

其中数据库服务集群包括:

计算引擎DragonServer(DS)

计算引擎接收来自应用的SQL请求,经过SQL解析、执行优化和并行计算,将数据访问请求路由到存储引擎层,归集数据并整理后返回给应用侧。

存储引擎DragonData(DD)

存储引擎即真正存储数据的实例节点,存储引擎以Group为单位,划分为若干个数据分片,共同存储全局数据。在Group内部,由若干个数据副本组成主从关系(一主若干从),形成一个高可用复制组,即主副本上的数据变更会自动更新到从副本上。存储引擎包含了事务层和存储层,其中存储层包括日志存储和数据存储。

全局管理服务GMS

全局管理服务GMS有若干个节点提供强一致的数据管理服务,包括全局序列、全局元数据和全局事务版本,其中:

  • 全局序列:提供了全局有序的事务提交顺序,便于跟踪全局范围内的事务提交的先后顺序。
  • 全局元数据:包括计算引擎DragonServer服务列表、存储引擎DragonData服务列表、高可用复制组Group列表以及高可用复制组内部主从关系拓扑等。
  • 全局事务版本:记录了全局事务和分支事务在存储引擎上的分布以及事务的状态信息,并负责推动全局一致性版本更新。提供全局范围内可重复读(RR)级事务隔离级别。

数据库管理平台包括:

接入服务

LB:提供负载均衡服务

控制台:提供给用户的图形化操作界面

API:提供给用户用以自助管理

SDK:提供给用户java客户端工具包SDK

安全:提供白名单、安全组、安全证书等安全服务

管控服务

控制系统:负责包括实例申请、IP绑定、参数管理、故障切换、拓扑关系建立、版本升级、套餐升级等。

HA高可用系统:负责探测计算引擎和存储引擎故障的服务单元,当探测到故障时,会触发控制系统发起故障切换、新实例申请、故障实例拉起等一系列动作。

运维系统:包括资源管理、实例管理、日志管理、参数管理、数据统计等运维功能。

校验系统:包括服务集群状态校验、备份状态校验、数据库主从数据一致性校验等。

监控系统:对物理机资源、虚拟化资源、网络、数据库实例、集群拓扑、数据备份、服务状态等多维度的监控,当产生故障时触发告警系统发出告警信息。

数据服务

数据传输服务DTS:提供同构或异构系统间的数据传输,在数据灾备、数据迁移、离线数据分析、数据订阅等场景下使用。

分布式事务服务DTX:提供跨微服务的分布式事务框架,用户通过简单的注解即可获得跨微服务操作的业务一致性。

数据备份服务DBS:实现数据库存储引擎数据的远程备份,支持全量备份、增量备份和备份校验,并能利用备份数据重建数据库存储引擎实例,提供高可靠数据库服务。

数据管理服务DMS:提供一体机式数据库类型和多种环境的web管理终端,方便用户快速搭建数据库服务,提供数据导入导出、安全审计、权限管理、数据结构管理等功能。

1.3 产品部署

DragonBase可以以实例为维度通过数据库管理平台进行数据库服务部署,用户可根据操作引导,自助选择对应规格及相关配置,后端控制系统将自动完成包括实例创建、拓扑建立等相关操作。用户可以通过控制台进行实例的管理,包括版本升级、配置变更、服务启停、资源回收等。常用操作均可利用OpenAPI/SDK实现。

DragonBase支持单数据库实例部署、单分片高可用部署和分布式部署模式,可根据实际使用需求选择不同的部署模式。

1.4 产品优势

金山云DragonBase经过五年多的打磨,构建起自身的产品优势。

高性能

硬件层面,全面支持高性能存储介质如NVME,Optane3Xpoint等。软件层面,通过分布式并行计算、读写分离和流量智能调度、连接池管理以及异步事务优化等多种手段,大幅提高业务响应效率。

高可靠

通过强一致的多副本管理、灵活灾备策略和完备的备份体系,配合链路、数据加密技术及快速数据重建技术,提供数据安全可靠保障能力,RPO趋近为0。

高可用

使用主从多级热备和自动故障切换机制,同时支持“两地三中心”和“三地五中心”的跨地域高可用,提供实例级、机房级、地域级的高可用服务保障,RTO<15秒。

可扩展

支持平滑的弹性扩容、无缝的版本升降级,对业务几乎无感。集群扩展同时支持手动和自动模式,实现按需弹性扩展,从容应对紧急扩容场景。

兼容性

兼容性包括语法兼容性和功能兼容性。语法支持SQL92/95/99语法,支持任意多张表的分布式join,及嵌套子查询和常用分布式计算函数,高度兼容MySQL、PostgreSQL、Oracle的语法和功能。

二、DragonBase功能介绍

2.1 分库分表

分库分表的核心思想即将大表数据拆分成若干个子表,并按照一定的规则分散存储在若干个数据库分片中,避免单表太大给数据访问带来读写性能的问题。分库分表旨在将数据尽可能地平均拆分到后端的数据库分片中,如果拆分不均匀,会产生数据访问热点。分库分表有几种模式:

垂直(纵向)拆分:是指按功能模块拆分,比如电商系统按订单库、商品库、用户库等不同业务类型,将数据存储到不同的数据库分片;

水平(横向)拆分:将同一个表的数据进行分块保存到不同的数据库分片中,这些数据库分片中的对应该表的子表结构完全相同。

2.1.1 自动拆分原理

DragonBase02.png
DragonBase03.png

2.1.2 二级分库分表

DragonBase支持二级分库分表,即上述提的Mix分库分表模式。例如将大表按照range先分散到不同的数据库分片,在数据库分片内部再按照Hash分别存储到不同的子表中。

2.2 读写分离

DragonBase的读写分离功能是基于DD只读实例所做的一种透明读流量调度策略。业务应用在能够容忍只读实例相对于主实例数据同步延迟的前提下,不需要修改代码,即可在DS控制台中增加DD只读实例和调整读权重,将读流量按照权重比例在DD主实例与多个DD只读实例之间调配,写操作和事务操作则统一走DD主实例。需要注意的是,主DD实例和只读DD存在数据同步延迟,并且在发生大的DDL或者数据批量更新时,有可能导致分钟级别以上的延迟,需要提前评估数据同步延迟对业务的影响。

DragonBase04.png

2.3 弹性扩容

2.3.1 Scale-up扩容

Scale-up(纵向扩展)即单服务器添加更多的内存、CPU或磁盘,但主机配置有最大限制。DragonBase支持动态的一键式升降配,变配时业务无感知。示例如图:

DragonBase05.png

2.3.2 Scale-out扩容

Scale-out横向扩展架构的升级通常是以节点为单位,新增节点具备与集群节点相同配置。分布式数据库的平滑扩容通过迁移子表到新扩容节点,支持自动和手动扩容,扩容时业务无感知。

DragonBase06.png

2.4 灾备恢复

DragonBase支持单机灾备和分布式集群灾备,默认采用三天做一次全量备份,每天做一次增量日志备份,也支持用户自助配置备份策略,同时还支持手动随时备份。灾备系统在灾备时会自动检查备份数据与数据库实例的数据的一致性,确保备份无误。

DragonBase支持一键式恢复数据库实例,可指定恢复数据的时间点或者日志位点,实现RPO→0。在恢复实例时,从远程备份集群中下载数据和日志后同样会自动校验数据的正确性(MD5),保证恢复的数据的完整性和正确性。

DragonBase07.png

2.5 权限管理

DragonBase支持三权分立,安全管理员,审计管理员,数据库管理员,三个角色之间相互制约,消除系统中出现的超级权限,从系统角色上解决数据安全问题。

  • 安全员:制定安全策略,不受管理员约束;
  • 审计员:所有操作都可以审计,单独实例进行日志审计,实例级别分离,不受管理员约束;
  • 管理员:运维权限,不可干预安全员、审计员操作。

2.6 故障自愈

DragonBase故障自愈是指分布式数据库提供的故障自感知、自动切换能力。DragonBase的故障自愈由故障感知系统KHA、控制系统Ktrove、元数据中心来配合完成,其中KHA负责感知系统中节点和服务的故障,然后通知Ktrove来完成后续的故障自愈操作,如计算节点故障时,申请新的计算节点实例,绑定源IP;存储节点故障时,选取新主,并建立新的拓扑关系,恢复集群服务。

DragonBase08.png

2.7 SQL兼容性

2.7.1 DDL

DragonBase09.png
DragonBase10.png

2.7.2 DML

DragonBase11.png

2.7.3 函数

DragonBase支持常规的计算函数,如avg、max、min、sum、count等,日期时间函数,如now、date_trunc等,字符串函数,如md5、upper等,同时也支持用户自定义函数UDF以及分布式相关函数等。

DragonBase12.png

2.7.4 自定义注释Hint

DragonBaseHint是一种机制,用来告诉优化器按照我们的方式生成相应的执行计划。DragonBaseHint支持实现一些主要的类:

  • 扫描类(ScanMethod),指定表的访问路径
  • 连接顺序类(JoinOrder),指定连接的顺序
  • SET类,即改变任意的GUC变量
  • ROW类型,改变表的连接结果集的估计大小多租户

2.8 DragonBase支持三种多租户模式:

1) 一租户一数据库

最简单的多租户实现方式是为每一个租户创建一个DragonBase集群。这种模型中不同租户的数据物理隔离,安全级别高。如果每个租户的DragonBase集群使用不同的硬件,则他们之间的资源使用也是物理隔离的;如果租户的DragonBase集群共用同一套硬件,则需要对资源进行合理分配和管理,避免相互影响。由于不同租户使用独立的数据库,灵活性好,容易满足不同租户的特定需求,出现故障时影响面小,缺点是数据库数量大,维护复杂,拥有成本高,适合租户数目比较少的场景。

2) 一租户一命名空间(Schema/Namespace)

多个租户共享同一个数据库,每个租户拥有独立的命名空间(或模式),这种多租户模型下,不同租户的数据逻辑上相互隔离,安全控制相对简单。不同租户有不同的模式,可以简便的满足不同租户的特定需求,灵活性高,对资源管理能力要求高,以避免不同租户竞争资源。结合DragonBase的filepace和tablespace特性,可以把不同租户的数据存储在不同的磁盘上,降低了对磁盘IO的竞争。但这种模式运维和管理较复杂,不易实现大量租户的跨租户分析,适合租户数目适中的场景。

3) 全共享方式

不同租户共享同一个数据库、同一个命名空间,不同租户的数据在同一组表中共存,通过租户id标记和访问不同租户的数据(应用需要调整访问数据的SQL以包含租户id)。这种多租户模型中,不同租户的数据物理存储在一起,对系统的资源隔离和安全隔离要求很高,运维相对简单,扩展能力好,可以支持较多数量租户。由于租户数据存储在一起,跨租户数据分析和优化非常简单,成本低,可以较低的代价支持更多的租户。

2.9 流量控制

大数据量高并发访问时,数据库服务经常会面临暴涨的流量导致大范围的超时现象,甚至引发连锁反应导致整个系统崩溃。为了保护系统平稳运行,提高系统架构的稳定性和高可用性,DragonBase提供了2种限流方式:

  1. 连接数限制,对于每台服务器设置能够同时正常工作的最大连接数,当连接数不大于设定值时,所有请求的连接都能正常连接到服务器;当连接数大于设定值时,对新到来的连接予以拒绝,直到连接数小于设定值后,服务器会再次正常接受连接。

  2. QPS限制,当QPS超过规定的阈值后,新的请求会被拒绝。

2.10 管控平台

统一的数据库智能管控平台,对DragonBase分布式数据库提供全生命周期管理:自动化部署、监控告警、性能分析、自助巡检、大屏监控,帮企业建立起完整的数据库管理平台,保障数据库的稳定运行,减少大量的运维成本,同时DBA、运维和开发人员可以通过平台来规范操作,并提升运维效率,建立起数据库层面自动化、智能化运维平台。

DragonBase13.png

评论

0
0
词条统计
创建者:墨天轮
编辑次数:4
浏览次数:412
API调用次数:0
贡献者