天天看點

探秘資料庫中的并行計算技術應用

作者:華為雲開發者聯盟

本文分享自華為雲社群《【GaussTech技術專欄】資料庫中并行計算技術應用探秘-雲社群-華為雲》,作者:GaussDB資料庫。

并行計算是提高系統性能的重要手段之一。該技術是通過利用多台伺服器、多個處理器、處理器中的多核以及SIMD指令集等技術,實作任務的并行化處理,進而加快任務處理的速度。同時,在多個計算機領域有應用,如圖像處理、大資料處理、科學計算及資料庫等。

資料庫中的并行處理技術

1. 分布式并行處理架構

并行處理資料庫架構的出現可以追溯到上世紀80年代。當時計算機性能非常有限,但企業已經有了大規模的資料的處理需求。

那當時技術界是如何提升資料處理能力的呢?

當時技術界提出了三種并行架構:Shared Nothing、Shared Disk、Shared Memory,并對他們展開了各種讨論。圖靈獎獲得者Michael Stonebraker在1985年發表的一篇關于Shared Nothing的文章《The Case for Shared Nothing》,從不同次元,對三種架構能力做了一些比較分析。由于在成本、擴充性、可用性方面的優勢,Shared Nothing成為主流的設計思路。

1)最早的Shared Nothing商業産品

最早的Shared Nothing資料處理系統是1984年Teradata公司釋出的第一代産品DBC/1012。

探秘資料庫中的并行計算技術應用

圖1 DBC/1012架構

DBC/1012的系統架構的關鍵元件有:

探秘資料庫中的并行計算技術應用

DBC/1012一開始作為大型機IBM 370的後端,後來也可用作其他各種大型機、小型計算機和工作站的後端。資料被算法平均劃分到AMP管理的本地Disk,AMP之間通常不交換資料。可通過增加AMP的數量來提升整個系統的資料容量和性能。

雖然現在看來滿滿的曆史感,但是當時借助Shared Nothing技術處理大資料時,Teradata表現得非常好,是以也赢得了優質大客戶,幫助Teradata取得商業上的成功。

2)MPP(Massively Parallel Processing)和shared-nothing

資料庫并行處理技術中經常會提到的MPP(Massively Parallel Processing),通常指的是伺服器的系統架構分類方法。除了MPP之外,還有NUMA、SMP這兩個分類。

  • SMP(Symmetric MultiProcessing):對稱多處理器結構

SMP伺服器的主要特征是共享。系統中的所有資源(如記憶體、I/O等)都是共享的,擴充能力比較有限。

SMP有時也被稱為一緻存儲器通路(UMA)結構體系,記憶體被所有處理機均勻共享。和NUMA不同,SMP所有處理器對所有記憶體具有相同的通路時間。

探秘資料庫中的并行計算技術應用

圖2 SMP示意

  • NUMA(Non-Uniform Memory Architecture):非一緻存儲通路結構

NUMA伺服器的主要特征是擁有多個CPU子產品,子產品之間可以通過互聯子產品連接配接和資訊互動。

每個CPU可以通路整個系統的記憶體,但是通路速度不一樣。CPU通路本地記憶體的速度遠遠高于系統内其他節點的記憶體速度。

NUMA和MPP的差別在于,NUMA是一台實體伺服器,而MPP是多台。

探秘資料庫中的并行計算技術應用

圖3 NUMA示意

  • MPP(Massively Parallel Processing):大規模并行處理結構

MPP是多台伺服器節點通過網際網路絡連接配接起來,各個伺服器節點隻通路本地資源(記憶體和存儲),各個伺服器之間shared nothing。

在資料庫領域裡,當我們說起一個資料庫是MPPDB,是指在資料的設計實作上,利用MPP并行處理的伺服器叢集scale-out擴充資料庫性能,伺服器之間Shared Nothing。可以了解為MPPDB == Shared Nothing資料庫。

目前支援MPP架構資料庫産品有很多,如:Netezza(基于PG;IBM收購後不活躍)、Greenplum(基于PG;VMware)、Vertica(HP)、Sybase IQ(SAP)、TD Aster Data(Teradata)、Doris(百度)、Clickhouse(Clickhouse, Inc.)、GaussDB(華為)、SeaboxMPP(東方金信)等。

