大數據

DTCC 2020 | 阿里雲吉劍南:在線分析進入Fast Data時代的關鍵技術解讀

摘要:如今,對於在線分析技術而言,正在從“Big Data”時代向著“Fast Data”時代邁進,所面對的技術和市場環境發生了巨大變化,與此同時也需要面對全新的挑戰。在第十一屆中國數據庫技術大會(DTCC2020)上,阿里雲數據庫高級技術專家吉劍南為大家帶來了在線分析進入Fast Data時代的個關鍵技術解讀。
BV1A7266.JPG

本文內容根據演講錄音以及PPT整理而成。

From“Big Data”to“Fast Data”

經過近幾年的發展,在線分析所面臨的技術挑戰正在發生變化,甚至可以認為進入了下一個時代。前幾年大家都有一個耳熟能詳的名詞,那就是“Big Data”。與此同時,在硅谷出現了很多在大數據領域很火的公司,如cloudera、hortonworks、MapR等,他們都是圍繞Hadoop生態提供數據分析軟件或者服務。如今,cloudera和hortonworks合併,並且市值一度暴跌40%;另外的一家則被收購,並且面臨著轉型的風險。與其形成形成鮮明對比的是,今年也出現了一家火出了技術圈的公司,它也可能是這些年唯一一個讓股票分析師和數據庫從業者同時產生巨大興趣的上市公司,那就是Snowflake。Snowflake、AWS的Redshift和阿里雲的ADB這些產品開始將數據分析帶入到“Fast+Online”的時代。
1.png
圍繞“Fast+Online”這兩個關鍵詞,在線分析開始有了不同於大數據時代常規的一些關鍵詞,比如實時分析、實時數據、實時計算、雲原生、彈性、在線工作負載等,這些就是過去幾年的變化。

市場分析

市場趨勢:數據規模爆炸性增長

接下來為大家介紹一些機構結合調研對於未來市場的判斷。以下的數據來自於今年早些時候IDC和Gartner的一些調研數據。IDC預測2020年全球數據規模會達到40ZB左右,並且預測在2025年,數據規模將會相較於現在再增長430%,也就是每年都會有三位數的比例增長。結合現有存量數據來看,這樣的增長速度還是非常恐怖的。
2.png

市場趨勢:數據在加速上雲

在數據存儲上雲的趨勢來看,到2025年,數據存儲的雲上規模將達到49%,也就是將近一半的數據都將存儲在雲上。而數據的規模則會在更早的2023年,將近四分之三的數據庫會部署在雲上。
3.png

市場趨勢:數據業務實時化佔比大幅提高

不僅在數據規模層面,業務對分析新增實時數據的佔比,將達到30%。使用實時數據的分析結果進行商業決策、報表製作等的新業務,也將在2022年提高到50%。
4.png

技術發展——OLAP技術演進

6.png
在阿里巴巴內部,最早的數據分析需求運行在Oracle RAC上。隨著成本降低的訴求,以及分析型和事務型解耦,在2009年開始使用GreenPlum,而2009年前後基本上是淘寶發展最快速的階段,數據分析的需求和體量不斷增大,GreenPlum由於規模的問題,很快到達了瓶頸。2011年出現了兩個技術方向,即以HBase為主的Hadoop生態和Kylin等,以及使用MySQL分庫分表,通過數據庫Sharding做數據分析。但是這兩種方向都不太適合大數據的發展方向。在之後的2012年,阿里自研分佈式數據庫AnalyticDB正式服務集團,在此後的8年裡,AnalyticDB以高性能、低成本、毫秒級響應高併發多維分析查詢的優勢,在集團內部維護了超過5萬個節點,服務了上千個業務,幾乎覆蓋了阿里巴巴經濟體幾乎所有BU。到2019年,AnalyticDB-3.0以雲原生、高併發、低延時,高達100PB在線數據分析體量成為阿里雲上核心的分析型數據庫產品。簡單回顧阿里巴巴內部在線分析的發展歷程,從商業單機到商業分佈式,從商業走向開源,再從開源到自研。

AnalyticDB作為一個面向Fast Data時代的一個在線數據分析標杆型產品,在做自研的過程中也面臨著很多技術挑戰。
7.png
主要的挑戰包括四個方面:

  • 首先是高吞吐的實時寫入,這是實時數倉的一個核心前置條件。數據只有能夠快速的進入分析系統,實時才具備可行性。因此,可以認為高吞吐的實時寫入是Fast Data的基礎。
  • 其次是在離線混合工作負載。企業數字化分析是多元化的,涵蓋了實時的BI決策,實時報表、數據ETL、數據清洗以及AI分析。傳統數倉方案是通過組合多套數據庫與大數據產品,利用各自不同的優勢來解決不通的分析場景,而帶來的問題就是整個數據冗餘,同時需要維護多個異構系統管理的代價。
  • 第三是冷數據低成本、熱數據高性能的一體化存儲。在解決了一套系統同時支持在離線分析後,那麼帶來的核心問題是:如何既能夠支持在線分析高性能,同時又可以支持冷數據的低成本存儲。因此,動態的數據管理機制和靈活的緩存策略也將是一個很大的挑戰。
  • 最後是彈性可擴展。數倉中分析類查詢對資源的靈活需求,由於業務變化而不斷變化的數據體量,都對彈性這一雲原生的核心特徵提出了訴求。

