Raft in TDDMS--在星环分布式系统底层存储中Raft承担的作用以及能力

前面两篇文章分别介绍了分布式一致性协议是什么以及Raft协议的核心算法逻辑,优势有哪些。本篇文章将为读者您介绍在星环核心的分布式数据管理系统TDDMS中Raft协议发挥了什么作用承担了什么样的角色。感兴趣的小伙伴多多点赞留言吧~~~

前期回顾:

星环分布式数据管理系统TDDMS

首先,TDDMS是什么?

TDDMS是星环自研的一个分布式数据管理系统,该系统搭建了一个通用的分布式存储处理框架,提供了数据的分布管理、元信息管理、分布式事务、分布式一致性协议以及数据高可用保障。TDDMS 支持多种不同的数据模型,并为不同的数据模型提供了格式化的数据读写接口,便于分布式计算引擎进行数据读写等操作,真正实现了多源数据的高效融合。

与HDFS/TDFS等分布式文件系统定位不同,TDDMS本身不对外提供数据/文件存储服务,而是通过与存储引擎结合的方式,对接不同的存储引擎插件,提供不同的数据模型,目前已接入包括列式关系存储引擎Holodesk,图关系存储引擎StellarFS,倒排索引搜索引擎Lucene,以及KV存储引擎Tab(内置,不对外提供服务)等多个存储引擎。

TDDMS架构图

接口层

TDDMS WebServer:

负责监控TDDMS集群的状态,包括Master和Tablet Server,并提供运维管理能力,以及各类Restful API服务;同时,也可以借助webserver,看到每张表的tablet分布,以及每个tablet Server上存储的表数据;

TDDMS Restful API:

运维管理的北向接口,支持数据重分布、清理GC、快照恢复等;

TDDMS Client:

Quark server调用接口。

管理层

Master Server由以下三大功能组成:

Raft实例:

该部分由多个Master Server组成一个Raft Group,作用是负责存储数据的元信息, 一般由3或5(奇数)个一组,内部通过Raft算法保证每个Master内元数据的一致性,并选出Leader统一对外提供服务。如:

Group 需要做的事有:心跳检测、leader选举、数据同步以及数据一致性检测。

并发控制:

除了基于Raft协议在多台服务器上构建高可用服务之外,MasterServer还采用MVCC(多版本机制)进行并发控制,使用混合逻辑时钟算法(Hybrid Logic Clock)生成有序且可比较的事务时序号实现并发控制。

每一次提交修改时不是直接变更数据项,而是创建一个变更。这样会使得数据项每次变更都会增加一个新的版本,每张表事务的版本号是递增的,因此通过版本号就可以判断数据的有效期以及事务的提交顺序。

此外,TDDMS还提供了多种隔离控制方式以应对不同的场景需求防止commit冲突,详细信息查看后续章节。

元数据管理:

TDDMS通过内存数据库进行表级别的tablet元数据管理,存储的表级别的tablet元信息相关数据会被读取到内存中。下图为Master Server的数据目录样例,实际存储的数据量很小。Quark Computing从Master Leader获取表的Tablet信息后,会访问各节点的Tablet Server获取具体的数据。

存储层

存储层涉及一个新的服务角色即Tablet Server。

Tablet是数据分布的基本单位(分片),由TabletServer进行管理。不同表的数据以tablet的粒度分布在各个节点的各个磁盘上。Tablet的分布决定了,表的数据实际存放在多少块磁盘上,直接影响了表的读写性能。星环提供了多种方式简化Tablet数量和分布的设置,具体查看后续章节。

硬件层

副本分配保证了节点内数据在磁盘间保持均衡。实际上每个服务器节点都保存了完整的一张表的数据,但不同磁盘之间的tablet不会重叠。

简单介绍了不同架构层的作用后我们可以发现,上面的内容共同组成了分布式数据库应该要有的特性,例如提高性能、保证数据一致性、保证高可用、数据恢复等功能。

