关于数据库:TDSQL分布式数据库的架构与解耦

28次阅读

共计 2214 个字符,预计需要花费 6 分钟才能阅读完成。

TDSQL 团队在研发分布式事务型数据库的过程中,除了思考分布式事务处理技术(ACID 实现的所有技术)外,还深度摸索测试验证、架构扩大、模块解耦等等各种重要的问题。

新硬件和 AI 等技术,在云环境下,如何影响着数据库的架构?

数据库各个模块间是否能解耦以升高研发的复杂度,同时缩短研发人才的造就周期?

新硬件和 AI 等技术,从架构上深深地影响了传统的数据库,这体现在如何交融这些新技术:

首先, 数据库可能会“减少”很多新模块进去,如图 7 中的左下子图,AI 调优数据库技术使得数据库系统被扩大了,减少了很多新组件进来。
其次, 数据库的传统模块会被扭转,如图 8 中的左下子图,在并行的事务型数据库系统中,提出基于 AI 技术对事务进行优化的模型。该模型采取存储过程的形式(此点相似 H -Store、VoltDB),向数据库引擎提前提供所执行的事务,而后利用 AI 技术(Markov model,马尔可夫模型)对存储过程进行剖析,确定那些存储过程所代表的事务间的语义,排定事务并发执行时哪些是互相冲突的,失去一个有固定构造的事务执行模型,如图 8 左下子图中右侧,是对 TPC- C 模型 NewOrder 进行的剖析失去的事务调度图。
当多个 Client 收回 SQL 语句执行存储过程代表的并发事务时,据此模型即能推断事务的调度形式。这是 AI 技术扭转事务处理中并发访问控制模块的一个典型事例。

下图中“d”模型是基于 RDMA 从 2 个方面对事务处理形成影响,一是事务处理的控制流,二是事务执行过程中产生的数据流。影响分布式事务处理效率的,不仅仅是宏大的数据流,而绝对数据量小的控制流,也是瓶颈,因而须要引入 RDMA 来加以解决网络带宽瓶颈。

数据库中的模块发生变化

传统的数据库系统,其复杂度极高,从外看高内聚,从内看高耦合,这使得数据库的复杂度骤然晋升。当各种新技术产生,影响了数据库的架构时,数据库的复杂性被再提上一个台阶。在这种背景下,研发人才的培养,其成长周期就会更长。因而,咱们在思考的一个问题是:从技术上看,如何解耦数据库外部间的诸多模块?耦合度高,研发人员须要把握数个相干模块能力良好推动工作;如果模块间解耦较好,把握单个模块就能不便推动工作,这样人才的培养周期相应也会缩短,软件的品质也会失去进步。

所以,数据库架构背景下各个模块解耦问题,是一个技术问题。解耦工作,能够在许多档次、许多模块间开展。解耦技术,各有其妙。

上子图所示,AWS 的 Aurora 提出的存储计算拆散,就是存储和计算两大模块的解耦。而微软 Deuteronomy 零碎在 08 年 -16 年也有过一系列相干工作。Deuteronomy 一开始采纳的计划是在存储层下面实现事务,而底层的存储采纳的是 KV 模型。存储层只须要提供 KV 的原子性和幂等性,下层就能够比拟容易实现事务的并发访问控制和复原。

起初的 Percolator、Spanner/F1、CockroachDB、TiDB 其实也是沿着这个思路在倒退,底层是 Bigtable/Spanner 或者 RocksDB 这样的 KV 存储引擎,在存储之上封装一层事务。然而在相似 RocksDB 这样的 KV 存储中,对于 KV 记录的并发管制还是和存储紧耦合的。

存储和计算两大模块的解耦,促成了各自所囊括的子模块之间再次进行解耦,事务和存储层的解耦,该怎么进行?有的研究者,把事务处理性能提取到客户端进行(左子图),有的把事务处理性能放到中间件层履行按(两头子图),这 2 种形式不同于传统的在 Server 端进行事务处理(右子图)。

事务和存储层解耦

另外,解耦工作,其实无处不在。下图展现了算法与数据结构之间的解耦。下图的左子图,是数据库的长久化局部和内存中数据之间的设计解耦。下图的右子图,是索引的数据结构与物理存储层之间的解耦。

下图左子图,对应 VLDB 2018 的论文 ”FineLine: Log-structured Transactional Storage and Recovery”,提出了一种事务存储和复原机制 FineLine,舍弃了传统的 WAL,把所有须要长久化的数据存储到一个繁多的数据结构,心愿将数据库的长久化局部和内存中数据存储之间达到设计解耦。

FineLine 无需将内存中数据落盘到 DB,仅将内存中的 log 信息长久化到 Indexed log 中,而后通过 fetch 操作从 Indexed log 读取到数据的最新状态。通过将内存中的数据结构与其持久性示意尽量地解耦,打消了与传统基于磁盘的 RDBMS 相干的许多开销。除此之外,这种繁多的长久化存储架构带来的另一个益处是,在零碎产生故障后复原的开销很低。因为 Indexed log 放弃了与原子操作的一致性,当产生故障并重启时,能够从 Indexed log 中读取到已提交的最新数据记录。基于 no-steal 的策略,Undo 操作,Checkpoint 这些也都不须要。

计算与数据结构之间的解耦

数据库外部,各个模块之间的解耦,与模块粒度的划分,与具体实现的零碎,都有密切关系。如图 11 展现了几个支流数据库之间解耦的关系,期待能抛砖引玉,引发更多思考。

结语

数据库作为外围根底技术之一,在自主可控的时代倒退潮流下,是咱们必将要跨过的大山。路虽弥,不行则不至,历经十数年的研发演进,至多明天咱们都已达成了许多重要的里程碑。当下而言,国产数据库从技术、人才、工业生态等各方面,都有待欠缺和倒退,而将来更严密的产学研联合、科技与传统产业交融趋势下,将进一步促成数据库自主可控倒退。

正文完
 0