改版通知

巨人肩膀网站已全新改版。若您仍依赖旧站功能或数据,欢迎联系我们,我们会协助处理。联系我们

浅谈MPP架构

ckckck2025年1月10日45 浏览

数据库架构分析

数据库构架设计中主要有Shared Everything、Shared Disk、Share Memory和Shared Nothing等,我们简要分析一下这几种架构的区别。

数据库架构

1. Shared Everything

Shared Everything指 单个主机独立支配CPU、内存、磁盘等硬件资源,其优势是架构简单,搭建方便。但该种架构的缺陷是数据 并行处理能力较差,扩展性较低。Shared Everything的典型代表产品为 SQL Server

2. Shared Disk

在Shared Disk架构中,CPU和内存对于各个处理单元私有,但各节点 共享磁盘系统。该种架构的典型代表为 DB2 pureScaleOracle RAC。这种共享架构 具备一定的扩展能力,可通过 节点的增加来提升数据并行处理能力。其类似于SMP(对称多处理)模式,但 当存储器接口使用饱和时,磁盘IO成为了系统资源瓶颈,节点的扩充并不能提升系统性能。

3. Shared Memory

Shared Memory指多个节点 共享内存,各CPU间通过 内部通讯网络(Interconnection Network) 进行通讯。但与Shared Disk类似,当节点数量过高时,内存竞争(Memory Contention)将成为该系统的瓶颈,单纯地堆砌节点数量并不能提升整体数据处理性能。

4. Shared Nothing

Shared Nothing的核心思想是各个数据库单元中 不存在共享资源,数据处理单元对于各节点完全私有化。类似于MPP(大规模并行处理)模式,各处理单元之间通过协议通信,并行处理和扩展能力更好。典型代表DB2 DPF和Hadoop,各节点相互独立,各自处理自己的数据,处理后的结果可能向上层汇总或在节点间流转

我们常说的Sharding其实就是Shared Nothing架构,它是把某个表从物理存储上被 水平分割,并分配给多台服务器(或多个实例),每台服务器可以独立工作,具备共同的schema,比如MySQL Proxy和Google的各种架构,只需增加服务器数就可以增加处理能力和容量。

Shared Nothing架构(Shared Nothing Architecture)是一种分布式计算架构。这种架构中的每一个节点(node)都是独立、自给的,而且整个系统中没有单点竞争。在一个纯Shared Nothing系统中,通过简单地增加一些廉价的计算机作为系统的节点却可以获取几乎无限的扩展。

Shared Nothing系统通常需要将它的数据分布在多个节点的不同数据库中(不同的计算机处理不同的用户和查询)或者要求每个节点通过使用某些协调协议来保留它自己的应用程序数据备份,这通常被称为数据库Sharding。

Shared Nothing数据库架构优势

  1. 相对低的硬件成本:完全使用x86架构的PC Server,不需要昂贵的Unix服务器和磁盘阵列;
  2. 集群架构与部署:完全并行的MPP + Shared Nothing的分布式架构,采用Non-Master部署,节点对等的扁平结构;
  3. 海量数据分布压缩存储:可处理PB级别以上的结构化数据,采用hash分布、random存储策略进行数据存储;同时采用先进的压缩算法,减少存储数据所需的空间,可以将所用空间减少1~20倍,并相应地提高I/O性能;
  4. 数据加载高效性:基于策略的数据加载模式,集群整体加载速度可达2TB/h;
  5. 高扩展、高可靠:支持集群节点的扩容和缩容,支持全量、增量的备份/恢复;
  6. 高可用、易维护:数据通过副本提供冗余保护,自动故障探测和管理,自动同步元数据和业务数据。提供图形化工具,以简化管理员对数据库的管理工作;
  7. 高并发:读写不互斥,支持数据的边加载边查询,单个节点并发能力大于300用户;
  8. 行列混合存储:提供行列混合存储方案,从而提高了列存数据库特殊查询场景的查询响应耗时;
  9. 标准化:支持SQL92标准,支持C API、ODBC、JDBC、ADO.NET等接口规范。

服务器体系与共享存储器架构

