探秘数据库中的并行计算技术应用
并行计算是提高系统性能的重要手段之一。该技术是通过利用多台服务器、多个处理器、处理器中的多核以及 SIMD 指令集等技术,实现任务的并行化处理,从而加快任务处理的速度。同时,在多个计算机领域有应用,如图像处理、大数据处理、科学计算及数据库等。
数据库中的并行处理技术
1. 分布式并行处理架构
并行处理数据库架构的出现可以追溯到上世纪 80 年代。当时计算机性能非常有限,但企业已经有了大规模的数据的处理需求。
那当时技术界是如何提升数据处理能力的呢?
当时技术界提出了三种并行架构:Shared Nothing、Shared Disk、Shared Memory,并对他们展开了各种讨论。图灵奖获得者 Michael Stonebraker 在 1985 年发表的一篇关于 Shared Nothing 的文章《The Case for Shared Nothing》,从不同维度,对三种架构能力做了一些比较分析。由于在成本、扩展性、可用性方面的优势,Shared Nothing 成为主流的设计思路。
1)最早的 Shared Nothing 商业产品
最早的 Shared Nothing 数据处理系统是 1984 年 Teradata 公司发布的第一代产品 DBC/1012。
![](https://static001.geekbang.org/infoq/c2/c2d7846543aa007d6753d685e0b7e577.png)
图 1 DBC/1012 架构
DBC/1012 的系统架构的关键组件有:
![](https://static001.geekbang.org/infoq/39/3954c171913131d66a5876a2ac9ae78f.png)
DBC/1012 一开始作为大型机 IBM 370 的后端,后来也可用作其他各种大型机、小型计算机和工作站的后端。数据被算法平均划分到 AMP 管理的本地 Disk,AMP 之间通常不交换数据。可通过增加 AMP 的数量来提升整个系统的数据容量和性能。
虽然现在看来满满的历史感,但是当时借助 Shared Nothing 技术处理大数据时,Teradata 表现得非常好,因此也赢得了优质大客户,帮助 Teradata 取得商业上的成功。
2)MPP(Massively Parallel Processing)和 shared-nothing
数据库并行处理技术中经常会提到的 MPP(Massively Parallel Processing),通常指的是服务器的系统架构分类方法。除了 MPP 之外,还有 NUMA、SMP 这两个分类。
SMP(Symmetric MultiProcessing):对称多处理器结构
SMP 服务器的主要特征是共享。系统中的所有资源(如内存、I/O 等)都是共享的,扩展能力比较有限。
SMP 有时也被称为一致存储器访问(UMA)结构体系,内存被所有处理机均匀共享。和 NUMA 不同,SMP 所有处理器对所有内存具有相同的访问时间。
![](https://static001.geekbang.org/infoq/e3/e3b661f25c9b98fd7770060bd9353332.png)
图 2 SMP 示意
NUMA(Non-Uniform Memory Architecture):非一致存储访问结构
NUMA 服务器的主要特征是拥有多个 CPU 模块,模块之间可以通过互联模块连接和信息交互。
每个 CPU 可以访问整个系统的内存,但是访问速度不一样。CPU 访问本地内存的速度远远高于系统内其他节点的内存速度。
NUMA 和 MPP 的区别在于,NUMA 是一台物理服务器,而 MPP 是多台。
![](https://static001.geekbang.org/infoq/04/04a3a8b21c4f37426cfbbe8287027fc4.png)
图 3 NUMA 示意
MPP(Massively Parallel Processing):大规模并行处理结构
MPP 是多台服务器节点通过互联网络连接起来,各个服务器节点只访问本地资源(内存和存储),各个服务器之间 shared nothing。
在数据库领域里,当我们说起一个数据库是 MPPDB,是指在数据的设计实现上,利用 MPP 并行处理的服务器集群 scale-out 扩展数据库性能,服务器之间 Shared Nothing。可以理解为 MPPDB == Shared Nothing 数据库。
当前支持 MPP 架构数据库产品有很多,如:Netezza(基于 PG;IBM 收购后不活跃)、Greenplum(基于 PG;VMware)、Vertica(HP)、Sybase IQ(SAP)、TD Aster Data(Teradata)、Doris(百度)、Clickhouse(Clickhouse, Inc.)、GaussDB(华为)、SeaboxMPP(东方金信)等。
2. SMP 并行
One size does not fit all。Shared Nothing 并行技术做到了很好的水平横向扩展(scale-out),但随着单台物理服务器的硬件资源越来越强大(几十~上百个 core/服务器),仅仅采用 Shared Nothing 技术,不能很好地挖掘硬件潜力。因为组成 Shared Nothing 架构数据库的单机很多都是 SMP 架构,即使是 NUMA 架构,其实每个 NUMA 域也可以近似认为是一个 SMP 系统。因此,业界又做了 SMP 并行执行的工作,提升单机上纵向扩展(scale-up)能力,优化处理性能。
SMP 并行技术可通过多线程多子任务并行执行的机制实现系统计算资源的充分高效使用,如下图所示:
![](https://static001.geekbang.org/infoq/53/53610007e8d008d7534ac2ae3e94991b.png)
3. 其他并行技术
SMP 进一步提升了数据库节点内并行处理的能力,但是数据库节点的处理芯片的处理性能仍可以进一步压榨,比如 ARM 和 x86 处理器往往都配备了 SIMD 指令集,提升了一条指令可以处理的数据的位宽。篇幅原因,这些并行技术会在后续 GaussTech 系列文章中阐述,这里不再赘述。
开源数据库中的并行技术应用
当前流行的开源数据库有两款:MySQL 和 PostgreSQL。让我们来看一下这两款开源数据库系列中 Shared Nothing 和 SMP 技术的运用吧。
1. Shared Nothing
MySQL 搭建 Shared Nothing 数据库集群主要靠借助各厂商自研或者开源的中间件,结合 MySQL 数据库提供分布式并行处理能力。比如:GoldenDB、TDSQL-MySQL 等。MySQL 官方也提供了 MySQL NDB Cluster,可借助其搭建分布式集群。
PostgreSQL 也是类似的思路,比如:TDSQL- PostgreSQL 以及 PostgreSQL 生态圈流行的开源中间件 Postgres-XL、Postgres-XC、citus 等。
可以看到,MySQL 以及 PostgreSQL 系提供 Shared Nothing 能力的主要是中间件架构的分布式数据库。
![](https://static001.geekbang.org/infoq/df/dfcce74c025e907d331e6689d7f49a42.png)
虽然这类数据库能横向扩展数据处理能力,但也存在功能降级、全局事务能力和高可用、性能等方面存在短板,需要有针对性增强。
2. SMP 并行技术
MySQL 在 2019 年发布的 8.0.14 版本中第一次引入了并行查询特性,对于一条 SQL 语句,也能发挥主机 CPU 多核能力,改善复杂大查询的能力。
并行处理能力主要是由存储引擎 InnoDB 提供的:
(1) innodb_parallel_read_threads :配置用于并行扫描的最大线程数。
(2) innodb_ddl_threads :控制 InnoDB 创建(排序和构建)二级索引的最大并行线程数。
PostgreSQL 从 2016 年发布的 9.6 开始支持并行顺序扫描、聚合,在 2018 年发布的 11 支持了更多的并行算子:并行哈希连接、Append、创建索引等。
PostgreSQL 提供了一些参数来进行并行的控制,比如 max_parallel_workers_per_gather。当优化器预判并行执行成本较高时,也不会生成并行执行计划。
可以看到,作为开源数据库中的翘楚,PostgreSQL 和 MySQL 都应用了 SMP 线程级并行处理技术提升数据库的单节点处理性能。
总结
并行计算技术作为提升数据库处理性能的重要手段,在现有的数据库产品中得到了广泛的应用。本文简要说明了以 Shared Nothing 为代表的节点间并行处理技术,以及 SMP 节点内并行处理技术和它们在开源数据库中的应用。
GaussDB 作为企业级数据库,也使用了这两项技术,提升了数据库处理的性能。相较于开源数据库的实现,GaussDB 的实现方式,结合各类实际场景,添加了更多的特色实现,进一步提升了分布式处理性能,这些我们将于下一篇文章加以说明。
文章转载自:华为云开发者联盟
评论