写在前面

本文隶属于专栏《100个问题搞定大数据理论体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

本专栏目录结构和文献引用请见100个问题搞定大数据理论体系

解答

从系统架构来看,目前的商用服务器大体可以分为三类,即对称多处理器结构(Symmetric Multi-Processor,SMP)、非一致存储访问结构(Non-Uniform Memory
Access,NUMA),以及海量并行处理结构(Massive Parallel Processing,MPP)。

补充

SMP(Symmetric Multi-processor)

所谓对称多处理器结构,是指服务器中的多个CPU对称工作,无主次或从属关系。

各CPU共享相同的物理内存,每个CPU访问内存中的任何地址所需时间是相同的,因此SMP也被称为一致存储器访问结构(Uniform Memory Access,UMA)
对SMP服务器进行扩展的方式包括增加内存、使用更快的CPU、増加CPU、扩充IO(槽口数与总线数)及添加更多的外部设备(通常是磁盘存储)。

SMP服务器的主要特征是共享,系统中的所有资源(如CPU、内存、1O等)都是共享的。

也正是由于这种特征,导致了SMP服务器的主要问题,即它的扩展能力非常有限

对于SMP服务器而言,每个共享的环节都可能造成SMP服务器扩展时的瓶颈,而最受限制的则是内存

由于每个CPU必须通过相同的内存总线访问相同的内存资源,因此,随着CPU数量的增加,内存访问冲突将迅速增加,最终造成CPU资源的浪费,使CPU性能的有效性大大降低。

实验证明,SMP服务器CPU利用率最好的情况是2~4个CPU

NUMA(Non-Uniform Memory Access)

由于SMP在扩展能力上的限制,人们开始探究如何进行有效的扩展从而构建大型系统的技术,NUMA就是这种努力下的结果之一。

利用NUMA技术,可以把几十个CPU (甚至上百个CPU)组合在一台服务器内。其CPU模块结构如图所示。

NUMA

NUMA服务器的基本特征是拥有多个CPU模块,每个CPU模块由多个CPU(如4个)组成并且具有独立的本地内存、1/O槽口等。

由于其节点之间可以通过互联模块(如称为 Crossbar Switch)进行连接和信息交互,因此,每个CPU可以访问整个系统的内存(这是NUMA系统与MPP系统的重要区别)。

显然,访问本地内存的速度将远远高于访问异地内存(系统内其他节点的内存)的速度, 这也是非一致存储访问NUMA的由来。

由于这个特点,为了更好地发挥系统性能,开发应用程序时需要尽量减少不同CPU模块之间的信息交互。

利用NUMA技术,可以较好地解决原来SMP系统的扩展问题,在一台物理服务器内可以支持上百个CPU。

但是NUMA技术同样有一定的缺陷,由于访问异地内存的时延远远超过访问本地内存,因此,当CPU数量增加时,系统性能无法线性增加

如惠普公司发布 Superdome服务器时,曾公布了它与惠普其他unix服务器的相对性能值,结果发现,64路CPU的Superdome服务器(NUMA结构)的相对性能值是20,而8路N4000(共享的SMP结构)
的相对性能值是6.3。从这个结果可以看出,8倍数量的CPU换来的只是3倍性能的提升。

MPP (Massive Parallel Processing)

和NUMA不同,MAA提供了另外一种进行系统扩展的方式,它由多台SMP服务器通过一定的节点互联网络进行连接,协同工作,完成相同的任务,从用户角度来看是一个服务器系统。

其基本特征是由多台SMP服务器(每台SMP服务器称为节点)通过节点互联网络连接而成,每个节点只访问自己的本地资源(内存、存储等)。

MPP是一种完全无共享(share Nothing)结构,因而扩展能力最强,理论上可以无限扩展,目前的技术可以实现512个节点互联.包含数千个CPU。

目前业界对节点互联网络暂无标准, 它们都采用了不同的内部实现机制。但节点互联网络仅供MPP服务器内部使用,对用户而言是透明的。

在MPP系统中.每个SMP节点也可以运行自己的操作系统,数据库等。但和NUMA不同的是,它不存在异地内存访问的问题。换言之,每个节点内的CPU不能访问另一个节点的内存。节点之间的信息交互是通过节点互联网络实现的.这个过程一般称为数据重分配(
Data Redistribution )。

但是MPP服务器需要一种复杂的机制来调度和平衡各个节点的负载和并行处理过程

目前,-—些基于MPP技术的服务器往往通过系统级软件(如数据库)来屏蔽这种复杂性。

服务器架构设计

NUMA与MPP的区别

从架构来看,NUMA与MPP有许多相似之处:

  1. 它们都由多个节点组成;
  2. 每个节点都有自己的CPU、内存、I/O;
  3. 节点之间都可以通过节点互联机制进行信息交互。

那么二者的区别在哪里?通过分析NUMA和MPP服务器的内部架构与工作原理不难发现其差异所在。

节点互联机制不同。

  1. NUMA的节点互联机制是在同一台物理服务器内部实现的,当某个CPU需要进行异地内存访问时,它必须等待,这也是NUMA服务器无法实现CPU增加时性能线性扩展的主要原因。
  2. 而MPP的节点互联机制是在不同的SMP服务器外部通过io实现的,每个节点只访问本地内存和存储,节点之间的信息交互与节点本身的处理是并行进行的。因此,MPP在增加节点时,其性能基本上可以实现线性扩展。

内存访问机制不同。

  1. 在NUMA服务器内部,任何一个CPU都可以访问整个系统的内存, 但异地内存访问的性能远远低于本地内存访问,因此,在开发应用程序时应该尽量避免异地内存访问。
  2. 而在MPP服务器中,每个节点只访问本地内存,不存在异地内存访问的问题。

Q.E.D.


Apache Spark Contributor