架构概述

  • 从系统架构来看,目前的商用服务器大体可以分为三类

    1. 对称多处理器结构(SMP:Symmetric Multi-Processor)
    2. 非一致存储访问结构(NUMA:Non-Uniform Memory Access)
    3. 海量并行处理结构(MPP:Massive Parallel Processing)。
  • 共享存储型多处理机有两种模型

    1. 均匀存储器存取(Uniform-Memory-Access,简称UMA)模型
    2. 非均匀存储器存取(Nonuniform-Memory-Access,简称NUMA)模型
共享存储器架构

SMP (Symmetric Multi-Processor)

  • 所谓对称多处理器结构,是指服务器中 多个CPU对称工作,无主次或从属关系
  • 各CPU共享相同的物理内存,每个CPU访问内存中的任何地址所需时间是相同的,因此SMP也被称为一致存储器访问结构(UMA:Uniform Memory Access)。
  • 对SMP服务器进行扩展的方式包括 增加内存、使用更快的CPU、增加CPU、扩充I/O(槽口数与总线数)以及添加更多的外部设备(通常是磁盘存储)
  • SMP服务器的主要特征是共享,系统中所有资源(CPU、内存、I/O等)都是共享的。也正是由于这种特征,导致了SMP服务器的主要问题,那就是它的 扩展能力非常有限
  • 对于SMP服务器而言,每一个 共享的环节 都可能造成SMP服务器扩展时的瓶颈,而 最受限制的则是内存。由于每个CPU必须通过相同的内存总线访问相同的内存资源,因此随着CPU数量的增加,内存访问冲突将迅速增加,最终会造成CPU资源的浪费,使CPU性能的有效性大大降低。实验证明,SMP服务器CPU利用率最好的情况是2至4个CPU。
SMP架构

NUMA (Non-Uniform Memory Access)

  • 由于SMP在扩展能力上的限制,人们开始探究如何进行有效地扩展从而构建大型系统的技术,NUMA就是这种努力下的结果之一。
  • 利用NUMA技术,可以把几十个CPU(甚至上百个CPU)组合在一个服务器内。
NUMA架构
  • NUMA多处理机模型如图所示,其访问时间随存储字的位置不同而变化。其共享存储器物理上是分布在所有处理机的本地存储器上。所有本地存储器的集合组成了全局地址空间,可被所有的处理机访问。处理机访问本地存储器是比较快的,但访问属于另一台处理机的远程存储器则比较慢,因为通过互连网络会产生附加时延。
  • NUMA服务器的基本特征是具有多个CPU模块,每个CPU模块由多个CPU(如4个)组成,并且具有独立的本地内存、I/O槽口等。
NUMA架构
  • 由于其节点之间可以通过互联模块(如称为Crossbar Switch)进行连接和信息交互,因此每个CPU可以访问整个系统的内存(这是NUMA系统与MPP系统的重要差别)。显然,访问本地内存的速度将远远高于访问远地内存(系统内其它节点的内存)的速度,这也是非一致存储访问NUMA的由来。
  • 由于这个特点,为了更好地发挥系统性能,开发应用程序时需要尽量减少不同CPU模块之间的信息交互。利用NUMA技术,可以较好地解决原来SMP系统的扩展问题,在一个物理服务器内可以支持上百个CPU。比较典型的NUMA服务器的例子包括HP的Superdome、SUN15K、IBM p690等。
  • 但NUMA技术同样有一定缺陷,由于访问远地内存的延时远远超过本地内存,因此当CPU数量增加时,系统性能无法线性增加。如HP公司发布Superdome服务器时,曾公布了它与HP其它UNIX服务器的相对性能值,结果发现,64路CPU的Superdome(NUMA结构)的相对性能值是20,而8路N4000(共享的SMP结构)的相对性能值是6.3。从这个结果可以看到,8倍数量的CPU换来的只是3倍性能的提升。

