当前位置: 首页 > 后端技术 > Java

为什么选择MPP架构?

时间:2023-04-01 14:10:00 Java

简介Greenplum(GPDB)、ClickHouse、Impala、Presto、Tidb、Greenplum衍生品AnalyticDBPostgreSQL(adbpg)等均采用MPP架构。MPP引擎逐渐展现出强大的高吞吐量和低延迟计算能力;MPP是一种大规模并行处理结构,由多台SMP服务器通过一定的节点互联网络连接起来,共同完成同一任务。透视图是一个服务器系统。每个节点只访问自己的资源,因此是一个完全无共享(SharedNothing)的结构。MPP结构具有最强的可扩展性。它最早出现是为了解决关系型数据库扩展性差的问题,淘汰共享存储。由于MPP由多个SPM服务器连接,每个节点都有独立的磁盘存储系统和内存系统。每个节点的CPU无法访问另一个节点的内存,所以不存在远程访问的问题。MPP架构图:虽然MPP是可扩展的,但是我理解节点不会无限扩展,市面上的MPP架构的集群规模都不会太大;对于MPP架构,由于tasks和Executors是绑定的,如果一个Executor执行的太慢或者失败了,整个集群的性能会被故障节点的执行速度所限制(也就是所谓的木桶短板效应),所以MPP架构最大的缺陷就是短板效应。还有一点就是集群中的节点越多,某个节点出现问题的概率就越大。一旦某个节点出现问题,对于MPP架构来说,整个集群的性能都会受到限制。所以,一般来说,实际生产中的MPP架构是不容易出现集群节点过多的,这也是我们看到很多存储设备都有节点上限的原因。考虑到硬件损耗,维护成本居高不下。架构特点&机制MPP是一种多机水平扩展架构,满足“分布式”的基本要求;如上所述,每个节点只访问自己的资源,因此是一个完全无共享(SharedNothing)的架构。一般来说,MPP架构的特点:分布式计算;分布式数据存储(本地化);任务的并行执行,一定的并发访问能力;横向扩展,支持集群节点扩展;SharedNothing(完全不共享)架构。GPDB具有高度的开源性。通过分析它,我们可以分析出MPP架构的工作机制;GPDB属于主从架构,Slave称为Segment,是主要的数据处理节点。在PostgreSQL的基础上进行封装改造,天然具备事务处理能力,可横向扩展;集群中有一个唯一的ActiveMaster节点,除了元数据存储和调度功能外,它还承担一定的工作负载,即所有外部数据在线访问集群都必须经过Master节点;在可靠性设计方面,首先设置StandbyMaster节点,可以通过外部HA监控模块发现和激活,并在Master节点宕机时接管其任务。其次,Segment节点被细分为两种不同的角色,Primary和Mirror。它是前者的备份节点,在提交数据时两者之间进行强同步,以保证当Primary宕机时,可以调度Mirror接替前者的任务。并发性由于MPP的“完全对称性”,即当查询开始执行时,每个节点都在并行执行完全相同的任务,这意味着MPP支持的并发数与查询数无关集群中的节点;计算公式如下:rds_segment_expansion_coeff最大并行倍数的上限是一个默认的固定值。通过外部测试数据,几个节点的集群和几百个节点的集群支持的并发查询数是一样的。随着并发数的增加,两者在几乎相同的时间点出现了性能下降。笔者在使用adbpg时也发现,随着节点的扩大,单节点的并发数增加,在某一时刻水位飙升,性能会急剧下降;传统MPP的在线查询主要面向企业管理的小部分用户,对并发能力的要求较低。大数据时代,数据使用者从战略管理转向战术执行甚至一线人员,从孤立的分析场景转向与业务交易场景的融合。在线查询的并发能力已经远超传统MPP时代,这也是分布式数据库需要考虑的重要问题。除了以上两点,根据adbpg的说法,架构中的Master节点承担了一定的工作量,所有在线查询数据流都必须经过这个节点,所以Master也有一定的性能瓶颈。同时,在实践中,adbpg在管理数据库连接数方面非常谨慎,虽然adbpg本身是支持多master的。Pivotal专家给出了一个建议的最大值,该值不会随着集群规模的扩大而增加。横向扩张上面也提到了短板效应。与MapReduce相比,如果一个Executor在MapReduce中执行的太慢,那么这个Executor会逐渐分配到更少的任务去执行。批处理架构有一种推测执行策略,推断出某个Executor如果执行速度太慢或出现故障,在下次分配任务时少分配或不分配给它;MPP以后会和这个能力结合,我理解会更强大。当然,与MapReduce相比,MPP架构在性能上也有很大的优势。它不需要将中间数据写入磁盘,因为单个Executor只处理单个任务,因此它可以简单地将数据流式传输到下一个执行阶段。.这个过程称为流水线,它提供了很大的性能提升。举个例子:实现两个大表的join操作,比如批处理,Spark会写三次磁盘(第一次写:table1isshuffleaccordingtothejoinkey;第二次写:table2Shuffle根据joinkey;第三次write:Hash表写入磁盘),而MPP只需要一次write(Hash表被写入)。这是因为MPP同时运行mapper和reducer,而MapReduce将它们划分为依赖任务(DAG)。这些任务是异步执行的,因此必须通过将中间数据写入共享内存来解决数据依赖性。ShareNothing数据库架构设计的三种模式:sharenothing、shareeverything、sharedisk数据库架构设计主要有SharedEverthting、SharedNothing、SharedDisk:SharedEverthting:一般针对单台主机,完全透明共享CPU/MEMORY/IO,并行处理能力最差,典型代表SQLServerSharedDisk:每个处理单元使用自己私有的CPU和Memory,共享磁盘系统。OracleRac的典型代表是数据共享,可以通过增加节点来提高并行处理能力,具有很好的扩展性。它类似于SMP(symmetricmultiprocessing)模式,但是当内存接口饱和时,增加节点并不能获得更高的性能。SharedNothing:每个处理单元都有自己私有的CPU/内存/硬盘等,没有共享资源,类似于MPP(massivelyparallelprocessing)模式,每个处理单元通过协议进行通信,并行处理和扩展能力更好。典型的代表是DB2DPF和Hadoop。每个节点相互独立,处理自己的数据。处理后的结果可能会聚合到上层或在节点之间循环。我们常说的Sharding其实就是ShareNothing架构。它将一个表从物理存储中横向划分出来,分布到多个服务器(或多个实例)中。每个服务器都可以独立工作并具有共同的模式。例如MySQLProxy和Google的各种架构,只需要增加服务器数量就可以提高处理能力和容量。最后,总的来说,MPP架构也可能存在短板效应,现在也有解决方案,比如HAQW,但是凭借其在某些大数据下强大的高吞吐量和低延迟计算能力,MPP还是有很多架构比较。存储选项。