境外服务器的3种体系架构:SMP、NUMA、MPP!
从系统的体系架构来看,目前的商用服务器大体上可以分为3类:SMP(对称多处理器)结构、NUMA(非一致存储访问)结构和MPP(海量并行处理)结构。这3类系统体系架构的服务器,它们具体的特征描述如下:
一、 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。
![服务器的3种体系架构:SMP、NUMA、MPP!]
二、NUMA(Non-Uniform Memory Access)
由于SMP服务器在扩展能力上的限制,人们开始探究如何进行有效地扩展从而构建大型系统的技术,NUMA(非一致存储访问)就是这种努力下的结果之一。利用NUMA(非一致存储访问)技术,可以把几十个CPU,甚至上百个CPU组合在一个服务器内。
NUMA服务器的基本特征是,具有多个CPU模块,每个CPU模块由多个CPU(例如4个)组成,并且具有独立的本地内存、I/O槽口等。由于其节点之间可以通过互联模块进行连接和信息交互,因此每个CPU都可以访问整个系统的内存。显然,访问本地内存的速度,将远远快于访问远地内存(系统内其它节点的内存)的速度,这也是“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(非一致存储访问)不同,MPP(海量并行处理)提供了另外一种进行系统扩展的方式,MPP(海量并行处理)由多个SMP服务器通过一定的节点互联网络进行连接,协同工作,完成相同的任务,从用户的角度来看是一个服务器系统。
MPP服务器基本特征是,由多个SMP服务器(每个SMP服务器称为一个“节点”)通过节点互联网络连接而成,每个节点只访问自己的本地资源(内存、存储等),是一种“完全无共享/零共享”结构,因而扩展能力最好,理论上其扩展无限制,目前的技术可实现512个节点的互联,数千个CPU。
在MPP(海量并行处理)系统中,每个SMP(对称多处理器)节点也可以运行自己的操作系统、数据库等。但和NUMA(非一致存储访问)不同的是,MPP(海量并行处理)系统不存在“异地内存访问”的问题。换言之,每个节点内的CPU,都不能访问另一个节点的内存。节点之间的信息交互是通过节点互联网络实现的,这个过程一般称为“数据重分配”。
MPP服务器需要一种复杂的机制来调度和平衡各个节点的负载和并行处理过程。目前一些基于MPP(海量并行处理)技术的服务器,往往通过系统级软件(如:数据库)来屏蔽这种复杂性。举例来说,NCR的Teradata就是基于MPP(海量并行处理)技术的一个关系数据库软件,基于此数据库来开发应用时,不管后台服务器由多少个节点组成,开发人员所面对的都是同一个数据库系统,而不需要考虑如何调度其中某几个节点的负载。
四、 NUMA(非一致存储访问)与MPP(海量并行处理)的区别
从系统架构来看,NUMA(非一致存储)与MPP(海量并行处理)具有许多相似之处:它们都由多个节点组成,每个节点都具有自己的CPU、内存、I/O,节点之间都可以通过节点互联机制进行信息交互。那么它们的区别在哪里?通过下面分析NUMA(非一致存储访问)和MPP(海量并行处理)服务器的内部架构和工作原理不难发现两者的差异所在。
1、首先是节点互联机制不同,NUMA(非一致存储访问)的节点互联机制是在同一个物理服务器内部实现的,当某个CPU需要进行远地内存访问时,它必须等待,这也是NUMA服务器无法实现CPU增加时,性能线性扩展的主要原因。而MPP(海量并行处理)的节点互联机制,是在不同的SMP服务器外部通过I/O实现的,每个节点只访问本地内存和存储,节点之间的信息交互与节点本身的处理是并行进行的。因此MPP(海量并行处理)在增加节点时,性能基本上可以实现线性扩展。
2、其次是内存访问机制不同。在NUMA服务器内部,任何一个CPU都可以访问整个系统的内存,但远地内存访问的性能,远远低于本地内存访问,因此在开发应用程序时应该尽量避免远地内存访问。而在MPP服务器中,每个节点只访问本地内存,不存在远地内存访问的问题。