Raft in TDDMS

TDDMS中采用的就是Raft共识算法来进行leader选举和数据复制,与其他算法不同,不是针对整个数据集使用单个Raft组,而是在单个分片级别应用Raft复制,其中每个分片都有自己的Raft组。通过应用Raft算法,分布式存储架构实现了数据同步、容灾等能力,也辅助完成了多模态数据的统一处理、两地三中心的建设等等。那么具体Raft在整体架构中发挥了什么作用承担了什么样的角色呢?

多模态数据的统一处理

TDDMS将数据库中的一张表(table)根据一定的分片规则划分成多个数据分片(tablet),每个tablet包含若干副本,组成一个raft group;通过共识协议各数据副本达成一致。对每个tablet的数据变更操作通过raft算法提交后,在各个tablet上按提交序执行;对数据的读请求最终发送到tablet的某个副本上执行。

显然,分布式协议层并不需要感知底层存储引擎的具体实现,反之底层引擎也不需要关注分布式协议层的具体逻辑,而只需要被动执行确定的读写请求。TDDMS将底层存储引擎抽象成一组接口,实现了底层存储引擎的解耦,使得一套分布式数据库管理系统可以管理多种存储引擎,可以通过实现插件扩展存储能力,针对不同的业务场景提供不同的存储引擎实现,无需再为每类业务场景提供单独的存储引擎,降低开发成本。

TDDMS底层存储引擎拥有以下接口:

  • 数据分片接口:每张表Tablet的分布决定了表的数据实际存放在多少块磁盘上,直接影响了表的读写性能,因此TDDMS提供了多种tablet分布的规则。该接口定义了表的分片规则以及请求的路由规则;
  • 读写接口:提供了多存储引擎的数据修改、读取等操作的接口;
  • Recovery相关接口:快照(Snapshot)将某一时刻系统的状态 dump 下来并落地存储,这样该时刻之前的所有日志就都可以丢弃了,不会再继续占用存储空间。Recovery相关的接口可以创建、使用快照。比如当某个tablet需要为raft group添加新的成员时,可以创建一个用于恢复新成员数据的物理快照,后续可以完整的同步到新成员上。
  • 执行环境相关接口:该接口是为了一些特殊的执行环境所准备,比如非native的存储引擎需要初始化jvm。值得一提的是,TDDMS针对非native存储引擎采用了新的创新点,充分解决了由于JVM自身限制而无法充分发挥大内存机器能力的问题。

正如本系列最开始的内容所介绍的,TDDMS本身不对外提供数据/文件存储服务,而是通过与存储引擎结合的方式,对接不同的存储引擎插件。TDDMS的数据存储方式是对DB-Engine透明的,能够协同处理多模态数据(二维数组、全文检索数据、键值数据等),支持多种不同的数据模型,为不同的数据模型提供了格式化的数据读写接口,便于分布式计算引擎进行数据读写等操作,真正实现了多源数据的高效融合、统一处理。

两地三中心

伴随互联网、移动互联网、物联网、5G等信息通信技术及产业的发展,全球数据量呈现爆发式增长的趋势。对于企业而言,数据已成为数字经济中最重要的资产。核心业务系统作为支撑用户服务的关键,往往具备业务连续性高、并发请求量大、业务激增随机性强的特点,一旦发生故障,其影响范围更广,后果更严重。现阶段,多项政策均明确了灾备中心对于业务系统的重要性,例如《商业银行数据中心监管指引》要求“...其他法人商业银行应设立同城模式灾备中心并实现数据异地备份...”。据STL(2022)调查显示,到2030年,全球数据中心行业价值预计将达到5171.7亿美元。

数据中心对于企业来说提供了一个专用、经济高效、可扩展且安全的解决方案,通过将数据中心分布在不同国家或地区,可以更好地满足企业在数据管理、存储、安全性、合规性等方面的需求。“两地三中心”则指的是一种可以满足监管要求的容灾架构,其中,两地是指同城、异地,三中心是指生产中心、同城容灾中心、异地容灾中心。

