從架構特點到功能缺陷,重新認識分析型分散式資料庫

来源:https://www.cnblogs.com/ivan-uno/archive/2018/05/17/9051225.html
-Advertisement-
Play Games

本文是分散式資料庫的總綱文章的第一部分,列舉了三類不同技術方案(MPP/Hadoop/Mesa),主要探討分析性分散式資料庫的發展和技術差異;後續的第二部分則是交易性資料庫的一些關鍵特性分析。Ivan開始計劃的分散式資料庫是不含分析場景的,所以嚴格來說本篇算是番外篇,後續待條件具備將以獨立主題的方式... ...


寫在前面

本文是分散式資料庫的總綱文章的第一部分,主要探討分析性分散式資料庫的發展和技術差異;第二部分則是交易性資料庫的一些關鍵特性分析。Ivan開始計劃的分散式資料庫是不含分析場景的,所以嚴格來說本篇算是番外篇,後續待條件具備將以獨立主題的方式展開。

特別說明:本文是原創文章,首發在DBAplus社群,轉載須獲得作者同意。


正文

隨著大規模互聯網應用的廣泛出現,分散式資料庫成為近兩年的一個熱門話題。同樣,在銀行業主推X86限制主機與小型機的背景下,傳統的單機資料庫逐漸出現了一些瓶頸,馬上會面臨是否引入分散式資料庫的問題。

近期,Ivan在個人公眾號就“銀行引入分散式資料庫的必要性”做過一些展望,並收到了一些朋友的反饋,除了對分散式資料庫具體技術探討外,還有一類很有趣的建議,“能不能也講講Teradata、Greenplum這類MPP,這些也是分散式資料庫,但老闆總是認為OLTP場景下的才算數”。

的確,為瞭解決OLAP場景需求,其實很早就出現了分散式架構的產品和解決方案,其與目前的OLTP方案有很多共通的地方。而且Ivan相信,今後OLAP和OLTP兩個分支技術的發展也必然是交錯前行,可以相互借鑒的。

鑒於此,本文會將OLAP類場景的分散式數據也納入進來,從兩個維度對“分散式資料庫”進行拆解,第一部分會橫向談談不同的“分散式資料庫”,把它們分為五類並對其中OLAP場景的三類做概要分析;第二部分結合NoSQL與NewSQL的差異,縱向來談談OLTP場景“分散式資料庫”實現方案的關鍵技術要點,是前文的延伸,也是分散式資料庫專題文章的一個總綱,其中的要點也都會單獨撰文闡述。

首先,Ivan們從橫向談談不同的“分散式資料庫”:

一、萬法同宗RDBMS

1990年代開始,關係型資料庫(RDBMS)成為主流,典型的產品包括Sybase、Oracle、DB2等,同期大約也是國內IT產業的起步階段。RDBMS的基本特征已有學術上的定義,這裡不再贅述。

但從實際應用的角度看,Ivan認為有兩點最受關註:

  1. 內部以關係模型存儲數據,對外支持ANSI SQL介面;

  2. 支持事務管理ACID特性,尤其是強一致性(指事務內的修改要麼全部失敗要麼全部成功,不會出現中間狀態)。

而後出現的各種“分散式資料庫”,大多都是在這兩點上做權衡以交換其他方面的能力。

“資料庫”雖然有經典定義,但很多大數據產品或許是為了標榜對傳統資料庫部分功能的替代作用,也借用了“資料庫”的名號,導致在實踐中這個概念被不斷放大,邊界越來越模糊。本文一個目標是要釐清這些產品與經典資料庫的差異與傳承,所以不妨先弱化“資料庫”,將其放大為“數據存儲”。

那麼怎樣才算是“分散式數據存儲”系統?

“分散式”是一種架構風格,用其實現“數據存儲”,最現實的目的是為了打開資料庫產品的性能天花板,並保證系統的高可靠,進一步展開,“分散式資料庫”的必要條件有兩點:

  • 支持水平擴展,保證高性能

通過增加機器節點的方式提升系統整體處理能力,擺脫對專用設備的依賴,並且突破專用設備方案的性能上限。這裡的機器節點,通常是要支持X86伺服器。

  • 廉價設備+軟體,保證高可靠