MPP (Massive Parallel Processing)

  • 和NUMA不同,MPP提供了另外一种进行系统扩展的方式,它由多个SMP服务器通过一定的节点互联网络进行连接,协同工作,完成相同的任务,从用户的角度来看是一个服务器系统。其基本特征是由多个SMP服务器(每个SMP服务器称节点)通过节点互联网络连接而成,每个节点只访问自己的本地资源(内存、存储等),是一种完全无共享(Share Nothing)结构,因而扩展能力最好,理论上其扩展无限制,目前的技术可实现512个节点互联,数千个CPU。目前业界对节点互联网络暂无标准,如NCR的Bynet,IBM的SP Switch,它们都采用了不同的内部实现机制。但节点互联网仅供MPP服务器内部使用,对用户而言是透明的。
  • 在MPP系统中,每个SMP节点也可以运行自己的操作系统、数据库等。但和NUMA不同的是,它不存在异地内存访问的问题。换言之,每个节点内的CPU不能访问另一个节点的内存。节点之间的信息交互是通过节点互联网络实现的,这个过程一般称为数据重分配(Data Redistribution)。
  • 但是MPP服务器需要一种复杂的机制来调度和平衡各个节点的负载和并行处理过程。目前一些基于MPP技术的服务器往往通过系统级软件(如数据库)来屏蔽这种复杂性。举例来说,NCR的Teradata就是基于MPP技术的一个关系数据库软件,基于此数据库来开发应用时,不管后台服务器由多少个节点组成,开发人员所面对的都是同一个数据库系统,而不需要考虑如何调度其中某几个节点的负载。
MPP架构

当节点之间通信交互较少时,MPP更适用。集中式数据库SMP更适用。
MPP架构服务器就是由多个SMP服务器通过若干节点组成,通过网络协同工作。
NUMA不适合大量数据需要处理且有交互的场景。

三种体系架构之间的差异

NUMA、MPP、SMP之间性能的区别

  • NUMA的节点互联机制是在同一个物理服务器内部实现的,当某个CPU需要进行远地内存访问时,它必须等待,这也是NUMA服务器无法实现CPU增加时性能线性扩展。
  • MPP的节点互联机制是在不同的SMP服务器外部通过I/O实现的,每个节点只访问本地内存和存储,节点之间的信息交互与节点本身的处理是并行进行的。因此MPP在增加节点时性能基本上可以实现线性扩展。
  • SMP所有的CPU资源是共享的,因此完全实现线性扩展。

NUMA、MPP、SMP之间扩展的区别

  • NUMA理论上可以无限扩展,目前技术比较成熟的能够支持上百个CPU进行扩展。如HP的SUPERDOME。
  • MPP理论上也可以实现无限扩展,目前技术比较成熟的能够支持512个节点,数千个CPU进行扩展。
  • SMP扩展能力很差,目前2个到4个CPU的利用率最好,但是IBM的BOOK技术,能够将CPU扩展到8个。
  • MPP是由多个SMP构成,多个SMP服务器通过一定的节点互联网络进行连接,协同工作,完成相同的任务。

MPP和SMP、NUMA应用之间的区别

MPP的优势

  • MPP系统 不共享资源,因此对它而言,资源比SMP要多,当需要处理的事务达到一定规模时,MPP的效率要比SMP好。由于MPP系统因为要在不同处理单元之间传送信息,在通讯时间少的时候,那MPP系统可以充分发挥资源的优势,达到高效率。也就是说:操作相互之间没有什么关系,处理单元之间需要进行的通信比较少,那采用MPP系统就要好。因此,MPP系统在决策支持和数据挖掘方面显示了优势

SMP的优势

  • MPP系统因为要在不同处理单元之间传送信息,所以它的效率要比SMP要差一点。在通讯时间多的时候,那MPP系统可以充分发挥资源的优势。因此 当前使用的OTLP程序中,用户访问一个中心数据库,如果采用SMP系统结构,它的效率要比采用MPP结构要快得多

NUMA架构的优势

  • NUMA架构来看,它可以在一个物理服务器内集成许多CPU,使系统具有较高的事务处理能力,由于远地内存访问时延远长于本地内存访问,因此需要尽量减少不同CPU模块之间的数据交互。显然,NUMA架构更适用于OLTP事务处理环境,当用于数据仓库环境时,由于大量复杂的数据处理必然导致大量的数据交互,将使CPU的利用率大大降低。

总结

  • 传统的多核运算是使用SMP(Symmetric Multi-Processor)模式:将多个处理器与一个集中的存储器和I/O总线相连。所有处理器只能访问同一个物理存储器,因此SMP系统有时也被称为一致存储器访问(UMA)结构体系,一致性意指无论在什么时候,处理器只能为内存的每个数据保持或共享唯一一个数值。很显然,SMP的缺点是可伸缩性有限,因为在存储器和I/O接口达到饱和的时候,增加处理器并不能获得更高的性能,与之相对应的有AMP架构,不同核之间有主从关系,如一个核控制另外一个核的业务,可以理解为多核系统中控制平面和数据平面。
  • NUMA模式是一种 分布式存储器访问方式,处理器可以同时访问不同的存储器地址,大幅度提高并行性。NUMA模式下,处理器被划分成多个“节点”(node),每个节点被分配有的本地存储器空间。所有节点中的处理器都可以访问全部的系统物理存储器,但是访问本节点内的存储器所需要的时间,比访问某些远程节点内的存储器所花的时间要少得多。
  • NUMA的主要优点是 伸缩性。NUMA体系结构在设计上已超越了SMP体系结构在伸缩性上的限制。通过SMP,所有的内存访问都传递到相同的共享内存总线。这种方式非常 适用于CPU数量相对较少的情况,但不适用于具有几十个甚至几百个CPU的情况,因为这些CPU会相互竞争对共享内存总线的访问。NUMA通过限制任何一条内存总线上的CPU数量并依靠高速互连来连接各个节点,从而缓解了这些瓶颈状况。

MPP的详细介绍

介绍

MPP即大规模并行处理结构。MPP的系统扩展和NUMA不同,MPP是由多台SMP服务器通过一定的节点互联网络进行连接,协同工作,完成相同的任务,从用户的角度来看是一个服务器系统。每个节点只访问自己的资源,所以是一种完全无共享(Share Nothing)结构。

MPP结构扩展能力最强,理论可以无限扩展。由于MPP是多台SPM服务器连接的,每个节点的CPU不能访问另一个节点内存,所以也不存在异地访问的问题。

MPP架构的特征:

  • 任务并行执行
  • 数据分布式存储(本地化)
  • 分布式计算
  • 高并发、单个节点并发能力大于300用户
  • 横向扩展、支持集群节点的扩容
  • Shared Nothing(完全无共享)架构

下图展示的是StarRocks的架构图:

StarRocks架构
StarRocks架构

在MPP执行框架中,一条查询请求会被拆分成多个物理计算单元,在多机并行执行。每个执行节点拥有独享的资源(CPU、内存)。MPP执行框架能够使得单个查询请求可以充分利用所有执行节点的资源,所以单个查询的性能可以随着集群的水平扩展而不断提升。

每个逻辑执行单元会由一个或者多个物理执行单元来具体实现。不同逻辑执行单元可以由不同数目的物理执行单元来具体执行,以提高资源使用率,提升查询速度。在MPP框架中,数据会被Shuffle到多个节点,并且由多个节点来完成最后的汇总计算。

数据分片

数据分片是能够实现并行化计算的核心,MPP数据库有多种数据分片方式,主要包括3大类:

Hash模式

一般适用于事实表或大表,根据一条记录的某个字段或组合字段的hash值将数据分散到某个节点上,hash函数可以有多种方式。通过根据对给定字段的hash值来做数据分布,一个大表可以均匀的分散到MPP数据库的多个节点上,当对这个表查询时,MPP数据库编译器可以根据SQL中相应的检索字段将查询快速定位到某个或几个相关的数据库节点并将SQL下发,对应的数据库节点就可以快速响应查询结果。Hash模式在真实生产中使用的比较多,不过它也有几个较明显的问题:一是Hash取值一般是跟数据库节点数量密切相关,如果数据库添加或者减少节点后,那么已经存在的数据的Hash分布就不再正确,因此需要做数据库的数据重分布,带来较大的运维成本;二是在实际操作中需要根据业务特点来设计或选择Hash字段,否则容易出现性能热点等影响数据库整体性能的问题。

均匀分布模式

一般适用于一些过程中的临时表,在对表的数据的持久化过程中按照均匀分布的方式在每个数据库节点上均匀写入数据。这个模式下数据库的IO吞吐可以得到最大化利用,无论是读取还是写入,仅适合表只做一次读写的场景。

