海量数据,极速体验——TDSQL-A 技术核心架构 01
TDSQL-A 产品定位
TDSQL-A 是腾讯基于 PostgreSQL 自主研发的分布式超大规模在线关系型数据仓库,业务场景针对于在线高性能数据分析。
TDSQL-A 有四个主要特点:
无共享 MPP 能实现无共享的存储,还可以实现线性的扩展;
在存储层面,通过自研列存储技术,能够做到行列混合存储;
在数据库规模方面,实现了超大规模集群的支持;
为了让客户有更好的体验,TDSQL-A 还有超高速的计算能力,能够快速处理业务以及请求。
1
TDSQL-A 发展历程
TDSQL-A 是在腾讯业务发展过程中孵化出来的产品。最早的时候我们是用单机 PG 来做一些大数据平台小规模的数据分析以及结果缓存。但随着腾讯业务的扩张,我们发现单机的数据库已经无法支撑相关业务的数据量及请求量,就萌生了开发分布式数据库的想法。在 2013 年我们启动了第一个版本的开发。
开发完成后的 TDSQL-PG(原 TBase V2),最早用来支撑内部商户系统。随着业务的发展,我们在 V2 的基础上增加了列存储和分布式异步执行器、向量化等 OLAP 高级能力,在融入了腾讯云的几个主要平台后,逐渐对外提供服务。TDSQL-A 最近一次闪亮亮相,是为去年第七次全国人口普查提供技术支撑。作为在线数据分析引擎,TDSQL-A 很好地支撑了国家人口普查的执行,起到了加好的效果。
1
TDSQL-A 技术架构
在对 TDSQL-A 产品进行研发和架构设计的时候,我们主要面临四个方面的挑战:
一是随着 5G 和 loT 时代的到来,数据呈现爆炸式的增长。单个数据库集群里面需要处理的数据的容量很容易就达到 10PB 级别的大小。这对传统的数据仓库及数据库来说,是一个非常有挑战的数据规模。
二是随着数据量的增大,我们需要处理的数据库业务以及各种类型的终端越来越多,对数据库的并发要求比之前更高了。我们最多的时候甚至需要处理数千个 OLAP 的并发。
三是随着业务系统的发展,查询会变得异常复杂,需要涉及到近十张大表的数据关联,这对数据存储和数据仓库查询优化都提出了很高的要求。
四是客户和业务对于延时的要求。客户希望我们越来越快地把结果处理完成,这样才能更好地去实现自己的商业价值和业务目标。
TDSQL-A 实时数据仓库如何解决支持超大规模集群:
对实时数据仓库来说,第一个要解决的问题就是如何去支持超大规模的集群。传统认知认为,分布式数据库集群的处理能力会随结点增多而变强。但实际上却并非如此。
下图就是我们进行分布式查询的时候需要建立的网络连接,或者说我们需要进行网络通信的管道。从图中我们可以看到,在两表进行 JOIN 查询时,我们少则需要两个网络连接,多则需要八个网络连接。随着 SQL 复杂度的提升和并发的增加,系统需要建立的网络数量则会越来越多,数据仓库的处理能力不一定会提升。
由此我们可以得出一个结论,即限制分布式数据库扩展性的核心问题之一,就是服务器连接数过高。那 TDSQL-A 是如何解决这个问题的呢?
全新设计的异步执行器解耦控制和数据交互首先在执行逻辑方面,我们设计了全新的执行器,来解耦 SQL 执行的的控制逻辑和执行逻辑。
在查询优化阶段我们通过分析物理查询计划,对执行计划进行分片,由 CN 在各个节点创建执行进程。每个进程负责执行一个计划分片,这些进程不关注网络通信,相互独立执行。
假设 N 个节点,M 层 join,则会产生 M*N 个进程。
这种设计一方面分离了 SQL 执行的控制逻辑和执行逻辑;另外一方面,也将网络连接从具体执行逻辑抽象了出来,变成了一组接口,SQL 执行引擎只需要关注自己的执行逻辑,对于底层的通讯逻辑则不用专门去编写代码。而且,这些进程之间相互独立,没有相互的依赖关系,没有锁和进程同步,执行效率大大提升。
集中数据交互总线解决集群网络瓶颈在通讯逻辑方面,我们进一步引入 Forward Node(FN)来进行节点间数据交互。每台物理机一个 FN 节点。FN 与 CN/DN 通过共享内存进行数据交互,本机数据交互还可以不走网络层,从而提供更高的性能。假设 N 个节点,M 层 Join,且不管查询多复杂,只有 S*(N-1)个网络连接数。这对于服务器来说是并不算是一个很高的负载。
我们来小结一下 TDSQL-A 是如何实现超大规模数据集群支持的。
我们对整个数据库的执行逻辑进行了分流,把数据库分为了控制流和数据流。所谓的控制流由控制节点,CN 节点完成,它去完成执行机构的生成,执行机构的下发以及运用资源的初始化。在执行的过程中控制平面就不会再参与执行的过程,执行过程完全由执行平台来完成,执行平台主要负责执行过程中数据的交互以及整个执行过程的达成。
在执行过程中,数据流由转发平面完成,即 FN 节点。每个服务器上面就会部署一个 FN 进程,不同的物理服务器之间的 FN 进程相互连接在一起会组成一个转发平面。FN 跟每台服务器之间通过下面的共享内存和上面的 CN 或 DN 进行通信,FN 内部完成数据的交换和路由转发。
评论