热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

昆仑分布式数据库之ScaleOut介绍

数据库系统架构的演变,如实的反映了信息社会不断发展所带来的数据处理规模不断变大这一基本事实。如今,分布式数据库产品已成为各行各业信息系统的存储服务中,应用越来越广泛的技术选型。究其

一、分布式数据库的基础核心能力-水平扩容(ScaleOut)

数据库系统架构的演变,如实的反映了信息社会不断发展所带来的数据处理规模不断变大这一基本事实。

如今,分布式数据库产品已成为各行各业信息系统的存储服务中,应用越来越广泛的技术选型。究其原因,是因为其在海量数据存储管理的扩展能力和性价比方面,较单机数据库有着压倒性的优势。

在我们对昆仑分布式数据库的扩容功能正式开始介绍之前,我们首先回顾一下数据库管理系统扩容的常见模式。

数据库的扩容大体上分为如下两种模式:垂直扩容(Vertically Scale Up),水平扩容(Horizontally Scale Up)。


- Vertically Scale Up

垂直扩容是指对物理资源,如存储容量、计算能力、网络带宽等资源的扩展。

这种扩容方式由单机物力资源的瓶颈触发,以扩充单机物理资源为解决方案,满足数据库系统对物力资源的需求。然而这种扩容方式的缺点也是显而易见的:单机物理资源总有上限,且一般价格非常昂贵。

image.png


- Horizontally Scale Up

水平扩容的基本思路是将数据按照一定的规则分布在不同的物理设备上,整个系统对外仍然呈现逻辑上的单一数据库服务。

系统的扩展方式以通过增加物理设备的个数,来提升数据库的整体对外服务能力。这种扩展模式,可以说在理论上实现了无限扩展。

image.png

其中,如果扩展的物理节点,包含了存储能力,则称为share-nothing架构,否则称为share-storage架构。

我们熟知的oracle-RAC就是典型的share-storage架构,所有计算节点共用一套存储服务,而昆仑分布式数据库是典型的share-nothing架构。

如果从物理设备扩展引发的读写冲突的角度来审视这两种架构的优劣的话,share-nothing架构下,数据分片存储在多个存储集群中,分片之间没有交集,因而不会产生多点写入冲突的问题,因此线性扩展能力相对于share-storage有优势,但分布式事务处理和分布式查询处理功能以及自动的、应用无感知的水平弹性扩容等核心功能是在这种架构下必须要实现的功能,只有具备了所有这些功能,才是真正的分布式数据库系统。

这也是为什么分库分表中间件和应用层分库分表已经不再适合当前的技术水平要求—这些技术方案没有上述功能,会给应用开发者和DBA带来沉重的负担和工作量,相当于要在应用代码中case by case实现分布式数据库系统的分布式事务处理和分布式查询处理功能,以及DBA手动停服完成扩容,这些沉重的负担给应用系统的稳定性可靠性带来巨大的风险,并且验证影响客户业务开展和终端用户体验。

昆仑分布式数据库在架构选型时,就充分考虑到了上述的种种问题。基于我们自身对分布式事务处理和分布式查询处理功能以及自动水平扩容的等分布式数据库核心功能的丰富的设计和实现经验以及对相关用户需求的深刻理解,以及对线性扩展性的极致追求,我们在昆仑分布式数据库中实现了基于share-nothing架构的业务无感知的水平弹性扩容机制,更好地满足业务快速增长对数据库系统的服务要求。


二、昆仑分布式数据库ScaleOut功能介绍


2.1 存储层水平扩容

昆仑分布式数据库的存储服务逻辑上由多个独立的MySQL集群组成,每个集群称为一个shard。

image.png

每个shard是昆仑分布式数据库存储层的独立的容灾服务单元,不同shard之间数据相互独立。因此存储层的扩容,我们只需要增加shard这一独立的容灾存储单元即可。

image.png

在完成新的shard加入集群后,另一个更重要的需要解决的问题是如何将数据从原有的shard中迁移到新的shard中,从而对数据读写的请求和数据存储的负载,实现存储层整体服务能力的提升。

昆仑分布式数据库基于上述的业务要求,实现了无锁的数据shuffle(搬迁)服务,在实现热数据有效分摊的基础上,可靠的保证了存储服务的连续性,并且对应用系统无感知无侵入。该搬迁服务既可以用于扩容也可以用于缩容。比如为了双十一促销需要临时增加几倍的计算和存储能力,促销结束后释放相关计算和存储资源并还给公有云平台。


- lock-free shuffle service

在选择迁移哪些数据上,昆仑分布式数据库会根据某些规则选定需要搬迁的表分片(后续撰文介绍),给出待迁移表的集合。其目的是为了能够识别出真正的热点数据,从而更加均衡实现流量分摊以及更加高效的分布式查询。同时在数据 shuffle 的流程设计上,我们也做了无锁化处理,确保一个表在被搬迁的整个过程中持续的可读可写,达到了业务零感知。

整个shuffle过程包括以下几个步骤。假设当前给出的shuffle-set(待迁移的库表) 是从shard2迁移到新shard上。

