2018年5月5日星期六

SMP/MPP/NUMA系统架构了解

本文涉及到如下三种常见服务器架构:

  1. SMP(Symmetric Multi-Processor,对称多处理结构)。单主机架构。
  2. NUMA(Non-Uniform Memory Access,非一致性内存访问)。单主机架构。
  3. MPP(Massive Parallel Processing,海量并行处理结构)。多主机架构。

SMP(Symmetric Multi-Processor,对称多处理结构)

    SMP服务器中有多个处理器对称工作,无主次之分。各处理器平等使用所有物理内存,对资源的权限和访问效率都一样,由单一操作系统来控制。由于多处理器在内存访问上是完全平等的,所以SMP也被称为一致性内存访问(UMA, Uniform Memory Access)。
架构示意图:
    SMP的资源共享特质也导致了其扩展存在瓶颈:每一个共享的环节出现瓶颈都会影响整个SMP服务器,尤其是内存!每一个处理器必须通过同一条内存总线访问同一处内存资源,所以随着处理器数量的增加,内存访问、总线使用的冲突就会迅速增加,最终造成处理器资源的浪费,使得处理器性能的有效性大大降低。

NUMA(Non-Uniform Memory Access,非一致性内存访问)

SMP这样的一致性内存访问结构由于公用总线等资源,存在扩展上的限制。而NUMA为提高扩展性提供了一种方案。

架构示意图:
其特点是:
  • 由多个CPU模块组成,CPU模块也称为NUMA节点。每个节点可以包括多个处理器,有独立的本地内存,I/O插槽。
  • NUMA节点间通过互联模块(称为Crossbar Switch)进行连接和信息交互,所以每个CPU可以访问整个系统的内存。显然,访问本地内存速度将远高于访问其他NUMA节点的内存。由于内存资源的不同存取代价,所以有了非一致性存储NUMA的名称。
  • 基于本地内存与其他节点的内存的访问效率差异,开发应用程序应尽量减少不同NUMA节点之间的信息交互。
NUMA虽然相对SMP服务器扩展性较好,但是依然有局限,单个节点的内存容量有限,而访问远地内存的延时远远超过本地内存。当CPU数量增加时,系统性能无法线性增加。

MPP(Massive Parallel Processing,海量并行处理结构)

无论是SMP架构还是NUMA架构,作为单台服务器,扩展能力毕竟有限,MPP提供了使用SMP服务器作为节点的系统扩展方案。

架构示意图:
其特点是:
  • 单个节点是SMP服务器,所以MPP其实与SMPNUMA服务器不同,其实由多台物理机组成。
  • 不同节点间通过"节点互联网络"进行通信,"节点互联网络"仅供MPP服务器内部使用,对用户而言是透明的
  • 用户角度只看到一个服务器系统
  • 每个SMP服务器只访问本地的资源,不会跨节点资源占用。而节点间的信息交互,称为数据重分配(Data Redistribution)

这样的架构提供了完全无共享(Share Nothing)系统结构,理论上可以无限扩展!但是MPP服务器需要一种复杂的机制来调度和平衡各个节点的负载和并行处理过程。常用的一种做法是添加一层系统级软件来隔离这种复杂度对开发人员的影响,如特定数据库系统。这样开发人员只需要与数据库系统交互,而由数据库系统实现后代MPP系统节点间的调度、并行。

NUMA与MPP的主要区别


1. 节点交互机制不同。
虽然NUMAMPP都划分节点,但是NUMA节点交互在同一物理服务器内部实现。当某个CPU需要访问远地内存时,需要等待,这也是NUMA服务器无法实现CPU增加时性能线程扩展的主因。而MPP的节点交互使用SMP服务器外部的网络I/O实现。每个节点只访问本地内存和存储,节点之间的信息交互与节点本身的处理是并行进行的,因此MPP在增加节点时性能基本可以实现线性扩展。

2.内存访问机制。
NUMA
可以跨节点访问,但是本地内存访问成本远低应尽量使用本地内存。MPP则只能访问本地内存。

数据库应用场景


MySQL场景下单机多实例,选择的还是使用标准的SMP架构。NUMA架构下对异节点的CPU和内存的使用导致了性能的不稳定。

没有评论:

发表评论