全复制模式

一般适合记录数比较少的表,一般情况下在各个数据库节点都完整的存储一份数据。这类表一般情况下用于大量的分析类场景,事务类操作比较少,因此虽然存储上有明显的浪费,但是在分析性场景下不再需要将这个表在多个数据库节点上传输或复制,从而提升分析性能。

数据分片

基于数据分片的方式实现了数据无共享架构,因此可以通过增加数据库实例的方式来提升数据库的性能,因此与早期的SMP共享架构数据库(典型代表Oracle RAC)相比,MPP数据库的分析性能要远远超出。

此外数据库的整体并发响应,以及数据库的读写吞吐量,MPP数据库都能够通过有效的业务优化达到一个很高的水平。

在MPP数据库的可扩展性方面,从中国信通院的相关测试来看,开源的MPP数据库能够支持一百节点左右的集群规模,而一些商业MPP数据库通过更好的软硬件结合已经可以实现单集群达到五百个节点。

并发

由于MPP的“完全对称性”,即当查询开始执行时,每个节点都在并行的执行完全相同的任务,这意味着MPP支持的并发数和集群的节点数完全无关;看下面计算公式:

rds_segment_expansion_coeff 并行最大倍数上限,是个默认固定值

并发

扩展性

虽然MPP虽然具有扩展性,但是节点我理解实际上 不会无限扩展,市面上MPP架构的集群规模也并不会太大。

对于MPP架构来说,因为task和Executor是绑定的,如果某个Executor执行过慢或故障,将会导致整个集群的性能就会受限于这个故障节点的执行速度(所谓木桶的短板效应),所以 MPP架构的最大缺陷就是——短板效应。另一点,集群中的节点越多,则某个节点出现问题的概率越大,而一旦有节点出现问题,对于MPP架构来说,将导致整个集群性能受限,所以一般实际生产中MPP架构的集群节点不易过多,这也是我们看到很多存储都有节点上限。再考虑硬件的损耗,维护成本居高不下。

MPP和Hadoop在架构上的一个根本区别在于 数据分区的存储位置 是如何决定的。

MPP非常简单,使用sharding技术,即根据字段的哈希值决定数据在哪个节点。采用这种方式切分的一般上百台性能达到平静,每次增加节点需要reshard;很难resharding导致扩展困难。

Hadoop引入了 元数据服务(namenode提供的服务),数据的分区逻辑和分区的存储逻辑分离了,数据的写入和读取都是通过查询元数据服务得到数据分区的具体节点位置。也会受限于元数据服务能力,一般上限10K。

这一点不同,导致两者在扩展性上有很大区别。

MPP内存管理精细,就像每个节点有个小数据库,数据量小时延时低,但数据量太大吞吐就达到瓶颈了;

Hive内存管理粗放,scan+batch所以吞吐量大,但延时高。

对于数据库来说,任何对于集群的改变都涉及到拓扑结构的变更,也可能会涉及到不同机器之间数据的迁移,因此当集群中机器数量多的时候,依然维护复杂的数据管理模型会造成维护成本大幅度上升。例如,在一个1000台机器的集群里面增加100台机器,Hadoop可以简单地添加100个机器即可,其他对于数据块的迁移和平衡会在后台自动完成;而对于数据库来说,添加100个机器如果需要涉及到数据重新平衡的话,需要对每个分区的记录进行重新散列,并且将需要迁移的数据拷贝到目标机器。在这个过程当中,数据的一致性,事务的一致性 等因素都需要考虑,因此其设计复杂度和维护难度要远远高于粗放的HDFS。

MPP架构的OLAP引擎

1)只负责计算,不负责存储引擎

  • Impala:采用MPP架构的查询引擎,本身不存储任何数据,直接使用内存进行计算,兼顾数据仓库,具有实时,批处理,多并发等优点。
  • Presto:采用MPP架构的查询引擎,本身并不存储数据,但是可以接入多种数据源,并且支持跨数据源的级联查询。Presto是一个OLAP的工具,擅长对海量数据进行复杂的分析。是一个低延迟高并发的内存计算引擎。