第一步:需要完成的就是shuffle-set的dump和load操作。

image.png

在dump阶段,会保留一个snapshot的点位,即后续开始binlog复制的起始位置。整个dump的过程不会阻塞业务的请求。dump完成后,会并行的将dump的数据文件,load到新的shard中。

image.png

在dump和load的过程中,昆仑分布式数据库的集群管控模块cluster_mgr 和节点管控模块node_mgr会协同工作,完成shuffle-set中表的数据搬迁工作。

image.png

如上图所示整个过程会划分为三个子任务下发到对应的node_mgr上:


- Dump_task

Cluster_mgr下发dump任务到shard2的备机上,对应的node_mgr使用mydumper工具开始并发执行dump任务,待完成任务后,向cluster_mgr应答任务完成。


- Transfer_task

第一阶段的dump任务完成后,cluster_mgr会向shard-new主机上的 node_mgr下发transfer_task的命令,由shard-new向shard2 拉取对应的dump文件。download完成后,shard-new上的node_mgr向cluster_mgr 应答任务完成。


- Load_task

在完成了transfer_task后,cluster_mgr开始向shard_new下发load_task,任务的执行过程中,node_mgr使用myloader工具,并发的向shard-new中load 数据,完成后向cluster_mgr应答任务成功。

**第二步:**会建立新shard与源shard之间的数据同步,将源shard 上从snapshot点开始到当前时间shuffle-set的数据变化全部apply 到新的shard上。

数据同步链路的建立,利用MySQL原生的基于binlog的同步机制,通过建立一个只包含shuffle-set同步表的临时同步通道,并利用dump snapshot作为同步的起始点,拉取数据的增量志,并且以并发的方式在shard-new上重放这些日志,直到整个同步延迟在预定的时间范围内(默认3 秒),之后开始进行表切换操作。

image.png

表切换操作,会在源shard上对表进行rename,切断业务的新的请求。随后如果计算节点访问该表会发现表不存在,计算节点会从自己的元数据中找到表的新位置,该新位置由cluster_mgr在后续步骤更新。

完成shard2上的rename操作后,会在shard-new上确认rename操作已经replay,之后整个数据同步channel会被切断。假设表A在shuffle-set中,那么此刻,shard-2上包含一个表A-renamed,同时,shard-new上也包含一个完全相同的表A-renamed。

**第三步:**通知所有的计算节点shuffle-set表的路由更新。shuffle-set表正式对外服务。

image.png

当数据同步的延迟在一个合理的小的范围内的时候,此时会在源shard上对表进行rename操作,切断业务的新的请求。完成rename操作后,整个数据同步链路会被切断。假设表A在shuffle-set中,那么此刻,shard-2上包含一个表A-renamed,同时,shard-new上也包含一个完全想同的表A-renamed(rename 操作也会由源 shard 同步到目标shard)。


2.2 计算层水平扩容

昆仑分布式数据库的计算节点采用无状态服务设计,所有的计算节点不在本地持久化任何与集群相关的数据。

因此,在计算能力扩容的设计和实现上,昆仑分布式数据库有着天然的优势,即快速的部署计算节点服务到集群中,计算节点服务在拉起后,会自动的从元数据集群中同步相关信息,包括路由信息,存储节点相关信息等。

image.png

由于所有的元数据处理都是内存操作,因此计算节点从扩容开始到对外服务的时间窗口非常的短暂,可以实现敏捷的计算能力的横向扩展。


2.3 容错与回滚机制

从上面的扩容流程我们可以看到,整个过程包含了多个子任务的,且涉及到了多个物理设备,因此健壮的容错和回滚设计是保证系统高可用的必然要求。

结合上述扩容流程设计,在不同的阶段发生故障的处理方式如下:


- dump文件失败

如果dump文件失败,则可以进行重试(重试次数默认3次,可配置)。


- Transfer文件失败

如果dump的数据文件在物理设备间的传输失败,则可以重试(重试次数默认3次,可配置)。


- load数据失败

如果load操作失败,则可以重试(重试次数默认3次,可配置)。


- Table catch up失败

Table catch up即建立新shard与源shard的关于shuffle-set的数据同步通路,重放增量数据改动日志的过程,如果该过程失败,则需要返回错误信息以供分析。之后终止流程,并清理新实例上的shuffle-set相关数据。


- 表切换失败

进入表切换流程后,原则上在没有发生如网络隔离,物理设备掉电等灾难情况下,表切换必须成功。因此在实现机制上,我们在源shard上执行rename操作前,会强行终止持锁的会话确保rename不会因为锁竞争而失败。

从完成源shard的rename操作后3秒内,如果此时在shard-new上,确实没有完成rename的replay(如出现上述的物理灾难),则需要终止流程,快速的恢复源实例上的已经被rename的包含在shuffle-set中的表,恢复对外服务。


三、规划与展望

随着昆仑分布式数据库版本的不断迭代和发展,关于水平扩容能力的建设会逐渐趋于精细化和智能化,目前相关的特性计划覆盖了如shuffle-set的选择,shuffle流程的优化提效等。

