MPP 架构
什么是 MPP?
MPP 架构是传统数据仓库中常见的技术架构,将单机数据库节点组成集群,从而提升处理性能。
集群中,这些节点间使用非共享架构,每个节点拥有独立的磁盘存储和内存系统,在计算过程中独立运行,而不必去关心整个集群的状态,也不关心其他节点存储的数据信息。
每台数据节点通过专用网络或者商业通用网络互相连接,在计算过程中,如果需要用到其他节点的数据,使用网络进行数据传输、协同计算。
需要注意的是,MPP 集群是作为整体向外提供服务的,每台节点无法单独运行局部程序。
架构优点
MPP 集群的每台节点本质上还是数据库,所以在架构设计上,优先考虑 C(一致性),其次考虑 A(可靠性),尽量做好 P(分区容错性)。
所以每台节点的内存管理方式、运算方式都比较精细,注重锁、事务、内外存交互等细节,从而保证数据一致性。在这种模式下,MPP 各个节点的运算延迟很低;但正因为精细的管理,其吞吐较差,在数据规模达到一定量级后,便成为局限性能的一个瓶颈。
所以 MPP 数据库更适合中等规模的结构化数据处理,性能上有很好的体现。
架构缺点
但 MPP 因为非共享架构,所以其存储位置是不透明的;数据在存储时,通过 Hash 来确定物理节点。但在执行任务时,因无法断定数据的位置,所以查询任务会在所有节点执行。这个是架构所决定的,基本对性能没有影响。
MPP 真正的问题是扩展性,因为 MPP 在并行计算时,单节点瓶颈会成为整个系统的短板;在一个协同运算过程中,当一个节点运行缓慢时,其它节点便会进行等待。当然,缓慢节点可以通过网络将数据传输到其他节点来提升运行速度;但随着集群规模的增大,节点的故障率会逐渐升高,瓶颈就会越发明显。这也是为什么 MPP 数据库的扩展性较差的原因。
而且 MPP 一般致力实现分布式事务,但在分布式环境中实现事务后,扩展性一定会受到影响。
分布式架构
什么是分布式架构?
分布式架构是大数据中常见的技术架构,也称为 Hadoop 架构/批处理架构。
分布式架构组成的集群中,各节点实现场地自治,即可以独立运行局部应用。而在 MPP 架构中是无法做到的,它只能作为一个整体对外提供服务。
因为分布式架构中,数据在集群中是全局透明共享的,每个节点拥有自治的运算资源。而各个节点的存储资源,组成了一个公共的数据存储系统;节点在进行运算时,可以访问公共的数据存储系统,实现数据的透明访问。
分布式架构中对网络的要求不高,每台节点可以通过局域网或广域网相连,因此节点间的通信开销比较大;在计算时,尽量避免数据移动。
架构特点
分布式架构在设计时,优先考虑的是 P(分区容错性),然后是 A(可用性),最后再考虑 C(一致性)。
所以数据被拆分为多个分区后,每个分区又会有多个副本,从而保证容错。这样的话,就解决了单点故障的问题,如果一个节点运行缓慢,可以将节点上的任务取消,然后分发到数据的其它副本节点进行运算。
而且正因为分布式架构中数据一致性的优先级最低,所以它的存储、运算方式粗犷,吞吐量较大;也正是因为这样,在数据量较低的情况下,运行速度远不及 MPP 架构;但数据量一旦超过某个量级,吞吐量的优势会极大的发挥出来。
因为使用了公共的数据存储,所以它的扩展性极强,而且非常适合处理非结构化、半结构化数据。
这种粗犷的方式,非常适合海量数据的存储、处理。但它需要对中间结果进行存储,且数据移动开销较大。
MPP+ 分布式架构
有些大数据数据仓库产品也会采用 MPP+ 分布式架构,融合两者的优点,来提升性能。
这种架构的数据存储层采用分布式架构中的公共存储,提升了分区容错性,也将 MPP 的扩展性得到了质的提升。上层处理架构依然采用 MPP,减少运算的延迟。
MPP+ 分布式架构的数据仓库相对于其它大数据产品来说,延迟低,速度快;所以在实时流处理场景中经常被采用。
小结
MPP 架构和分布式架构的适用场景不同。MPP 适合中等规模的数据处理,延迟低、SQL 支持高是它主要的优势;分布式(批处理)架构更适合海量数据规模的批处理计算,吞吐高、运算速度快、扩展性强是它的优势,而这也是离线批处理数仓所看重的。
MPP+ 分布式架构集成了两者的优势,扩展性强、延迟低、SQL 支持率高,实际上是两者间取了个折中,能够在海量数据规模下依然具有较好的低延迟特性。
这些架构并没有好坏之分,对于不同的场景只有适合和不适合之分。如果使用分布式架构的数据仓库对较少的数据量进行交互式的 SQL 查询,需要 5 分钟,但使用传统数仓只需要 1 秒;那不是产品的问题,而是用错的场景而已。