在單機可靠性較低的前提下,依靠軟體保證系統整體的高可靠,又可以細分為“數據存儲的高可靠”和“服務的高可靠”。總之,任何單點的故障,可能會帶來短時間、局部的服務水平下降,但不會影響系統整體的正常運轉。

將這兩點作為“分散式資料庫”的必要條件,Ivan大致歸納了一下,至少有五種不同的“分散式資料庫”:

  • NoSQL

  • NewSQL

  • MPP

  • Hadoop技術生態

  • Like-Mesa

註:也許有些同學會提到Kafka、Zookeeper等,這些雖然也是分散式數據存儲,但因為具有鮮明的特點和適用場景,無需再納入“資料庫”概念進行探討。

這五類中,前兩類以支持OLTP場景為主,後三類則以OLAP場景為主。Ivan將按照時間線,主要對OLAP場景下的三類進行概要分析。

二、OLAP場景下的分散式資料庫

1990-2000年代,隨著應用系統廣泛建設與深入使用,數據規模越來越大,國內銀行業的“全國大集中”基本都是在這個階段完成。這期間,RDBMS得到了廣泛運用,Oracle也擊敗Sybase成為資料庫領域的王者。

在滿足了基本的交易場景後,數據得到了累積,進一步的分析性需求自然就涌現了出來。單一資料庫內同時支持聯機交易和分析需求存在很多問題,往往會造成對聯機交易的干擾,因此需要新的解決方案。這就為MPP崛起提供了機會。

1. MPP

MPP(Massively Parallel Processing)是指多個處理器(或獨立的電腦)並行處理一組協同計算[1]。

為了保證各節點的獨立計算能力,MPP資料庫通常採用ShareNothing架構,最為典型的產品是Teradata(簡稱TD),後來也出現Greenplum(簡稱GPDB)、Vertica、Netezza等競爭者。

架構特點:

MPP是多機可水平擴展的架構,符合“分散式”的基本要求,其中TD採用外置集中存儲而GPDB直接使用本地磁碟,從這點來說GPDB是更徹底的Share Nothing架構。

考慮到TD商業策略上採用一體機方案,不具有開放性,而GPDB具有較高的開源程度,下文中通過分析後者架構特點來分析MPP工作機制。

GPDB屬於主從架構[2],Slave稱為Segment是主要的數據加工節點,是在PostgreSQL基礎上的封裝和修改,天然具備事務處理的能力,可進行水平擴展;集群內有唯一Active狀態的Master節點,除了元數據存儲和調度功能外,同時承擔一定的工作負載,即所有外部對集群的數據聯機訪問都要經過Master節點。

在高可靠設計方面,首先設置了Standby Master節點,在Master節點宕機時接管其任務,其次將Segment節點則細分為兩類不同角色Primary和Mirror,後者是前者的備節點,數據提交時在兩者間進行強同步,以此保證Primary宕機時,Mirror可以被調度起來接替前者的任務。



數據分析性需求對IT能力的要求包括:

  • 複雜查詢能力;

  • 批量數據處理;

  • 一定的併發訪問能力。

MPP較好的實現了對上述能力的支撐,在前大數據時代得到了廣泛的應用,但這個時期的數據總量相對仍然有限,普遍在TB級別,對應的集群規模也通常在單集群百節點以下。

隨著數據價值關註度的不斷提升,越來越多的數據被納入企業分析範圍;同時實際應用中考慮到數據存儲和傳輸成本,往往傾向於將數據集中在一個或少數幾個集群中,這樣推動了集群規模的快速增長。

在大規模集群(幾百至上千)的使用上,MPP從批處理和聯機訪問兩個方面都顯現了一些不足。以下內容主要借鑒了Pivotal(GPDB原廠)的一篇官方博客[3]。

註:有位同學給出的譯文也具有較好的質量,推薦閱讀[4]。

缺陷:

  • 批處理

MPP架構下,工作負載節點(對GPDB而言是Segment節點)是完全對稱的,數據均勻的存儲在這些節點,處理過程中每個節點(即該節點上的Executor)使用本地的CPU、記憶體和磁碟等資源完成本地的數據加工。這個架構雖然提供了較好的擴展性,但隱藏了極大的問題——Straggler,即當某個節點出現問題導致速度比其他節點慢時,該節點會成為Straggler。

