[轉]MPP架構


數據庫構架設計中主要有Shared Everthting、Shared Nothing、和Shared Disk:

Shared Everthting:一般是針對單個主機,完全透明共享CPU/MEMORY/IO,並行處理能力是最差的,典型的代表SQLServer

Shared Disk:各個處理單元使用自己的私有 CPU和Memory,共享磁盤系統。典型的代表Oracle Rac, 它是數據共享,可通過增加節點來提高並行處理的能力,擴展能力較好。其類似於SMP(對稱多處理)模式,但是當存儲器接口達到飽和的時候,增加節點並不能獲得更高的性能 。

Shared Nothing:各個處理單元都有自己私有的CPU/內存/硬盤等,不存在共享資源,類似於MPP(大規模並行處理)模式,各處理單元之間通過協議通信,並行處理和擴展能力更好。典型代表DB2 DPF和hadoop ,各節點相互獨立,各自處理自己的數據,處理后的結果可能向上層匯總或在節點間流轉。

我們常說的 Sharding 其實就是Share Nothing架構,它是把某個表從物理存儲上被水平分割,並分配給多台服務器(或多個實例),每台服務器可以獨立工作,具備共同的schema,比如MySQL Proxy和Google的各種架構,只需增加服務器數就可以增加處理能力和容量。

MPP概念

MPP即大規模並行處理(Massively Parallel Processor )。 在數據庫非共享集群中,每個節點都有獨立的磁盤存儲系統和內存系統,業務數據根據數據庫模型和應用特點划分到各個節點上,每台數據節點通過專用網絡或者商業通用網絡互相連接,彼此協同計算,作為整體提供數據 庫服務。非共享數據庫集群有完全的可伸縮性、高可用、高性能、優秀的性價比、資源共享等優勢。

大規模並行處理(MPP)架構

例子

Greenplum是一種基於PostgreSQL的分布式數據庫。其采用shared nothing架構(MPP),主機,操作系統,內存,存儲都是自我控制的,不存在共享。也就是每個節點都是一個單獨的數據庫。節點之間的信息交互是通過節點互聯網絡實現。通過將數據分布到多個節點上來實現規模數據的存儲,通過並行查詢處理來提高查詢性能。
這個就像是把小數據庫組織起來,聯合成一個大型數據庫。將數據分片,存儲在每個節點上。每個節點僅查詢自己的數據。所得到的結果再經過主節點處理得到最終結果。通過增加節點數目達到系統線性擴展。

elasticsearch也是一種MPP架構的數據庫,Presto、Impala等都是MPP engine,各節點不共享資源,每個executor可以獨自完成數據的讀取和計算,缺點在於怕stragglers,遇到后整個engine的性能下降到該straggler的能力,所謂木桶的短板,這也是為什么MPP架構不適合異構的機器,要求各節點配置一樣。

Spark SQL應該還是算做Batching Processing, 中間計算結果需要落地到磁盤,所以查詢效率沒有MPP架構的引擎(如Impala)高。

(原文地址:https://my.oschina.net/u/2000675/blog/1546160)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM