一、MPP倒退历程
1、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颗就OK了,多余的就节约了。
2、NUMA(Non-Uniform Memory Access)
因为SMP在扩大能力上的限度,人们开始探索如何进行无效地扩大从而构建大型零碎的技术,NUMA就是这种致力下的后果之一。利用NUMA技术,能够把几十个CPU(甚至上百个CPU)组合在一个服务器内。NUMA服务器的基本特征是具备多个CPU模块,每个CPU模块由多个CPU(如4个)组成,并且具备独立的本地内存、I/O槽口等。因为其节点之间能够通过互联模块(如称为Crossbar Switch)进行连贯和信息交互,因而每个CPU能够拜访整个零碎的内存(这是NUMA零碎与MPP零碎的重要差异)。显然,拜访本地内存的速度将远远高于拜访远地内存(零碎内其它节点的内存)的速度,这也是非统一存储拜访NUMA的由来。因为这个特点,为了更好地施展零碎性能,开发应用程序时须要尽量减少不同CPU模块之间的信息交互。利用NUMA技术,能够较好地解决原来SMP零碎的扩大问题,在一个物理服务器内能够反对上百个CPU。比拟典型的NUMA服务器的例子包含HP的Superdome、SUN15K、IBMp690等。
每个CPU模块之间都是通过互联模块进行连贯和信息交互,CPU都是互通互联的,同时,每个CPU模块均匀划分为若干个Chip(不多于4个),每个Chip都有本人的内存控制器及内存插槽。
在NUMA中还有三个节点的概念:
1)本地节点:对于某个节点中的所有CPU,此节点称为本地节点。
2)街坊节点:与本地节点相邻的节点称为街坊节点。
3)远端节点:非本地节点或街坊节点的节点,称为远端节点。
4)街坊节点和远端节点,都称作非本地节点(Off Node)。
CPU拜访不同类型节点内存的速度是不雷同的,拜访本地节点的速度最快,拜访远端节点的速度最慢,即访问速度与节点的间隔无关,间隔越远访问速度越慢,此间隔称作Node Distance。应用程序要尽量的缩小不通CPU模块之间的交互,如果应用程序能有办法固定在一个CPU模块里,那么利用的性能将会有很大的晋升。
3、MPP(Massively Parallel Processing)
MPP是将工作并行的扩散到多个服务器和节点上,在每个节点上计算实现后,将各自局部的后果汇总在一起失去最终的后果(与Hadoop类似)。MPP的零碎扩大和NUMA不同,MPP是由多台SMP服务器通过肯定的节点互联网络进行连贯,协同工作,实现雷同的工作,从用户的角度来看是一个服务器零碎。每个节点只拜访本人的资源,所以是一种齐全无共享(Share Nothing)构造。
(1)MPP构造扩大能力最强,实践能够有限扩大。因为MPP是多台SPM服务器连贯的,每个节点的CPU不能拜访另一个节点内存,所以也不存在异地拜访的问题。
(2)每个节点内的CPU不能拜访另一个节点的内存,节点之间的信息交互是通过节点互联网络实现的,这个过程称为数据重调配。
(3)MPP服务器须要一种简单的机制来调度和均衡各个节点的负载和并行处理过程。目前,一些基于MPP技术的服务器往往通过零碎级软件(如数据库)来屏蔽这种复杂性。举个例子,Teradata就是基于MPP技术的一个关系数据库软件(这是最早采纳MPP架构的数据库),基于此数据库来开发利用时,不论后盾服务器由多少节点组成,开发人员面对的都是同一个数据库系统,而无需思考如何调度其中某几个节点的负载。
MPP架构特色:(1)工作并行执行;(2)数据分布式存储(本地化);(3)分布式计算;(4)高并发,单个节点并发能力大于300用户;(5)横向扩大,反对集群节点的扩容;(6)Shared Nothing(齐全无共享)架构;(7)公有资源。
MPP和NUMA:
相同点:首先NUMA和MPP都是由多个节点组成的;其次每个节点都有本人的CPU,内存,I/O等;都能够都过节点互联机制进行信息交互。
不同点:首先是节点互联机制不同,NUMA的节点互联是在同一台物理服务器外部实现的,MPP的节点互联是在不同的SMP服务器内部通过I/O实现的。其次是内存拜访机制不同,在NUMA服务器外部,任何一个CPU都能够拜访整个零碎的内存,但异地内存拜访的性能远远低于本地内存拜访,因而,在开发应用程序时应该尽量避免异地内存拜访。而在MPP服务器中,每个节点只拜访本地内存,不存在异地内存拜访问题。
二、MPP与批处理架构区别
相同点:
批处理架构与MPP架构都是分布式并行处理,将工作并行的扩散到多个服务器和节点上,在每个节点上计算实现后,将各自局部的后果汇总在一起失去最终的后果。
不同点:
批处理架构和MPP架构的不同点能够举例来说:咱们执行一个工作,首先这个工作会被分成多个task执行,对于MapReduce来说,这些tasks被随机的调配在闲暇的Executor上;而对于MPP架构的引擎来说,每个解决数据的task被绑定到持有该数据切片的指定Executor上。
批处理的劣势:
对于批处理架构来说,如果某个Executor执行过慢,那么这个Executor会缓缓调配到更少的task执行,批处理架构有个揣测执行策略,揣测出某个Executor执行过慢或者有故障,则在接下来调配task时就会较少的调配给它或者间接不调配,这样就不会因为某个节点呈现问题而导致集群的性能受限。
批处理的缺点:
任何事件都是有代价的,对于批处理而言,它的劣势也造成了它的毛病,会将两头后果写入到磁盘中,这重大限度了解决数据的性能。
MPP的劣势:
MPP架构不须要将两头数据写入磁盘,因为一个繁多的Executor只解决一个繁多的task,因而能够简略间接将数据stream到下一个执行阶段。这个过程称为pipelining,它提供了很大的性能晋升。
MPP的缺点:
对于MPP架构来说,因为task和Executor是绑定的,如果某个Executor执行过慢或故障,将会导致整个集群的性能就会受限于这个故障节点的执行速度(所谓木桶的短板效应),所以MPP架构的最大缺点就是——短板效应。另一点,集群中的节点越多,则某个节点呈现问题的概率越大,而一旦有节点呈现问题,对于MPP架构来说,将导致整个集群性能受限,所以个别理论生产中MPP架构的集群节点不易过多。
举个例子来说下两种架构的数据落盘:要实现两个大表的join操作,对于批处理而言,如Spark将会写磁盘三次(第一次写入:表1依据join key进行shuffle;第二次写入:表2依据join key进行shuffle;第三次写入:Hash表写入磁盘), 而MPP只须要一次写入(Hash表写入)。这是因为MPP将mapper和reducer同时运行,而MapReduce将它们分成有依赖关系的tasks(DAG),这些task是异步执行的,因而必须通过写入两头数据共享内存来解决数据的依赖。
三、MPP利用
采纳MPP架构的OLAP引擎分为两类,一类是本身不存储数据,只负责计算的引擎;一类是本身既存储数据,也负责计算的引擎。
1、只负责计算,不负责存储的引擎
1)Impala
Apache Impala是采纳MPP架构的查问引擎,自身不存储任何数据,间接应用内存进行计算,兼顾数据仓库,具备实时,批处理,多并发等长处。
提供了类SQL(类Hsql)语法,在多用户场景下也能领有较高的响应速度和吞吐量。它是由Java和C++实现的,Java提供的查问交互的接口和实现,C++实现了查问引擎局部。
Impala反对共享Hive Metastore,但没有再应用迟缓的 Hive+MapReduce 批处理,而是通过应用与商用并行关系数据库中相似的分布式查问引擎(由 Query Planner、Query Coordinator 和 Query Exec Engine 三局部组成),能够间接从 HDFS 或 HBase 中用 SELECT、JOIN 和统计函数查问数据,从而大大降低了提早。
Impala常常搭配存储引擎Kudu一起提供服务,这么做最大的劣势是查问比拟快,并且反对数据的Update和Delete。
2)Presto
Presto是一个分布式的采纳MPP架构的查问引擎,自身并不存储数据,然而能够接入多种数据源,并且反对跨数据源的级联查问。Presto是一个OLAP的工具,善于对海量数据进行简单的剖析;然而对于OLTP场景,并不是Presto所善于,所以不要把Presto当做数据库来应用。
Presto是一个低提早高并发的内存计算引擎。须要从其余数据源获取数据来进行运算剖析,它能够连贯多种数据源,包含Hive、RDBMS(Mysql、Oracle、Tidb等)、Kafka、MongoDB、Redis等。
2、既负责计算,又负责存储的引擎
(1)ClickHouse
ClickHouse是近年来备受关注的开源列式数据库,次要用于数据分析(OLAP)畛域。
它自蕴含了存储和计算能力,齐全自主实现了高可用,而且反对残缺的SQL语法包含JOIN等,技术上有着显著劣势。相比于hadoop体系,以数据库的形式来做大数据处理更加简略易用,学习成本低且灵便度高。以后社区仍旧在迅猛发展中,并且在国内社区也十分炽热,各个大厂纷纷跟进大规模应用。
ClickHouse在计算层做了十分粗疏的工作,竭尽所能榨干硬件能力,晋升查问速度。它实现了单机多核并行、分布式计算、向量化执行与SIMD指令、代码生成等多种重要技术。
ClickHouse从OLAP场景需要登程,定制开发了一套全新的高效列式存储引擎,并且实现了数据有序存储、主键索引、稠密索引、数据Sharding、数据Partitioning、TTL、主备复制等丰盛性能。以上性能独特为ClickHouse极速的剖析性能奠定了根底。
(2)Doris
Doris是百度主导的,依据Google Mesa论文和Impala我的项目改写的一个大数据分析引擎,是一个海量分布式 KV 存储系统,其设计指标是反对中等规模高可用可伸缩的 KV 存储集群。
Doris能够实现海量存储,线性伸缩、平滑扩容,主动容错、故障转移,高并发,且运维成本低。部署规模,倡议部署4-100+台服务器。
Doris3 的次要架构:DT(Data Transfer)负责数据导入、DS(Data Seacher)模块负责数据查问、DM(Data Master)模块负责集群元数据管理,数据则存储在 Armor 分布式 Key-Value 引擎中。Doris3 依赖 ZooKeeper 存储元数据,从而其余模块依赖 ZooKeeper 做到了无状态,进而整个零碎可能做到无故障单点。
(3)Druid
Druid是一个开源、分布式、面向列式存储的实时剖析数据存储系统。
Druid的要害个性如下:
亚秒级的OLAP查问剖析:采纳了列式存储、倒排索引、位图索引等关键技术;在亚秒级别内实现海量数据的过滤、聚合以及多维分析等操作;实时流数据分析:Druid提供了实时流数据分析,以及高效实时写入;实时数据在亚秒级内的可视化;丰盛的数据分析性能:Druid提供了敌对的可视化界面;SQL查询语言;高可用性与高可拓展性:Druid工作节点性能繁多,不相互依赖;Druid集群在治理、容错、灾备、扩容都很容易;
(4)TiDB
TiDB 是 PingCAP 公司自主设计、研发的开源分布式关系型数据库,是一款同时反对OLTP与OLAP的交融型分布式数据库产品。
TiDB 兼容 MySQL 5.7 协定和 MySQL 生态等重要个性。指标是为用户提供一站式 OLTP 、OLAP 、HTAP 解决方案。TiDB 适宜高可用、强统一要求较高、数据规模较大等各种利用场景。
(5) Greenplum
Greenplum 是在开源的 PostgreSQL 的根底上采纳了MPP架构的性能十分弱小的关系型分布式数据库。为了兼容Hadoop生态,又推出了HAWQ,剖析引擎保留了Greenplum的高性能引擎,上层存储不再采纳本地硬盘而改用HDFS,躲避本地硬盘可靠性差的问题,同时融入Hadoop生态。
3、罕用的引擎比照
Reference
https://www.jianshu.com/p/060...
https://blog.csdn.net/wylfeng...
https://zhuanlan.zhihu.com/p/...
https://www.eefocus.com/embed...