典型的“Fast Data”架構

8.png
結合以上的挑戰介紹典型的“Fast Data”架構。上圖左側是一個經典的數據庫核心模塊,FrontNode節點負責提供協議能力。同時,對於數據庫和大數據一體化的系統,最廣泛使用的MySQL和Spark API兼容是標準配置。再下面一層則是優化器,分析類查詢的一個顯著特徵就是查詢的複雜性遠高於事務類查詢,同時由於參與查詢的數據規模很大,執行計劃的好壞對於查詢性能的影響往往是巨大的。因此一個成熟、穩定且高效的優化器是在線分析的核心,應該具備多樣化的優化方式。再往下是計算引擎,良好的彈性和隔離能力是計算引擎需要具備的核心特徵,在此之上,支持在離線混合複雜的離線計算模型再加上高效的計算引擎,最終構成了大規模進行數據分析的基礎。最下面這層是存儲層,存儲服務化是存儲與計算分離的前提,在存儲服務化的基礎之上設計一些高效的行列格式,再加上靈活的索引機制,通過高性能的本地ESSD和低成本的遠端OSS,基於靈活的緩存機制,同時滿足客戶對於熱數據的實時查詢和冷數據的低成本維護訴求。

“Fast Data”關鍵技術

結合典型的Fast Data架構來介紹涉及到的關鍵技術:

  • 首先是計算存儲分離技術。通過解耦計算和存儲,業務方可以自由選擇資源配比,並按需擴縮容。
  • 其次是彈性的資源組,針對有階段性波峰波谷的負載特徵,業務側可以靈活調整資源配額,以不同的時間維度制定不同的資源組擴縮容計劃,並且基於對查詢負載資源需求的估計,按需進行資源組的選擇。
  • 第三是自適應優化,數據的實時性和體量巨大的歷史數據會讓傳統依賴統計信息的優化手段失效,自適應優化在傳統優化方式的基礎之上會動態的根據執行信息中反饋的數據特徵調整執行計劃,使得整個執行計劃達到高效狀態。
  • 第四是冷熱分層和開放存儲。一方面存儲成本決定了數據規模和集群規模,將數據的維護成本降低在可控的範圍內,業務才有機會通過數據分析尋找數據價值。另一方面對業界開源生態格式的兼容,讓系統具備了一定的開放能力,不同的系統間可以通過開源的格式進行交互,降低業務ETL的複雜性。

9.png

計算存儲分離

接下來將從更細節的角度來拆解每一項關鍵技術。首先是存儲計算分離,存儲層向上提供統一的數據接口服務,計算層可以獨立彈性擴展,資源組在相互隔離的基礎上,同時具備按照時段編排擴縮容計劃和預留基礎資源的功能。通過計算與存儲的解耦,用戶可以較為靈活地單獨對計算資源、存儲容量進行單獨擴縮容,更加合理控制總成本。同時,針對計算資源的擴縮,不再需要數據的搬遷,具備更極致的彈性體驗。數據冷熱分層作為計算存儲分離後,控制成本的核心技術,接下來將進一步展開介紹。
10.png

冷熱混合存儲

數據冷熱分層存儲並沒有簡單地通過緩存機制來實現,而是將冷熱這個概念下放到了表級別,同時在表級別也支持冷熱混合的方式。比如將數據表分為3類,即用戶信息表、操作日誌表、訂單表,他們分別具備的特徵是:用戶信息在業務端是非常頻繁使用的表,將其存儲策略定義為hot;操作日誌,較少用來做查詢,更側重於低成本的歸檔,定義為cold,存儲在遠端的OSS;訂單表側重於3天內數據會被頻繁查詢、3天前的主要進行數據歸檔,將其存儲策略定義為mixed。與此同時,定義hot_partition_count為3。數據在最初寫入時會作為熱數據存放在SSD中。通過異步的合併機制,將其按分區的維度重新組織,當新的分區創建出來後,會有異步的線程根據hot_partition_count中定義的數量,將過期的數據遷移到遠端存儲OSS上,那麼遠端的數據查詢將直接通過SSD的cache獲取。通過這樣的機制,實現了冷熱分層、冷熱策略的的輕鬆定義,冷熱分區的自動遷移,以及冷熱數據的一體化訪問接口。
11.png

