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)高。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章