通过将业务系统分布在两个地理位置上,并在每个地点都建立数据中心的方式实现了高可用等特性。业务系统在任何一个数据中心发生故障不可用时,其他数据中心可以接管业务并提供服务继续运行。由于业务系统分布在多个地理位置和多个数据中心上,所以两地三中心的架构能够提供灾备能力,为数据中心做好应对意外事件的准备,譬如电源故障、网络攻击或硬件问题等等。如果一个地点或一个数据中心遭受不可预测的灾害,其他地点和数据中心可以继续提供服务,降低RTO和RPO。通过多个数据中心的部署,实现负载均衡。负载可以根据实际情况在不同数据中心之间动态分配,以提高系统的性能和响应能力。

两地三中心的架构挑战:

两地三中心架构需要在多个地点和数据中心上部署和管理系统,增加了部署和维护的复杂性。因此需要确保各个数据中心之间的通信和同步,以及数据的一致性和可靠性。

基于TDDMS打造的分布式存储管理系统支持跨数据中心部署,实现了“两地三中心”等部署方式,支持在多个数据中心之间分发相同的目录服务数据副本。其中,多个数据中心的分布和同步均由TDDMS完成,通过tabletserver组成的raft group可以进一步保证跨数据中心的数据一致性。

星环两地三中心方案架构图示例

涉及的相关术语:
  • 分片(Tablet):分布式系统中, 为了减少数据增长对系统带来的影响, 同时提升系统的并发处理能力,通常会将数据分为多个分片存储, 不同的分片存储不同的数据;分片是数据分布的基本单位;
  • 副本分布式系统中, 为了增加系统的可用性, 对于同一份数据, 会存储多份, 这些相同的数据称之为数据的一个副本;
  • Raft group由于副本之间通过raft协议同步数据, 因此我们习惯上将通过raft协议同步数据的副本称为一个raft group。例如,同一分片的所有副本之间构成了一个 raft group;
  • Leader对于同一份数据的多个副本, TDDMS会指定一个副本为leader, 客户端的读写操作均发往leader上;相对地, 除 leader 外的副本我们称之为follower;
  • Learner:最终决策的学习者,学习者充当该协议的复制因素(不参与投票) ;
  • membership一个raft group内的所有副本, 共同组成了这个raft group的membership; 当发生副本增加和副本删除的动作时, 该raft group对应的membership也会随之发生改变;
  • TDDMS Master:负责存储数据的元信息,包括index元信息,集群元信息等。一般由3或5个一组,内部通过Raft算法保证每个Master内元数据的一致性,并选出Leader统一对外提供服务。因此所有的master也组成了一个raft group;
  • TDDMS Tablet Server:每个节点部署一个实例,负责管理该节点所配置的磁盘上的数据存储,并记录数据的信息;
  • WebServer负责监控TDDMS集群的状态,包括Master和Tablet Server,并提供运维管理能力,以及各类Restful API服务。一般一个集群配置一个WebServer即可;
架构分解

为了能更好地理解整个多中心的架构,下面我们将把架构分解为以下几个部分分开讲解,同时也方便您回顾前述章节有关Raft的算法逻辑,希望能对您了解系统的整体运行有帮助。

写操作

如图所示,对于写请求,客户端首先从master处获取要写的表的元信息(主要包含各个分片的元信息),接着客户端根据分片元信息,将写请求发送至对应的tablet server,在tablet server管理的数据分片上先写leader,leader收到客户端发送的写请求,经过 raft 算法在副本之间达成共识同步至follower(具体详见前述章节的介绍),写入日志之后各副本尝试应用写请求,满足leader+follower的1/2以上写完即可回复客户端写成功。需要注意的是这里的master可以有多个副本,若有多个副本,只从leader上获取信息。

