AnalyticDB for MySQL:PB级云数仓核心技术和场景解析
2019阿里云峰會·上海開發者大會于7月24日盛大開幕,本次峰會與未來世界的開發者們分享開源大數據、IT基礎設施云化、數據庫、云原生、物聯網等領域的技術干貨,共同探討前沿科技趨勢。本文整理自數據庫專場中阿里云智能高級技術專家南仙的精彩演講,本文為分享了阿里云PB級云數據倉庫AnalyticDB for MySQL的核心技術以及其應用場景。
數據庫專場PPT下載
本文內容整理自演講視頻以及PPT。
From “BigData”to “FastData”
如今有一種說法“From BigData to FastData”,這是為什么呢?其實,BigData已經發展了很多年了,已經或者即將成為所有行業、所有開發者都能夠擁有的能力。但是對于BigData廠商而言,慢慢地發現自身的發展遇到了一些瓶頸,比如Cloudera和HORTONWORKS合并之后在股價方面存在一定的壓力,而像MAPR這樣資深的Hadoop玩家也在尋求買家。
出現以上這類問題的原因在于需求正在發生變化,對于數據本身的價值探索也在發生變化。最重要的一點就是原來只需要面對大量的數據,但是如今面對全量的數據,需要更加實時和更加智能地進行計算和分析。因此,阿里云AnalyticDB的定位就是能夠實現實時計算,實現數據價值在線化的數據倉庫產品。
AnalyticDB for MySQL介紹:PB級實時數據倉庫
AnalyticDB for MySQL(簡稱ADB)這樣一個PB級實時數據倉庫的核心理念是實現極致性價比和數據價值的在線化。AnalyticDB的作用就是實現千億、萬億級的多表復雜關聯分析和毫秒級的檢索,在全球官方組織TPC的10TB規模的Benchmark的測評環境中,AnalyticDB性能做到了世界第一,并且比國內的其他廠商領先至少5倍以上,相比開源的Spark,性能則高出10倍以上。與此同時,關于AnalyticDB核心技術的論文也發表在了數據庫領域的世界頂級學術會議上。
AnalyticDB for MySQL在阿里巴巴集團內部孵化多年,在阿里云上也積累了大量的用戶。在如此強悍性能的背后,AnalyticDB更是擁有諸多核心能力:
兼容&超越MySQL:首先,AnalyticDB兼容MySQL并且超越了MySQL。因為MySQL更多地是能夠在TP場景下解決很多業務問題,非常穩定并且非常流行,但是在分析場景下,僅僅兼容MySQL是遠遠不夠的,還需要對于窗口函數、CTE等功能以及OLAP標準的支持,而AnalyticDB完全支持這些功能和標準。
云原生,實時按需極致彈性:AnalyticDB是云原生數據庫,并且可以做到實時按需極致彈性。AnalyticDB的磁盤可以彈性擴展,單個用戶集群的節點數則可以從最小的3臺最大可以擴展到2000臺的規模,并且可以實現混合負載。
非結構化和結構化融合分析:AnalyticDB可以實現非結構化和結構化融合分析,這里的非結構化數據不僅包括JSON、MySQL里面BLOB以及數組類型,還支持用于人臉識別等AI技術的檢索向量,AnalyticDB總共支持5種向量類型和5種向量檢索算法。
完備的企業級特性:AnalyticDB具有完備的企業特性,比如備份恢復以及回收站等大數據工具都不具備的能力。與此同時,AnalyticDB還提供跨AZ和跨Region的高可靠保證。
AnalyticDB核心技術: 分層存儲+存儲計算分離架構 帶來極致彈性和開放性
如下圖所示,AnalyticDB整體的技術模塊最前面是接口層,其對于MySQL協議具有很強的兼容性,能夠提供JDBC、ODBC以及UDF、AI的接口。下面一層是優化器,眾所周知,在復雜分析場景下,優化器會面臨很大的挑戰。而AnalyticDB同時支持了基于規則的優化器RBO以及基于成本的優化器CBO和基于歷史學習的優化器HBO。再下面一層是超大規模的分布式計算引擎——羲和,它是基于開源代碼在阿里內部經過研發團隊多年的優化和改造之后打造的具有強勁性能的計算引擎。再往下一層是AnalyticDB行列混合的存儲引擎,具有強大的存儲和檢索能力。目前,AnalyticDB完全基于云上的基礎設施構建,包括ECS、GPU、FPGA、OSS等云上的基礎能力。
對于AnalyticDB的技術架構而言,從上到下可以分為三種角色。最上層是Frontnode,內部也稱為Coordinator協調器,其支持多Master線性擴展,當寫入和查詢并發過來的時候可以實現線性擴展,最多可以支持擴展到幾百個Frontnode。Frontnode會在寫入流程下進行數據分發,將數據寫入到底下不同的存儲節點。中間層的Worker是計算節點,其可以進行彈性伸縮,也是計算存儲分離的核心所在。當負載到來的時候,會對于上層解析器所做的物理執行計劃進行計算。源頭節點讀取的就是底層存儲。存儲部分有一個很重要的概念就是Group,這里解釋一下,比如MySQL的主備或者三副本就是一個Group。對于AnalyticDB而言,因為是分布式的,因此有多個Group??梢哉J為數據水平分區到每個Group上面,Group之間通過Raft協議保證數據的強一致和實時性。在超大規模集群下,成本也是一個非常重要的考慮因素,因此AnalyticDB在底層實現了分層存儲,也就是當數據需要進行冷熱分離的時候,可以將熱數據放在SSD上,而將冷數據實時地通過分層存儲系統換入或者換出到OSS上面去。
AnalyticDB核心技術-智能的“行列混存+全索引”帶來極致性能
極致性能的提供除了依靠前面所提到的分布式優化器和超大規模高性能的執行引擎之外,還需要依靠存儲引擎本身能為計算做多少壓縮。對于數據庫系統而言,之所以AnalyticDB能夠做到性能全球第一,最重要的就是對于存儲層的優化。
這里為大家介紹AnalyticDB在存儲層優化方面的兩個技術點,全索引和行列混存。AnalyticDB實現了一整套的索引框架來兼容各種不同的場景,AnalyticDB的索引框架具有多路漸進流式歸并的能力,它能夠將很多索引條件以及單表位置條件進行多路歸并,并生成一個行號。當拿到這個行號之后就能夠將大量的數據在存儲層過濾掉,數據過濾完成之后就只需要交給計算引擎來進行聚合等計算任務了。AnalyticDB支持很多不同類型的索引,對于字符串類型數據,支持倒排索引、哈希索引;對于數字類型,支持多維KD樹索引;此外,還支持JSON索引、bitmap索引以及非結構化的向量索引。
AnalyticDB具有高性能的另外一個原因是其采用了行列混合存儲。大家都知道,MySQL等數據庫所采用的行存儲比較適合更新,但是缺點是不適合進行分析計算,因為分析計算通常是對于一個擁有百余列的大表的部分列進行統計分析或者聚合運算,行存儲需要對于每行的百余列數據全部讀取出來,對于列的放大非常明顯。而列存儲的優點在于,除了對于相同Schema的列壓縮率較高之外,在計算方面其天生就適合篩選。
AnalyticDB所設計的行列混合存儲如上圖所示。頭文件中包含了一些元數據,比如Sum、Count和Max、Min等,這些統計值用于對于索引、條件和Block的過濾。在每個文件內部有很多不同的Block,每個Block可以看做Row Group,其內部按照Column進行存儲。因此,當需要掃描的時候,一旦定位到在哪個Row Group里面就可以很快將數據取出來。之所以設計成Row Group而非整列文件的原因在于很多時候需要取明細數據,如果按列存儲,需要拼出所有行的數據,這樣做開銷會非常大,而可以通過動態調節不同的Row Group的大小來動態地兼容這兩種場景。
AnalyticDB核心技術:一個系統一套存儲兼顧多種場景
AnalyticDB之所以具有強大的性能,除了架構彈性之外,還具有一套能夠兼顧多種場景的存儲系統,可以兼容多維分析、明細查詢、實時寫入等場景。其背后有三個關鍵技術,包括上述提到的行列混存,還有混合負載。AnalyticDB支持高并發、低延遲的混合負載的管理,此外,還支持超大規模的融合計算引擎。
AnalyticDB for MySQL:典型場景和客戶價值
AnalyticDB支持將大數據、應用隊列、MySQL、Oracle中的數據通過DTS等數據同步工具同步到AnalyticDB做數據分析。而在上層可以接入不同的可視化報表以及用戶APP。舉一個內部案例,阿里媽媽內部有一個定向營銷平臺叫做達摩盤。達摩盤有一萬多張表,總數據量超過100TB,平均每條查詢大小為10個表的Join。借助AnalyticDB,達摩盤可以支持上千個列維度的篩選,可以做到峰值每秒120萬的寫入速度,10個以上表進行Join的QPS能夠達到50。
Data Lake Analytics:全域數據、開放分析
阿里云的Data Lake Analytics是Serverless的開放分析產品,沒有數據存儲,因此成本也非常低。如果用戶的數據在OSS或者某個存儲引擎里面,無需搬動數據就可以直接計算。因為采用了Serverless的設計理念,因此本身具有很強的彈性,同時成本也非常低。
Data Lake Analytics和AnalyticDB是互補的關系,AnalyticDB屬于數據倉庫,而Data Lake Analytics則可以進行融合分析。Data Lake Analytics除了繼承了AnalyticDB的羲和計算引擎之外,還集成了Spark,并且其底層基于K8S實現了Serverless。
接下來為大家分享兩個具體案例
客戶案例1:移動運營APP解決方案
這里以無他相機為例為大家分享移動運營APP解決方案。無他相機的上百億數據都存儲在MySQL里面,之前使用MongoDB這樣的NoSQL數據庫進行數據存儲,但是發現分析性能根本無法接受,當時每個報表需要至少40分鐘才能完成。使用AnalyticDB改造系統架構之后,從用戶統計、活動效果以及行為分析等方面能夠發現明顯提升,實現的報表構造從40分鐘到秒級的跨越。
客戶案例2:物流行業實時數倉
第二個案例以跨境物流的公司遞四方為例分享物流行業實時數倉方案。對于遞四方的數據架構而言,通過MySQL實現業務處理,并將數據通過DTS同步到AnalyticDB。對于日志數據而言,通過Agent實現打點,通過消息隊列Kafka收集數據,并通過內部程序將所收集的數據注入到AnalyticDB里面去,前端連接了阿里云的QuickBI和DataV實現數據大屏和報表。僅僅用了一個半月的時間,遞四方就完成整個數據實時數倉的構建。
AnalyticDB for MySQL:客戶遍布各行各業
AnalyticDB for MySQL的客戶遍布各行各業,比如互聯網、新零售、數字政府、金融以及公安、稅務、電網、政法等,這些行業都在廣泛地使用阿里云的AnalyticDB。
AnalyticDB for MySQL 3.0版本:下一代云原生OLAP產品
阿里云數據庫團隊匠心打造的全新的AnalyticDB for MySQL 3.0版本已經研發完成了,目前正處于公測中。
相比之前的版本,AnalyticDB for MySQL 3.0版本主要在以下四個方面進行了改進
更易用:相比于2.0版本,用戶能夠感受到更多數據庫的特性。AnalyticDB 3.0版本融合了大數據超大規模的計算能力、分析能力以及數據庫的使用體驗。用戶能夠感受到AnalyticDB 3.0是一個擁有超強計算能力、特別快的計算速度的MySQL。其支持最多256個DB,并且大幅度提升了兼容性,在阿里巴巴內部測試中,兼容性高達99.99%,并且能夠做到寫入數據的立即可見。
更高性能:AnalyticDB 3.0版本的實時寫入性能提升了1.5倍,查詢性能在原本全球第一的基礎之上又提升了40%,并且預計未來還會繼續刷新榜單。AnalyticDB支持從MaxCompute、Hadoop、OSS以及MySQL數據庫批量向AnalyticDB導入數據,并且能夠實現每小時TB級別的數據導入速度。
更彈性:AnalyticDB 3.0版本擁有更高的彈性,磁盤存儲空間可以彈性伸縮,比如一個節點可以從100G擴展到1TB甚至更大,同時可以伸縮磁盤空間,實現縱向升降級,節點數目也可以實現任意節點的擴縮。
更可靠:AnalyticDB 3.0版本具備與MySQL完全對齊的權限體系,其支持庫級權限、表級權限以及列級權限。并且數據存儲采用了三副本,達到了工業級別的安全等級,還擁有完備的數據備份恢復能力。
原文鏈接
本文為云棲社區原創內容,未經允許不得轉載。
總結
以上是生活随笔為你收集整理的AnalyticDB for MySQL:PB级云数仓核心技术和场景解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 应用架构的核心使命是什么?阿里高级技术专
- 下一篇: Kubernetes-native 弹性