此時,無論集群規模多大,批處理的整體執行速度都由Straggler決定,其他節點上的任務執行完畢後則進入空閑狀態等待Straggler,而無法分擔其工作。導致節點處理速度降低的原因多數是磁碟等硬體損壞,考慮到磁碟本身的一定故障率(根據Google統計前三個月內2%損壞率,第二年時達到8%)當集群規模達到一定程度時,故障會頻繁出現使straggler成為一個常規問題。

  • 併發

由於MPP的“完全對稱性”,即當查詢開始執行時,每個節點都在並行的執行完全相同的任務,這意味著MPP支持的併發數和集群的節點數完全無關。根據該文中的測試數據,4個節點的集群和400個節點的集群支持的併發查詢數是相同的,隨著併發數增加,這二者幾乎在相同的時點出現性能驟降。

傳統MPP的聯機查詢主要面向企業管理層的少數用戶,對併發能力的要求較低。而在大數據時代,數據的使用者從戰略管理層轉向戰術執行層乃至一線人員,從孤立的分析場景轉向與業務交易場景的融合。對於聯機查詢的併發能力已經遠超MPP時代,成為OLAP場景分散式資料庫要考慮的一個重要問題。

除上述兩點以外,GPDB架構中的Master節點承擔了一定的工作負載,所有聯機查詢的數據流都要經過該節點,這樣Master也存在一定的性能瓶頸。同時,在實踐中GPDB對資料庫連接數量的管理也是非常謹慎的。在Ivan曾參與的項目中,Pivotal專家給出了一個建議的最大值且不會隨著集群規模擴大而增大。

綜上,大致可以得出結論,MPP(至少是GPDB)在集群規模上是存在一定限制的。

2000-2010年代,大多數股份制以上銀行和少部分城商行都建立了數據倉庫或ODS系統,主要採用了MPP產品。可以說,這十餘年是MPP產品最輝煌的時代。到目前為止,MPP仍然是銀行業建設數據倉庫和數據集市類系統的主要技術選擇。為了規避MPP併發訪問上的缺陷以及批量任務對聯機查詢的影響,通常會將數據按照應用粒度拆分到不同的單體OLTP資料庫中以支持聯機查詢。

2. Hadoop生態體系

MPP在相當長的一段時期內等同於一體機方案(以TD為代表),其價格高昂到普通企業無法承受,多數在銀行、電信等行業的頭部企業中使用。2010年代,隨著大數據時代的開啟,Hadoop生態體系以開源優勢,獲得了蓬勃發展和快速普及。

Hadoop技術體系大大降低了數據分析類系統的建設成本,數據分析挖掘等工作由此步入“數據民主化”時代。在Hadoop生態體系中,分析需求所需要的能力被拆分為批量加工和聯機訪問,通過不同的組件搭配實現。批量加工以MapReduce、Tez、Spark等為執行引擎,為了獲得友好的語義支持,又增加了Hive、SparkSQL等組件提供SQL訪問介面。

聯機訪問部分,則從早期Hive過渡到Impala、Hawk以及Kylin、Presto等方案逐漸降低了訪問延時。

  • 架構特點:

Hadoop生態體系下HDFS、Spark、Hive等組件已經有很多文章介紹,本文不再贅述。總的來說,其架構的著力點在於數據高吞吐處理能力,在事務方面相較MPP更簡化,僅提供粗粒度的事務管理。

  • 缺陷:

Hadoop也有其明顯的缺陷,主要是三點:

  • 批量加工效率較低

MPP的擁護者往往會詬病Hadoop計算引擎執行效率低。的確,在同等規模的集群執行相同的數據加工邏輯,即使與Spark對比,MPP所耗費的時間也會明顯更少些[3],其主要的原因在於兩者對於數據在磁碟和記憶體中的組織形式不同。

MPP從RDBMS而來(例如Vertica和GPDB都是基於PostgreSQL開發),對數據的組織形式更貼近傳統方式,按區、段、塊等單位組織,對數據進行了預處理工作以提升使用時的效率;Hadoop生態體系以HDFS文件存儲為基礎,HDFS並不像傳統資料庫那樣獨立管理一塊連續的磁碟空間,而是將數據表直接映射成不同的數據文件,甚至表分區也以目錄、文件等方式體現。