具体如下


- 更加有效的shuffle-set构建算法

shuffle-set的构建,一方面是为了更好的扩展热点shard,提升整个数据库服务的热点数据管控服务能力,另一方面,灵活有效的shuffle-set也是分布式查询优化得以高效执行的重要手段。因此在后续版本的迭代上,这部分能力也将是我们重点关注的。


- shuffle流程的优化

快速高效的shuffle有助于数据库整体效能的提升,后续版本会重点关注shuffle 的效率,如尝试实现流水线式的数据shuffle策略等。

点击阅读原文

推荐阅读

KunlunBase架构介绍

KunlunBase技术优势介绍

KunlunBase技术特点介绍

KunlunBase集群基本概念介绍


END


昆仑数据库是一个HTAP NewSQL分布式数据库管理系统,可以满足用户对海量关系数据的存储管理和利用的全方位需求。

应用开发者和DBA的使用昆仑数据库的体验与单机MySQL和单机PostgreSQL几乎完全相同,因为首先昆仑数据库支持PostgreSQL和MySQL双协议,支持标准SQL:2011的 DML 语法和功能以及PostgreSQL和MySQL对标准 SQL的扩展。同时,昆仑数据库集群支持水平弹性扩容,数据自动拆分,分布式事务处理和分布式查询处理,健壮的容错容灾能力,完善直观的监测分析告警能力,集群数据备份和恢复等 常用的DBA 数据管理和操作。所有这些功能无需任何应用系统侧的编码工作,也无需DBA人工介入,不停服不影响业务正常运行。

昆仑数据库具备全面的OLAP 数据分析能力,通过了TPC-H和TPC-DS标准测试集,可以实时分析最新的业务数据,帮助用户发掘出数据的价值。昆仑数据库支持公有云和私有云环境的部署,可以与docker,k8s等云基础设施无缝协作,可以轻松搭建云数据库服务。

请访问 http://www.kunlunbase.com/ 获取更多信息并且下载昆仑数据库软件、文档和资料。

KunlunBase项目已开源

【GitHub:】

https://github.com/zettadb

【Gitee:】

https://gitee.com/zettadb




推荐阅读
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • Ralph的Kubernetes进阶之旅:集群架构与对象解析
    本文深入探讨了Kubernetes集群的架构和核心对象,详细介绍了Pod、Service、Volume等基本组件,以及更高层次的抽象如Deployment、StatefulSet等,帮助读者全面理解Kubernetes的工作原理。 ... [详细]
  • 该平台旨在为大型企业提供一个高效、灵活且可扩展的分布式微服务架构解决方案。它采用模块化、微服务化和热部署的设计理念,结合当前最先进且无商业限制的主流开源技术,如Spring Cloud、Spring Boot2、MyBatis、OAuth2和Element UI,实现前后端分离的系统管理平台。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 探讨架构师在项目中应如何平衡对产品的关注和对团队成员的关注,以实现最佳的开发成果。 ... [详细]
  • 2018年3月31日,CSDN、火星财经联合中关村区块链产业联盟等机构举办的2018区块链技术及应用峰会(BTA)核心分会场圆满举行。多位业内顶尖专家深入探讨了区块链的核心技术原理及其在实际业务中的应用。 ... [详细]
  • 本文详细介绍了网络存储技术的基本概念、分类及应用场景。通过分析直连式存储(DAS)、网络附加存储(NAS)和存储区域网络(SAN)的特点,帮助读者理解不同存储方式的优势与局限性。 ... [详细]
  • 云计算的优势与应用场景
    本文详细探讨了云计算为企业和个人带来的多种优势,包括成本节约、安全性提升、灵活性增强等。同时介绍了云计算的五大核心特点,并结合实际案例进行分析。 ... [详细]
  • Kubernetes 持久化存储与数据卷详解
    本文深入探讨 Kubernetes 中持久化存储的使用场景、PV/PVC/StorageClass 的基本操作及其实现原理,旨在帮助读者理解如何高效管理容器化应用的数据持久化需求。 ... [详细]
  • 本文作者分享了在阿里巴巴获得实习offer的经历,包括五轮面试的详细内容和经验总结。其中四轮为技术面试,一轮为HR面试,涵盖了大量的Java技术和项目实践经验。 ... [详细]
  • 数据管理权威指南:《DAMA-DMBOK2 数据管理知识体系》
    本书提供了全面的数据管理职能、术语和最佳实践方法的标准行业解释,构建了数据管理的总体框架,为数据管理的发展奠定了坚实的理论基础。适合各类数据管理专业人士和相关领域的从业人员。 ... [详细]
  • 解决PHP与MySQL连接时出现500错误的方法
    本文详细探讨了当使用PHP连接MySQL数据库时遇到500内部服务器错误的多种解决方案,提供了详尽的操作步骤和专业建议。无论是初学者还是有经验的开发者,都能从中受益。 ... [详细]
author-avatar
手机用户2502901265_642
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有