行列混存+多維索引

既然提供了一體化的存儲接口,必然會涉及到多種查詢場景,如數據庫IDE工具中常見的查詢一張表所有的明細數據,同時作為面向分析場景的數據庫系統,列存在進行數據壓縮,高效訪問又有著非常大的優勢,行列混存則可以兼顧兩種訴求,典型的行列混存的格式如圖所示。
12.png
將列的值以32768作為一個block,然後將不同列的block拼接為一個RowGroup。並將block級別的元數據信息存儲到文件頭,用於做快速過濾。除了列的元數據信息外,索引也是數據庫系統中常見的加速手段,採取了多維索引的方式對組合查詢條件進行過濾檢索。針對於不同的數據類型,使用不同的索引格式,對於任何條件的組合查詢,能夠通過索引歸併快速拿到目標數據集,然後目標數據集進一步走到計算層進行進一步計算,從而達到大幅度篩選候選集的目的。

彈性模式-資源組(池)多租戶

13.png
在定義計算的彈性時,首先將計算的節點劃分成資源組,一個集群可能擁有多個資源組,每個資源組具有不同的資源,資源之間是物理隔離的。並且資源組可以綁定用戶,通過這種機制可以實現各個資源組之間的資源實現物理隔離,這樣業務方就可以為不同的業務部門設定不同的用戶,這樣不同業務方之間的工作負載就不會相互影響,各個業務方可以自行制定自己的查詢隊列、響應時間以及併發數等,實現不同資源組之間的隔離。上圖中的計算層劃分了三個資源組,分別是用於在線分析的默認資源組,用於進行離線ETL,batch查詢的彈性資源組,以及支持Spark任務的算法、迭代資源組。這三個資源組共享同一份數據,支持不同的工作負載。

業務申請一定的計算資源,然後將節點分配給不同的資源組。不同資源組的節點調整可以毫秒級完成分配,同時資源組可以綁定到固定的用戶,這樣業務側通過給不同的部門分配不同的用戶,就可以將整個集群按資源隔離出給多個部門使用。資源組內獨佔當前的物理資源,保證資源組間不會相互影響,同時資源組可以單獨的配置同時的併發上線和查詢隊列以及監控,滿足不同部門間對查詢SLA的不同要求。並且通過這種方式實現了一份數據在多種場景下,包括離線計算、在線計算、再加上Spark運算等場景的整體支持。

彈性模式-分時彈性

14.png
資源組設定完成以後,就可以為不同的資源組指定不同的彈性計劃。可以按照小時、天以及周制定分時計劃。同時也支持按照多時段的分段彈性。如上圖中例子所示,業務負載的高峰期在上午8點半到11點半,那麼業務側就可以指定一個小時級別的彈性計劃,8點半擴容到256個節點,在11點半縮回64個節點。通過這樣的機制,業務側無需為一天剩餘的21個小時而花費256個節點的維護費用。同時,存儲的IO也是同步擴縮容的,不會產生額外的費用或者造成瓶頸。

在離線一體化——同時支持低延遲與高吞吐

15.png
典型的並行計算執行流程如上圖中灰色部分所。對於在線分析而言,執行模型需要儘量降低數據在算子間傳輸的開銷,這種場景比較合適的是使用並行Pipeline模型,數據在上游算子產生後,直接Push到下游算子所在的運行節點,無需落盤,直接進行計算,保證查詢的高效性。對於離線分析來說,參與計算的數據規模往往較大,運行的查詢往往非常複雜,如果使用Pipeline模型,可能會由於數據量過大導致內存溢出,同時複雜的查詢往往會由於部分運行節點長尾或者硬件原因,需要局部重試,這時Stage By Stage模型則是最合適的。在這種模式下,資源不需要在一開始就分配完成,一個Stage執行完成,所產生的中間數據會落到磁盤中,下一個Stage再起來之後從磁盤中讀取即可。因此支持在離線一體化的引擎,需要在一套執行引擎中同時兼顧兩種場景,也就是MPP+BSP的混合執行模型。

高效的向量化執行引擎

16.png
執行引擎所所需要解決的事情和執行模型不太一樣,其所需要解決的是算子之間傳輸的開銷問題,也就是所謂的數據交互的代價,其主要包括了兩個方面,分別是減少虛函數的調用和減小流程指令的開銷。首先,向量化引擎利用了現代CPU流水線的機制,可以提升指令的併發集。其次,利用SIMD提升了數據併發,充分挖掘它的算力。當整個系統的併發提升完成之後,內存訪問就會更內聚,同時也提升了操作系統Cache命中率。向量化引擎的一個特點是按照列或者一組數據來進行的,而數據庫本身是以行的方式輸出的,那麼什麼時候將執行中的列轉化成行也是一個比較大的挑戰。在阿里巴巴內部,藉助優化器解決了這樣的問題,即什麼時間段對哪些數據進行列行轉化。