2)既负责计算,又负责存储的引擎

  • ClickHouse:是一个快速的开源OLAP数据库管理系统,面向列的,并允许使用SQL查询实时生成分析报告。
  • Doris/StarRocks:新一代极速全场景MPP数据库。
  • Druid:一个开源、分布式、面向列式存储的实时分析数据存储系统。
  • TiDB:开源分布式关系型数据库,是一款同时支持OLTP与OLAP的融合型分布式数据库产品。
  • Greenplum:在开源的PostgreSQL的基础上采用了MPP架构的性能非常强大的关系型分布式数据库。
OLAP引擎

MPP架构和Hadoop架构对比

  • MPP架构 是将许多单机数据库通过网络连接起来,相当于将一个个垂直系统横向连接,形成一个统一对外服务的分布式数据库系统,每个节点由一个单机数据库系统独立管理和操作该节点所在物理机上的所有资源(CPU、内存、磁盘、网络),节点内系统的各组件间的相互调用不需要通过控制节点,即对控制节点来说,每个节点的内部运行过程相对透明。
  • Hadoop架构 是将不同的资源管理与功能进行分层抽象设计,每层形成一类组件,实现一定程度的解耦,包括存储资源管理、计算资源管理、通用并行计算框架、各类分析功能等,在每层内进行跨节点的资源统一管理或功能并行执行,层与层之间通过接口调用,相互透明,节点内不同层的组件间的相互调用需要由控制节点掌握或通过控制节点协调,即控制节点了解每个节点内不同层组件间的互动过程。
MPP与Hadoop对比
MPP与Hadoop对比

MPP不足:

在中小规模的数据量下,处理结构化数据功能完整,易用,性能出色。
但数据量一旦超过它能承受的上限,木桶效应,扩展性问题就会变为难以忽略的维护成本。

如何选择?

Hadoop和MPP两种技术应根据具体业务以及场景进行选择。

  1. 对于半结构化和非结构化数据,Hadoop在处理上比MPP有一定优势,适合于海量数据批处理类应用,如海量数据ETL、非结构化数据分析与挖掘(关键词提取、情感分析等)。若系统对非结构化数据存储需求较大且数据量巨大,需要动态扩展数据节点等,则使用Hadoop架构更为合适。
  2. MPP架构更适合对现有关系型数据库和数据仓库系统进行升级或替换,其在数据查询类业务上比Hadoop更具优势,适合处理SQL类事务请求、多维度数据分析、展示数据报表等。若大部分存储数据是结构化数据,数据量不是很大,未来不会爆炸式增长,或业务人员习惯使用SQL场景,则可优先考虑使用MPP数据库。
  3. MPP架构更适合追求高性能低延迟,OLAP分析等场景。而Hadoop架构更适合海量数据,任务要求更稳定性,任务延时不太苛刻的场景。
  4. MPP+Hadoop混合架构是未来海量数据处理发展趋势。用MPP处理PB级结构化数据存储与查询,提供完整的SQL与事务支持功能。用Hadoop处理半结构化、非结构化数据,提供灵活的自定义模型与算法开发能力,同时满足多种数据类型处理需求,并在实时查询与离线分析上都能提供较高性能。但MPP+Hadoop混合架构开发成本及维护成本可能较高。

在数据爆炸时代,传统的数据库架构处理系统已经不能满足行业需要。本文从理论及应用角度将两种主流的海量数据处理架构MPP和Hadoop进行对比,分析各自的技术特点,论述它们与传统数据处理的优势。通过分析两大框架底层核心技术,对其优缺点进行了归纳。Hadoop对海量半结构化、非结构化数据存储与处理有一定优势,但在处理速度和易用性上不及MPP。Hadoop灵活性较强,企业可根据自身业务特点进行定制开发。MPP优势在海量结构化数据处理、响应性能和衍生工具等方面,适用于查询业务场景较多的项目。随着Hadoop生态圈的不断发展,如Hadoop的SQL性能提升、BI工具的不断丰富,MPP技术发展会向Hadoop靠拢。基于MPP与Hadoop框架并结合Spark内存计算、流计算等技术的混合架构平台,会成为大型数据处理项目的理想选择。

MPP与Hadoop对比
end