一、MPP架构概述
MPP(Massively Parallel Processing,大规模并行处理)通常被定义为一种数据库或数据仓库处理架构,其中数据被分为多个片段,并在多个计算节点上并行处理。与大多数RDBMS不同,MPP系统的查询运行时间不取决于单个CPU的速度,而取决于计算集群中所有节点的数量和处理器速度。 MPP架构可以支持大型、高度并发的数据工作负载,并且可以快速构建出适用于分析建模等大数据维度的数据查询和分析服务。它的优势主要是横向扩展能力强,查询性能好,可以处理PB级别的数据。
二、MPP架构应用
在实际应用中MPP架构可以用于构建各种数据库和数据仓库系统,具体包括: 1.关系型数据库(RDBMS) 将数据分片,存储在多个计算节点上,并使用MPP查询引擎操作数据,这对于处理大型多租户数据、大型在线交易流程等情况特别有用。具体实现可以参考Apache HAWQ。 2.列式数据库 与关系型数据库在节点分布上有所不同,数据通常按列而非行组织,并利用MPP并行处理框架在节点之间分发复杂查询。具体实现可以参考Apache HBase。 3.分布式文件系统 数据通常以文件形式存储在多个计算节点上,并在节点之间分发数据的I/O负载。具体实现可以参考Apache HDFS。
三、MPP架构体系结构
典型的MPP架构是由一个或多个控制器节点、多个计算节点和一个网络链路组成的多个级联节点结构。 1.控制器节点 这是整个MPP架构的中枢,它负责调度和控制所有任务,如查询分发、查询解析、查询优化、负载平衡、备份和恢复。 2.计算节点 计算节点通常部署在分布式集群的不同物理节点上,可以有效地实现计算任务的横向扩展。每个计算节点包含多个CPU和内存,可以进行数据存储和计算响应。 3.网络链路 网络链路是MPP架构的中枢,是所有计算节点和控制器节点之间传递任务和数据的杠杆。高性能的网络链路是确保MPP系统快速响应,高度可伸缩性和可用性的关键之一。
四、MPP架构执行流程
在MPP架构环境下,一个查询请求可以被精细地分解成多个子任务,并在计算节点上并行执行。具体流程如下:
1.查询分发
当一个查询任务到达主控制器节点时,它首先被解析和优化。然后主控制器节点将任务分解成多个子任务,并将它们分发给其中的计算节点。以此来保证查询的各个维度都可以被分配到各个计算节点上去执行。
/* 示例代码(仅供参考)*/
-- 查询客户信息表中所有客户的姓名、年龄
SELECT name, age FROM customer_info;
-- 查询解析和优化完成后,将转换为多个子任务
-- 子任务1:在计算节点1上查找客户的姓名
SELECT name FROM customer_info WHERE partition_id IN (1,2,3);
-- 子任务2:在计算节点2上查找客户的姓名
SELECT name FROM customer_info WHERE partition_id IN (4,5,6);
-- 子任务3:在计算节点3上查找客户的姓名
SELECT name FROM customer_info WHERE partition_id IN (7,8,9);
-- 子任务4:在计算节点1上查找客户的年龄
SELECT age FROM customer_info WHERE partition_id IN (1,2,3);
-- 子任务5:在计算节点2上查找客户的年龄
SELECT age FROM customer_info WHERE partition_id IN (4,5,6);
-- 子任务6:在计算节点3上查找客户的年龄
SELECT age FROM customer_info WHERE partition_id IN (7,8,9);
2.子任务执行
每个计算节点负责一个或多个任务的执行。计算节点的数量可以根据负载需求进行伸缩。这使得MPP架构可以快速处理极大规模的查询请求。 子任务的执行通常是并行执行的,因为多个计算节点同时处理子任务,所以单个节点的性能限制并不影响整个查询操作的速度。如果一个查询请求只需要一个计算节点处理,则可以通过查询优化器手动指定计算节点。
3.结果聚集
在计算节点上执行完后,所有子任务的查询结果都会被发送回主控制器节点进行汇聚。这样主控制器节点可以合并所有查询结果,生成最终的查询结果并将结果返回查询发起端。
/* 示例代码(仅供参考)*/
-- 子任务1返回客户的姓名列表
['Tom', 'Jerry', 'Peter']
-- 子任务2返回客户的姓名列表
['Lisa', 'Cindy', 'Lucy']
-- 子任务3返回客户的姓名列表
['Mary', 'David', 'John']
-- 子任务4返回客户的年龄列表
[25, 31, 42]
-- 子任务5返回客户的年龄列表
[27, 39, 28]
-- 子任务6返回客户的年龄列表
[33, 29, 35]
-- 合并查询结果
-- 最终结果1:客户姓名列表
['Tom', 'Jerry', 'Peter', 'Lisa', 'Cindy', 'Lucy', 'Mary', 'David', 'John']
-- 最终结果2:客户年龄列表
[25, 31, 42, 27, 39, 28, 33, 29, 35]
五、MPP架构的优缺点
1.优点 ①横向扩展能力强,计算能力和存储能力随着节点数的增加而线性增加。 ②查询性能好,能够快速响应大规模多维度的分析查询。 ③支持PB级别的数据处理,适用于需要大量计算和数据存储的业务。 2.缺点 ①MPP架构部署复杂,需要对于计算节点、网络节点、控制器节点等多个方面进行资源的调配和管理。 ②使用MPP架构需要针对其执行流程开发复杂的程序和算法,使开发成本高,复杂度大。 ③MPP架构通常被许多商业数据库厂商用于高端产品,因此其实现成本较高,部署门槛较高。
六、总结
MPP架构是针对大数据场景下,数据集的计算和处理能力相对于单个CPU和单个服务器进行优化的分布式处理架构。通过合理分配计算和存储资源,实现可横向扩展的高扩展性。虽然实施成本高,但是在数据量巨大和查询性能要求高的场景下,是不可替代的一个选择。