自適應查詢優化器

17.png
自適應查詢優化器架構如圖所示。圖中白色部分可以認為是一個傳統的基於規則的優化器,包括語法檢查、語義解析、查詢改寫和轉換、生成物理計劃;圖中綠色部分是引入了代價模型後,基於統計信息和代價估算,選擇系統認為最優的執行計劃,也是就CBO。其中包含物理計劃的轉換、統計信息推導、還有代價預估。CBO有一個核心要處理的問題,就是由於代價預估不準帶來的計劃回退,需要由深綠色的計劃管理模塊和全鏈路的hint來解決。最右邊的藍色部分是基於歷史的運行信息面向用戶或者DBA的一些建議,如統計信息、索引等。圖中的左側橙色部分就是自適應的一些優化目標,其中包括對執行計劃的優化、工作負載的優化、系統資源的優化等。
18.png
接下來展開介紹自適應優化這部分。如圖所示,按照自適應優化按照的生效場合,可以分為運行中和事後基於歷史的兩大類。圖中藍色部分是運行中的一些優化方式,首先是對計劃的調整,比如對物理算子的選擇,最常見的是HashJoin、SortMergeJoin或者IndexJoin。另外在分佈式執行計劃中最重要的就是如何進行數據分佈,通過對小數據量的進行廣播,避免Join的另外一邊進行數據Reshuffle。還有就是不同任務計算節點的併發數,對小數據量進行分佈式計算會帶來額外的資源開銷,針對數據傾斜的分片需要進行重新的Reshuffle。另外一個運行中優化的重要手段就是算子本身具備的自適應,在分佈式計劃中一個非常常見的優化手段就是Partial Aggregation,但並不是所有的聚合操作都在局部有一定的收斂性,自適應的局部聚合算子在處理了部分數據後,發現本身沒有收斂性,可以快速放棄做局部聚合。此外,還有一個運行中的優化手段,就是DynamicFilterPushDown了,這個目前在很多計算引擎都具備,就不做過多展開。

除了運行時優化之外,另外一個優化方向就是基於歷史的自學習,主要是對於業務工作負載的分析。對於業務工作負載中的重複性查詢,可能每天都需要運行,並且基本不變,對於這種重複性負載而言可以進行一些計劃的重優化,可以根據系統對於執行後的信息彙總對於執行計劃進行調整。還可以構建分佈式的CostModel,由於事前的CostModel可能並不準確,因此可以基於歷史查詢數據來進行校正。此外,也可以對重複的工作負載做進一步的優化,並向用戶提供智能化的診斷手段,最終使得優化器更加聰明,進一步實現自適應、自學習的優化器。

最佳實踐

AnalyticDB:快數據時代下的PB級實時數據倉庫

19.png
阿里雲AnalyticDB是面向PB級數據規模的數據倉庫,能夠提供毫秒、亞秒級別的查詢體驗,其採用MPP+DAG融合的分佈式執行引擎,基於存儲與計算分離的架構,能夠支持千億級別的多表關聯分析,並且全面兼容MySQL和PG的生態,自身具有良好的生態。同時,AnalyticDB在雲原生上具備快速的彈性能力,依託於阿里雲底層的機制,存儲可以從GB彈到PB,並且可以按需支持最高2000臺級別的彈性能力,並具備備份、恢復、審計等完備的企業級特性。
20.png
以ADB的MySQL形態為例進行簡單介紹數據從數據源進入ADB到最終產生價值的整體流程。數據最初可能分佈在TB型數據庫,也可能來自於Hadoop等集群產生的日誌。而通過阿里雲DTS等數據同步工具,或者Flink這種流計算引擎或者Kettle這種專門用於數據同步的工具,將數據寫入到ADB MySQL中,通過數據管理工具對數據進行管理,最終的效果能夠支持多樣化的BI,比如Tableau、QlikView、帆軟,也包括阿里的自研BI工具QuickBI等。
21.png
AnalyticDB是阿里雲完全自研的系統,因此具備完全的知識產權。AnalyticDB目前獲得TPC官方認可的TPC-DS性能世界第一。其次,AnalyticDB獲得了中國信息通信研究院的官方認證,是參與評測的最大規模的集群。此外,還擁有國內專利46篇以及國際頂會論文9篇。

Leave a Reply

Your email address will not be published. Required fields are marked *