1. 程式人生 > 其它 >MPP架構簡介

MPP架構簡介

1.什麼是MPP架構

MPP是系統架構角度的一種伺服器分類方法。

目前商用的伺服器分類大體有三種:

  • SMP(對稱多處理器結構)(Symmetric Multi-Processor)

所謂對稱多處理器結構,如下圖所示,是指伺服器中多個 CPU 對稱工作,無主次或從屬關係。各 CPU 共享相同的實體記憶體,每個 CPU 訪問記憶體中的任何地址所需時間是相同的,因此 SMP 也被稱為一致儲存器訪問結構(UMA:Uniform Memory Access)。

  • NUMA(非一致儲存訪問結構)(Non-Uniform Memory Access)
    由於 SMP 在擴充套件能力上的限制,人們開始探究如何進行有效地擴充套件從而構建大型系統的技術,NUMA 就是這種努力下的結果之一。利用 NUMA 技術,可以把幾十個 CPU(甚至上百個 CPU)組合在一個伺服器內。其 CPU 模組結構如下圖所示,NUMA 伺服器的基本特徵是具有多個 CPU 模組,每個 CPU 模組由多個 CPU(如4個)組成,並且具有獨立的本地記憶體、I/O 槽口等。

  • MPP(大規模並行處理結構)(Massive Parallel Processing)
    和 NUMA 不同,MPP 提供了另外一種進行系統擴充套件的方式,它由多個 SMP 伺服器通過一定的節點網際網路絡進行連線,協同工作,完成相同的任務,從使用者的角度來看是一個伺服器系統。其基本特徵是由多個 SMP 伺服器(每個 SMP 伺服器稱節點)通過節點網際網路絡連線而成,每個節點只訪問自己的本地資源(記憶體、儲存等),是一種完全無共享(Share Nothing)結構,因而擴充套件能力最好,理論上其擴充套件無限制,目前的技術可實現512個節點互聯,數千個 CPU。

2.資料庫架構簡介

資料庫構架
資料庫構架設計中主要有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的各種架構,只需增加伺服器數就可以增加處理能力和容量。

3.MPP和批處理的對比

批處理系統 - 使用場景分鐘級、小時級以上的任務,目前很多大型網際網路公司都大規模執行這樣的系統,穩定可靠,低成本。

MPP系統 - 使用場景秒級、毫秒級以下的任務,主要服務於即席查詢場景,對外提供各種資料查詢和視覺化服務。

批處理架構(如 MapReduce)與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架構的叢集節點不易過多。

4. 場景MPP架構系統介紹

MPP架構的OLAP引擎採用MPP架構的OLAP引擎有很多,下面只選擇常見的幾個引擎對比下,可為公司的技術選型提供參考。
採用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)既負責計算,又負責儲存的引擎
  3. ClickHouse
    ClickHouse是近年來備受關注的開源列式資料庫,主要用於資料分析(OLAP)領域。它自包含了儲存和計算能力,完全自主實現了高可用,而且支援完整的SQL語法包括JOIN等,技術上有著明顯優勢。相比於hadoop體系,以資料庫的方式來做大資料處理更加簡單易用,學習成本低且靈活度高。當前社群仍舊在迅猛發展中,並且在國內社群也非常火熱,各個大廠紛紛跟進大規模使用。ClickHouse在計算層做了非常細緻的工作,竭盡所能榨乾硬體能力,提升查詢速度。它實現了單機多核並行、分散式計算、向量化執行與SIMD指令、程式碼生成等多種重要技術。ClickHouse從OLAP場景需求出發,定製開發了一套全新的高效列式儲存引擎,並且實現了資料有序儲存、主鍵索引、稀疏索引、資料Sharding、資料Partitioning、TTL、主備複製等豐富功能。以上功能共同為ClickHouse極速的分析效能奠定了基礎。
  4. 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 做到了無狀態,進而整個系統能夠做到無故障單點。
  5. Druid
    Druid是一個開源、分散式、面向列式儲存的實時分析資料儲存系統。Druid的關鍵特性如下:亞秒級的OLAP查詢分析:採用了列式儲存、倒排索引、點陣圖索引等關鍵技術;在亞秒級別內完成海量資料的過濾、聚合以及多維分析等操作;實時流資料分析:Druid提供了實時流資料分析,以及高效實時寫入;實時資料在亞秒級內的視覺化;豐富的資料分析功能:Druid提供了友好的視覺化介面;SQL查詢語言;高可用性與高可拓展性:Druid工作節點功能單一,不相互依賴;Druid叢集在管理、容錯、災備、擴容都很容易;
  6. TiDB
    TiDB 是 PingCAP 公司自主設計、研發的開源分散式關係型資料庫,是一款同時支援OLTP與OLAP的融合型分散式資料庫產品。TiDB 相容 MySQL 5.7 協議和 MySQL 生態等重要特性。目標是為使用者提供一站式 OLTP 、OLAP 、HTAP 解決方案。TiDB 適合高可用、強一致要求較高、資料規模較大等各種應用場景。
  7. Greenplum
    Greenplum 是在開源的 PostgreSQL 的基礎上採用了MPP架構的效能非常強大的關係型分散式資料庫。為了相容Hadoop生態,又推出了HAWQ,分析引擎保留了Greenplum的高效能引擎,下層儲存不再採用本地硬碟而改用HDFS,規避本地硬碟可靠性差的問題,同時融入Hadoop生態。

參考文章:
https://blog.csdn.net/wank1259162/article/details/109719031
https://blog.csdn.net/Fei20140908/article/details/115420408
https://zhuanlan.zhihu.com/p/395519072