HDFS最簡單的txt格式乾脆就是平鋪的數據文件,處理過程難免要簡單粗暴一些,但隨著Avro、ORCFile、Parquet等很多新的存儲格式相繼被引入,基於HDFS的批處理也更加精細。從整體架構來看,Hadoop更加看重大數據量批量處理的吞吐能力。

同時,Hadoop具備MPP所缺失的批量任務調整能力,數據的多副本存儲使其具有更多“本地化”數據加工的備選節點,而且數據加工處理與數據存儲並不綁定,可以根據節點的運行效率動態調整任務分佈,從而在大規模部署的情況下具有整體上更穩定的效率。相比之下,MPP在相對較小的數據量下具有更好的執行效率。

  • 不能無縫銜接EDW實施方法論

在長期的實踐中,企業級市場的主流集成商針對EDW項目沉澱了一套固定的實施方法,與MPP特性相匹配,但Hadoop並不能與之無縫對接。一個最典型的例子是歷史數據的存儲,傳統方法是採用“拉鏈表”的形式,即對於當前有效的數據會記錄其生效的起始時間,在數據被更改或刪除後,在該行記錄的另外一列記錄失效時間。這樣,當前數據即變更為歷史數據,通過這種增量的表述方式,節省了大量的存儲空間和磁碟IO。

可以看出,拉鏈表的設計思想其實與基於時間戳的MVCC機制是相同的。

HDFS作為Hadoop的存儲基礎,其本身不提供Update操作,這樣所有在數據操作層面的Update最終會被轉換為文件層面的Delete和Insert操作,效率上顯著降低。據Ivan所知,在很多企業實踐中會將這種增量存儲轉換為全量存儲,帶來大量數據冗餘的同時,也造成實施方法上的變更。

  • 聯機查詢併發能力不足

對於聯機查詢場景,最常見的是SQL on Hadoop方案,將Impala、HAWQ等MPP引擎架設在HDFS基礎上,批量數據與聯機查詢共用一份數據。MPP引擎借鑒了MPP資料庫的設計經驗,相對Hive等組件提供了更低的延遲。但存在一個與MPP相同的問題,即併發能力不足。

通過一些項目測試中,Ivan發現在大體相同的數據量和查詢邏輯情況下, Impala併發會低於GPDB。其原因可能是多方面的,不排除存在一些調優空間,但在系統架構層面也有值得探討的內容。例如在元數據讀取上,Impala復用了Hive MetaStore,但後者提供的訪問服務延時相對較長,這也限制了Impala的併發能力[7]。

3. Like-Mesa

Mesa是Google開發的近實時分析型數據倉庫,2014年發佈了論文披露其設計思想[5],其通過預聚合合併Delta文件等方式減少查詢的計算量,提升了併發能力。

Mesa充分利用了現有的Google技術組件,使用BigTable來存儲所有持久化的元數據,使用了Colossus (Google的分散式文件系統)來存儲數據文件,使用MapReduce來處理連續的數據。

Mesa相關的開源產品為Clickhouse[6](2016年Yandex開源)和Palo[7](2017年百度開源)。

架構特點:

目前ClickHouse的資料仍以俄語社區為主,為便於大家理解和進一步研究,下麵主要以Palo為例進行說明。

Palo沒有完全照搬Mesa的架構設計的思路,其藉助了Hadoop的批量處理能力,但將加工結果導入到了Palo自身存儲,專註於聯機查詢場景,在聯機查詢部分主要借鑒了Impala技術。同時Palo沒有復用已有的分散式文件系統和類BigTable系統,而是設計了獨立的分散式存儲引擎。雖然數據存儲上付出了一定的冗餘,但在聯機查詢的低延遲、高併發兩方面都得到了很大的改善。

Palo在事務管理上與Hadoop體系類似,數據更新的原子粒度最小為一個數據載入批次,可以保證多表數據更新的一致性。