读操作

Computing从Master Leader获取表的Tablet信息后,在访问各节点的Tablet Server,获取具体的数据。

如图所示,对于读请求,客户端首先从master处获取要读的表的元信息(主要包含各个分片的元信息),接着客户端根据分片元信息,将读请求发送至各个分片的leader上。Leader响应读请求,生成回复,发送给客户端。需要注意的是这里的master可以有多个副本,若有多个副本,只从leader上获取信息。

跨中心复制

数据可以通过由TDDMS Tablet Server组成的raft group提供的raft机制来保证跨数据中心的数据一致性。

此处解锁一个新角色:DataBlock。在跨中心同步的场景下,同样采用的是Raft机制,通过将数据切分为一个个的datablock进行数据同步。

如上图所示,跨中心的数据同步分为强一致性与最终一致性。一致性指的是说每次发出相同的请求时,数据库查询都返回相同的数据。

强一致性意味着返回最新的数据,当在数据库中进行更新时,该更新最终将反映在存储数据的所有节点中,因此每次查询数据时都会得到相同的响应。但是由于内部一致性方法,可能会存在一定延迟。

最终一致性关键在于“最终”二字,指的是经过一段时间后,最终一定能够达到符合业务定义的一致的状态。虽然在早期最新结果不像强一致性那么一致,因为数据更新需要一定时间才能到达数据库集群中的副本,但提供速度更快且延迟较低。

因此,星环提供了两种不同的同步方式,既保证了所有副本节点最终可以达到相同的数据状态,又保障了数据能够第一时间更新到不同的数据中心。多个数据中心提供了可扩展的部署模型,提供了负载平衡以及在节点或数据中心之一发生故障时的故障转移的能力,能够支持数百万用户的访问管理需求,更加贴合业务场景。

星环“两地三中心”的方案提供了两种不同的数据同步方式,既保证了所有副本节点最终可以达到相同的数据状态,又确保数据能够第一时间更新到不同的数据中心,进而保障企业数据不丢失,应用不中断,提供数据灾备能力和实时故障迁移能力的同时,也更加贴合企业用户的使用。

架构总结

以上就是架构分解,合起来就组成了上图的架构图,可能这个时候大家会注意到Master的部署是以2-2-1的结构进行分布,为什么不以3-1-1的结构是因为假设部署三个master的数据中心出现断电等灾难,那么则有超过一半的server将不可用,将无法对外提供服务。TDDMS采用的是Raft协议,多数派有效机制,2-2-1的结构可以保证任意一个数据中心发生灾难的情况下,多数派可以存活,确保了服务的可用性。

其次,master遵循Raft选主,如果只部3个master每个中心分别部一个,其中一个数据中心坏了则无法选主,因此在两地三中心方案中通常为2-2-1的结构。

同理,容灾表也通常为5副本(2-2-1的结构)。3副本的情况下很容易造成3个副本都在某个数据中心或者一个数据中心2个副本,另一个数据中心一个副本,从而导致存在某个数据中心无数据的情况,不能满足两地三中心的需求,所以一般使用5副本。相比于3副本来说,5副本有更好的数据容错性。同样,2-2-1的架构可以保障任意一个机房故障,不丢数据,并且事务延迟不受影响。但是具体是2-2-1的结构还是3-1-1需要结合业务场景去进行调整。3-1-1结构存在的好处是3个副本会写在指定的datacenter上,可以更快速的达成写操作的共识,2-1-1的情况下,会有1副本跨数据中心,可能会存在延迟。所以如何使用还需要考虑不同的场景,根据不同的场景去进行设置。

星环产品提供了丰富的参数来辅助搭建客户两地三中心系统,比如指定是否需要进行灾备将副本分配在不同的数据中心、指定副本分配结构、将表leader优先分布到指定的数据中心等等。通过设置不同的参数实现性能提升,系统快速响应等效果。

  • 33
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值