2.SMP并行

One size does not fit all。Shared Nothing并行技術做到了很好的水準橫向擴充(scale-out),但随着單台實體伺服器的硬體資源越來越強大(幾十~上百個core/伺服器),僅僅采用Shared Nothing技術,不能很好地挖掘硬體潛力。因為組成Shared Nothing架構資料庫的單機很多都是SMP架構,即使是NUMA架構,其實每個NUMA域也可以近似認為是一個SMP系統。是以,業界又做了SMP并行執行的工作,提升單機上縱向擴充(scale-up)能力,優化處理性能。

SMP并行技術可通過多線程多子任務并行執行的機制實作系統計算資源的充分高效使用,如下圖所示:

探秘資料庫中的并行計算技術應用

3. 其他并行技術

SMP進一步提升了資料庫節點内并行處理的能力,但是資料庫節點的處理晶片的處理性能仍可以進一步壓榨,比如ARM和x86處理器往往都配備了SIMD指令集,提升了一條指令可以處理的資料的位寬。篇幅原因,這些并行技術會在後續GaussTech系列文章中闡述,這裡不再贅述。

開源資料庫中的并行技術應用

目前流行的開源資料庫有兩款:MySQL和PostgreSQL。讓我們來看一下這兩款開源資料庫系列中Shared Nothing和SMP技術的運用吧。

1. Shared Nothing

MySQL搭建Shared Nothing資料庫叢集主要靠借助各廠商自研或者開源的中間件,結合MySQL資料庫提供分布式并行處理能力。比如:GoldenDB、TDSQL-MySQL等。MySQL官方也提供了MySQL NDB Cluster,可借助其搭建分布式叢集。

PostgreSQL也是類似的思路,比如:TDSQL- PostgreSQL以及PostgreSQL生态圈流行的開源中間件Postgres-XL、Postgres-XC、citus等。

可以看到,MySQL以及PostgreSQL系提供Shared Nothing能力的主要是中間件架構的分布式資料庫。

探秘資料庫中的并行計算技術應用

雖然這類資料庫能橫向擴充資料處理能力,但也存在功能降級、全局事務能力和高可用、性能等方面存在短闆,需要有針對性增強。

2. SMP并行技術

MySQL在2019年釋出的8.0.14版本中第一次引入了并行查詢特性,對于一條SQL語句,也能發揮主機CPU多核能力,改善複雜大查詢的能力。

并行處理能力主要是由存儲引擎InnoDB提供的:

(1) innodb_parallel_read_threads :配置用于并行掃描的最大線程數。

(2) innodb_ddl_threads :控制 InnoDB 建立(排序和建構)二級索引的最大并行線程數。

PostgreSQL從2016年釋出的9.6開始支援并行順序掃描、聚合,在2018年釋出的11支援了更多的并行算子:并行哈希連接配接、Append、建立索引等。

PostgreSQL提供了一些參數來進行并行的控制,比如max_parallel_workers_per_gather。當優化器預判并行執行成本較高時,也不會生成并行執行計劃。

可以看到,作為開源資料庫中的翹楚,PostgreSQL和MySQL都應用了SMP線程級并行處理技術提升資料庫的單節點處理性能。

總結

并行計算技術作為提升資料庫處理性能的重要手段,在現有的資料庫産品中得到了廣泛的應用。本文簡要說明了以Shared Nothing為代表的節點間并行處理技術,以及SMP節點内并行處理技術和它們在開源資料庫中的應用。

GaussDB作為企業級資料庫,也使用了這兩項技術,提升了資料庫處理的性能。相較于開源資料庫的實作,GaussDB的實作方式,結合各類實際場景,添加了更多的特色實作,進一步提升了分布式處理性能,這些我們将于下一篇文章加以說明。

關注#華為雲開發者聯盟#點選下方,第一時間了解華為雲新鮮技術~

華為雲部落格_大資料部落格_AI部落格_雲計算部落格_開發者中心-華為雲

繼續閱讀