整體架構由Frontend和Backend兩部分組成,查詢編譯、查詢執行協調器和存儲引擎目錄管理被集成到Frontend;查詢執行器和數據存儲被集成到Backend。Frontend負載較輕,通常配置下,幾個節點即可滿足要求;而Backend作為工作負載節點會大幅擴展到幾十至上百節點。數據處理部分與Mesa相同採用了物化Rollup(上捲表)的方式實現預計算。



Palo和ClickHouse都宣稱實現了MPP Data Warehouse,但從架構上看已經與傳統的MPP發生很大的變化,幾乎完全捨棄了批量處理,專註於聯機部分。

ClickHouse和Palo作為較晚出現的開源項目,還在進一步發展過程中,設定的使用場景以廣告業務時序數據分析為主,存在一定局限性,但值得持續關註。


文獻參考:

[1] http://en.wikipedia.org/wiki/Massively_parallel

[2] http://greenplum.org/gpdb-sandbox-tutorials/introduction-greenplum-database-architecture/#ffs-tabbed-11

[3] Apache HAWQ: Next Step In Massively Parallel Processing,

https://content.pivotal.io/blog/apache-hawq-next-step-in-massively-parallel-processing

[4] 對比MPP計算框架和批處理計算框架,

http://blog.csdn.net/rlnLo2pNEfx9c/article/details/78955006

[5] A. Gupta and et al., “Mesa: Geo-replicated, near real-time, scalabledata warehousing,”PVLDB, vol. 7, no. 12, pp. 1259–1270, 2014.

[6] http://clickhouse.yandex

[7] http://github.com/baidu/palo


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1 * 2 BEEPER1.C -- Timer Demo Program No.1 3 (c) Charles Petzold, 1998 4 */ 5 6 #include <Windows.h> 7 8 #define ID_TIMER 1 9 10 LRESULT CALLBACK WndP ...
  • 開始不設置主鍵 表的設計如下: 如果id的位置有好幾個0的話:設置主鍵並且自動排序時,0會從1開始遞增; Insert 進去 id = 0的數據,數據會從實際的行數開始增加,和從0變化不一樣; 現在主鍵是沒有0的,如果把某個id改成0的話,0不會變!直接會進行排序; 再insert一個id=0的看看 ...
  • 最近線上系統突然出現匯出資料超過 10 筆時,查詢逾時的狀況,在仔細查找之後。 發現了問題原因,透過應用端與數據端兩邊同時調整,將查詢的效率提昇了約數百倍以上 首先,原本應用端的商務邏輯為每一分頁筆數固定為10筆,所以使用者最多可以匯出 10 筆資料 而且原本的商務邏輯是寫成這樣的 這段語法在 SQ ...
  • 使用AWS DMS(Database Migration Service)將SQL Server資料庫同步到AWS的Data Lake上,需要在本地源資料庫上配置複製,在配置分發嚮導最後一步時,遇到下麵錯誤: TITLE: Microsoft.SqlServer.ConnectionInfo----... ...
  • 作者: "zyl910" 一、緣由 BLOB是指二進位大對象,也就是英文Binary Large Object的縮寫。 在很多時候,我們是通過其他編程語言(如Java)訪問BLOB的位元組數據,進行位元組級的操作的。 但是有些時候工作量很小,感覺專門為BLOB位元組級操作而專門開發個程式,是比較麻煩的。於 ...
  • 參考文檔:MongoDB官方文檔 版本:3.6.4 從版本3.6開始,MongoDB需要Windows Server 2008 R2,Windows 7或更高版本。 第一步,在下載中心下載最新版本的MongoDB的.msi安裝文件並安裝 下載中心:https://www.mongodb.com/do ...
  • 一、瞭解SQL 資料庫的應用場景 sql 簡介 二、 檢索數據 SELECT語句 檢索單個、多及所有列的方法分享 檢索不同的值 限制結果 sqlserver註釋編寫方法 三、排序檢索數據 排序數據 按多個列排序 按列位置排序 指定排序方向 四、過濾數據 使用WHERE子句 WHERE子句操作符 五、 ...
  • 1、安裝mysql-server的命令:sudo apt-get install mysql-server 安裝mysql-client客戶端:sudo apt-get install mysql-client 查是否安裝成功並且啟用:sudo netstat -tap | grep mysql 關 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...