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

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来加以解决网络带宽瓶颈。

TDSQL分布式数据库的架构与解耦_第1张图片

TDSQL分布式数据库的架构与解耦_第2张图片

数据库中的模块发生变化

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

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

上子图所示,AWS的Aurora提出的存储计算分离,就是存储和计算两大模块的解耦。而微软Deuteronomy系统在08年-16年也有过一系列相关工作。Deuteronomy一开始采用的方案是在存储层上面实现事务,而底层的存储采用的是KV模型。存储层只需要提供KV的原子性和幂等性,上层就可以比较容易实现事务的并发访问控制和恢复。

后来的Percolator、Spanner/F1、CockroachDB、TiDB其实也是沿着这个思路在发展,底层是Bigtable/Spanner或者RocksDB这样的KV存储引擎,在存储之上封装一层事务。但是在类似RocksDB这样的KV存储中,对于KV记录的并发控制还是和存储紧耦合的。

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

TDSQL分布式数据库的架构与解耦_第3张图片

事务和存储层解耦

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

下图左子图,对应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这些也都不需要。

TDSQL分布式数据库的架构与解耦_第4张图片

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

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

TDSQL分布式数据库的架构与解耦_第5张图片

结语

数据库作为核心基础技术之一,在自主可控的时代发展潮流下,是我们必将要跨过的大山。路虽弥,不行则不至,历经十数年的研发演进,至少今天我们都已达成了许多重要的里程碑。当下而言,国产数据库从技术、人才、工业生态等各方面,都有待完善和发展,而未来更紧密的产学研结合、科技与传统产业融合趋势下,将进一步促进数据库自主可控发展。

你可能感兴趣的