MPP代表"Massively Parallel Processing",是一种计算机架构,旨在通过分布式处理来实现大规模数据处理和分析。它使用多个处理器或计算节点同时工作,以加快数据处理速度和提高性能。MPP架构通常用于处理海量数据的应用程序,如数据仓库、商业智能和大数据分析。
MPP常见的发力场景是数据仓库。在数据仓库中,MPP架构意味着数据库服务被部署在多个节点中,共同完成存储、分析计算任务。
常见的开源MPP数据仓库包括:
1. Apache HAWQ
2. Apache MADlib
3. Greenplum Database
4. ClickHouse
5. Apache Cassandra (支持 MPP 模式)
MPP技术的出现,有它重要的历史意义。单机数据库的存储和计算性能有限,MPP这种以多节点的形式进行共同存储与计算的技术就应运而生。但它只是在原有单机数据库的基础上做了改良,并没有完全脱离之前单机数据库的包袱。一些单机数据库,也可以通过增加中间件的形式组织为MPP架构,以增加存储和计算性能。
这样一种架构势必解决了一些问题,解决了超过单机数据库能承受的中等规模数据的存储与计算问题。但也带来了一些新的问题。
它主要的优势在于:
所以在使用上,MPP数据库几乎继承了单机数据库的所有优势,结构化数据场景支持成熟,更完整可靠的数据管理与安全性能,支持事务,在中小规模数据情况下提供更高的性能和较低的查询延迟。
那它的缺陷是什么?那要从它的实现原理说起。
MPP数据库的实现原理简单来说就是将数据库、数据表拆分到不同的节点存储,并将计算任务无差别地分发到各个节点进行运算,最后将各个节点得到的计算结果返回。当然,在技术实现上会有很多调优和复杂的算法实现。
这种模式下,MPP数据仓库就会带来木桶效应、扩展性问题,这两个问题是MPP架构上娘胎里带来的天生缺陷,通过调优等技术无法完全解决,只能是不断优化去尽量避免这些问题。
木桶效应很好理解,任意一台节点出问题,就会导致这台节点子任务计算时间延长,从而延长整个父任务的执行时间。父任务需要等待所有子任务执行完成后才返回最终结果。
扩展性问题是MPP数据仓库无法存储和处理海量数据的重要原因。节点数一旦增多,任务分发时间会拉长,各节点相应时间回拉长,木桶效应也会更加明显。
假设生产中的每天的硬盘故障率为1%,如果MPP集群有500块硬盘(每台服务器5块数据盘,100台服务器),那么每天至少有5块盘出现故障。数据盘故障就会导致严重的木桶效应,甚至导致数据丢失。节点数越多,维护成本越高。
那么MPP的常见的缺陷就能推出:
MPP技术当然有它的优势:在中小规模的数据量下,处理结构化数据功能完整,易用,性能出色。但数据量一旦超过它能承受的上限,木桶效应,扩展性问题就会变为难以忽略的维护成本。
MPP技术的使用场景,当然就是中小规模的数据存储与处理。因为扩展性有限,数据量一旦达到海量级别,就只能寻求大数据方案去解决了。