回首2018 | 分析型数据库AnalyticDB:不忘初心 砥砺前行...
導(dǎo)讀
分析型數(shù)據(jù)庫AnalyticDB(下文簡稱“ADB”),是阿里巴巴自主研發(fā)、唯一經(jīng)過超大規(guī)模以及核心業(yè)務(wù)驗(yàn)證的PB級實(shí)時數(shù)據(jù)倉庫。截止目前,現(xiàn)有外部支撐客戶既包括傳統(tǒng)的大中型企業(yè)和政府機(jī)構(gòu),也包括眾多的互聯(lián)網(wǎng)公司,覆蓋了十幾個行業(yè)。
同時,ADB在阿里內(nèi)部承接著廣告營銷、商家數(shù)據(jù)服務(wù)、菜鳥物流、盒馬新零售等眾多核心業(yè)務(wù)的高并發(fā)低延時分析處理。
2018年,我們新增了深圳和灣區(qū)研發(fā)中心,迎來更多專業(yè)精兵強(qiáng)將的加入,也受到了眾多業(yè)務(wù)場景挑戰(zhàn)極大的客戶鼎力支持,注定讓這一年在發(fā)展史上將留下深深的印記。在過去的這一年,ADB在架構(gòu)以及產(chǎn)品化演進(jìn)上,迎來了飛速發(fā)展,謹(jǐn)以此文記錄一起走過的2018年。
作者:阿里巴巴高級產(chǎn)品專家——繆長風(fēng)
架構(gòu)演進(jìn)
一、接入層和SQL Parser
由于歷史原因,ADB的各模塊中曾有多個Parser組件,例如當(dāng)時存儲節(jié)點(diǎn)用的是Druid, 接入層SQL解析用的是Antlr Parser, 導(dǎo)致SQL兼容性難提升。對于一個上線多年、服務(wù)于內(nèi)外眾多數(shù)據(jù)業(yè)務(wù)的ADB來說,熟悉數(shù)據(jù)庫的同學(xué)都知道,替換Parser難度之大,堪比飛行中換引擎。
經(jīng)過半年多的努力,ADB完成了將上述幾大Parser組件統(tǒng)一升級替換為FastSQL ( Base on Druid,經(jīng)過開源社區(qū)8年的完善,語法支持已經(jīng)非常完備)。升級為FastSQL后,在SQL兼容性大幅度提升、復(fù)雜場景解析速度提升30-100倍的同時,FastSQL還能無縫結(jié)合優(yōu)化器,提供常量折疊、函數(shù)變換、表達(dá)式轉(zhuǎn)換、函數(shù)類型推斷、常量推斷、語義去重等功能支持,方便優(yōu)化器生成最優(yōu)的執(zhí)行計(jì)劃。
2.實(shí)時寫入性能提升10倍
在ADB v2.7.4版本開始,在SQL Parser上做了深度技術(shù)優(yōu)化,大幅度提升了INSERT環(huán)節(jié)的性能,在實(shí)際生產(chǎn)環(huán)境中性能10倍性能提升,以云上4*C4為例,item表可以壓測到15w TPS。
3.海量數(shù)據(jù)流式返回
在ADB v2.7以前的版本,計(jì)算框架返回的數(shù)據(jù),需要在內(nèi)存中堆積,等待全部執(zhí)行完才返回到客戶端。在并發(fā)大或者結(jié)果大時,可能有內(nèi)存溢出的風(fēng)險(xiǎn)。從2.7版本開始,默認(rèn)采用流式返回,數(shù)據(jù)實(shí)時返回客戶端,能降低延時,極大的提升了大結(jié)果集返回的調(diào)用穩(wěn)定性。
二、Query Optimizer
2018年,一方面云上云下業(yè)務(wù)全面從ADB上一代的LM引擎,遷移至羲和MPP引擎,另一方面越來越多的客戶不希望走離線或者流計(jì)算清洗,實(shí)時數(shù)倉場景迸發(fā),同時越來越多自動生成SQL的可視化工具開始對接ADB,對優(yōu)化器團(tuán)隊(duì)提出了極高挑戰(zhàn)。
為了應(yīng)對這些挑戰(zhàn),在這一年里優(yōu)化器團(tuán)隊(duì)從無到有,逐漸組建起來一支精練的國際化團(tuán)隊(duì)。在不斷打造磨合過程中,ADB優(yōu)化器這一年的斬獲如下:
1.建立并完善RBO Plus優(yōu)化器
不同于傳統(tǒng)RBO優(yōu)化器,在RBO Plus設(shè)計(jì)中實(shí)現(xiàn)了下列關(guān)鍵特性:
1) 引入代價模型和估算,利用ADB的高效存儲接口,引入dynamic selectivity & cardinality估算優(yōu)化join reorder, 使得ADB可以應(yīng)對多達(dá)10+表join的復(fù)雜查詢場景.
2) 針對MPP特別優(yōu)化data shuffling,aggregation等執(zhí)行計(jì)劃,相對于LM引擎業(yè)務(wù)場景性能接近零回退。
3) 從功能和性能兩個維度,對各種常見以及復(fù)雜關(guān)聯(lián)子查詢場景進(jìn)行了深度優(yōu)化,設(shè)計(jì)了一系列關(guān)聯(lián)規(guī)則算法,在各種標(biāo)準(zhǔn)benchmark中相應(yīng)的查詢中,部分場景up to 20X提升。
4) 針對超短時延(ms)點(diǎn)查,設(shè)計(jì)了parameterized plan cache,將這些場景的優(yōu)化時間成本降低10倍以上。
2.打造CBO優(yōu)化器
面對越來越復(fù)雜的業(yè)務(wù)查詢場景,RBO及RBO Plus有其相應(yīng)的局限和挑戰(zhàn),CBO成為ADB優(yōu)化器邁向通用商業(yè)優(yōu)化器的關(guān)鍵,我們沒有采用雖廣泛使用但局限性也很多的Calcite優(yōu)化器,而是著手打造自主可控的CBO優(yōu)化器,提升ADB的核心競爭力:
1) 建立高效的統(tǒng)計(jì)信息收集體系,平衡準(zhǔn)確性與收集代價,為CBO提供“基礎(chǔ)信息設(shè)施”;
2) 構(gòu)建Cascades架構(gòu)的CBO框架,將其打造成可擴(kuò)展的優(yōu)化平臺。
三、羲和MPP引擎
這一年,ADB架構(gòu)全面從上一代的LM引擎切換至羲和MPP引擎,羲和引擎一方面既要支撐完成切換,滿足客戶更靈活自由查詢的重任,又要通過大幅度的性能優(yōu)化來消除引擎切換帶來的某些場景下的性能開銷。
1.全Binary計(jì)算
基于Binary 的計(jì)算,省去Shuffle 的序列化和反序列化開銷,并且與存儲深度綁定,做到存儲計(jì)算一體化,整個計(jì)算過程沒有多余的序列化和反序列化開銷。
2.內(nèi)部池化
通過定長的內(nèi)存切片完成池化,在計(jì)算過程中減少了連續(xù)內(nèi)存擴(kuò)容帶來的消耗,同時通過池化完全自主管控內(nèi)存,避免了在復(fù)雜SQL場景下的GC消耗。
3.CodeGen深度優(yōu)化
1) Cache使用,通過對算子,表達(dá)式的CodeGen常量抽取,緩存CodeGen生成的代碼,在高并發(fā)場景下避免了每次都需要動態(tài)編譯代碼的開銷,為支持高并發(fā)和QPS的業(yè)務(wù)打好了基礎(chǔ)。
2) 通過算子融合減少算子之間物化的開銷。
4.其它優(yōu)化
1) 按列計(jì)算,通過列式計(jì)算與JVM團(tuán)隊(duì)合作引入JDK11支持新的SIMD指令集進(jìn)行計(jì)算優(yōu)化
2) 自動算法優(yōu)化,根據(jù)數(shù)據(jù)分布,數(shù)據(jù)采樣自動優(yōu)化部分執(zhí)行算法和內(nèi)存;
3) 算子自適應(yīng)的Spill,支持動態(tài)的內(nèi)存分配和搶占,支持join,agg等算子落盤;
4) 引入新的序列化和反序列框架替換原有的JSON協(xié)議,引入新的Netty替換原有Jetty
5) 支持運(yùn)行時統(tǒng)計(jì)信息收集,包括算子級,stage級,query級的內(nèi)存、cpu cost統(tǒng)計(jì),支持部分自動識別慢SQL。
四、玄武存儲引擎
為了滿足業(yè)務(wù)高并發(fā)寫入、低延時的查詢,ADB做了讀寫分離架構(gòu)設(shè)計(jì)。在歷史的版本中,讀寫分析架構(gòu)下有2個問題:
① 寫入到可見是異步的, 部分場景有讀寫強(qiáng)一致性的訴求。
② 增量數(shù)據(jù)寫入較大的情況下,查詢變慢。同樣,今年存儲引擎在增量數(shù)據(jù)的實(shí)時性和性能上也做出了重大突破。
1.支持讀寫強(qiáng)一致性
最新的ADB版本中,設(shè)計(jì)了一套完備的一致性讀寫分離架構(gòu),如下圖所示:
藍(lán)色線代表寫入鏈路,橙色線代表讀取鏈路。以一次寫入和讀取為例,當(dāng)用戶新寫入某表的數(shù)據(jù)后,立即發(fā)起查詢,此時FN會收集該表在所有BN上的最新寫入版本號(step 3),并將該版本號(標(biāo)記為V1)信息隨同查詢請求一同發(fā)往對應(yīng)的CN節(jié)點(diǎn)(step 4),CN比對該表在本地的消費(fèi)版本(記為V2)和請求的版本號。
若V1>V2,CN消費(fèi)到該最新寫入數(shù)據(jù)(step 5)后提供查詢;若V1
2.提升增量數(shù)據(jù)區(qū)的查詢性能
在 ADB 的存儲節(jié)點(diǎn)對于突發(fā)的大批量實(shí)時寫入,在增量數(shù)據(jù)區(qū)可能短時間內(nèi)積累較多數(shù)據(jù)。如果查詢發(fā)生在增量數(shù)據(jù)區(qū),大量的table scan讀取會拖慢整個數(shù)據(jù)分析性能。為此增量數(shù)據(jù)區(qū)引入 RocksDB 構(gòu)建增量數(shù)據(jù)的索引,保證增量數(shù)據(jù)區(qū)的訪問性能,通過LSM-Tree 的分層存儲結(jié)果,提供良好的寫入性能,及較好的查詢能力。
五、分布式Meta服務(wù)
歷史版本元數(shù)據(jù)穩(wěn)定性挑戰(zhàn)大,各模塊各自訪問元數(shù)據(jù)存在race condition,meta壓力大,DDL體驗(yàn)差。今年我們重構(gòu)了元數(shù)據(jù)模塊,上線GMS服務(wù)提供元數(shù)據(jù)統(tǒng)一管理,同時提供分布式DDL能力,并通過分布式緩存降低meta庫壓力,提供高效元數(shù)據(jù)訪問效率。
全局元數(shù)據(jù)服務(wù)發(fā)布
1) Global Meta Service (GMS)上線生產(chǎn),提供分布式DDL和數(shù)據(jù)調(diào)度能力,同步建刪表提升用戶體驗(yàn)。
2) 表分區(qū)分配算法改進(jìn),為計(jì)算調(diào)度優(yōu)化,支持多表組場景下的數(shù)據(jù)均勻分布
3) 數(shù)據(jù)更新(上線),數(shù)據(jù)重分布(Rebalance)穩(wěn)定性大大提升
六、硬件加速
GPU雖然已經(jīng)廣泛用于通用計(jì)算,但是通常是用于圖形處理、機(jī)器學(xué)習(xí)和高性能計(jì)算等領(lǐng)域。如何將GPU的強(qiáng)大計(jì)算能力和ADB進(jìn)行有機(jī)結(jié)合,并不是一個容易解決的問題。要想用好GPU,在GPU資源管理、代碼生成、顯存管理、數(shù)據(jù)管理、執(zhí)行計(jì)劃優(yōu)化等方便,均有諸多挑戰(zhàn)。2018年,ADB引入了GPU作為計(jì)算加速引擎,原本依賴離線分析引擎、隔天才能完成的計(jì)算,現(xiàn)在只需要秒級延遲即可完成,成功將數(shù)據(jù)價值在線化,為客戶帶來了巨大的價值。
1.GPU資源管理
如何讓去訪問GPU資源是首先要解決的問題。 ADB通過jCUDA調(diào)用CUDA API,用于管理和配置GPU設(shè)備、GPU kernel的啟動接口封裝。該模塊作為Java和GPU之間的橋梁,使得JVM可以很方便地調(diào)用GPU資源。
2.CodeGen
ADB的執(zhí)行計(jì)劃是為CPU做準(zhǔn)備的,無法在GPU上執(zhí)行。而且由于GPU架構(gòu)的特殊性,GPU的編程模型也和CPU不同。為了解決這一問題,引入新的CodeGen模塊。CodeGen先是借助LLVM API將物理計(jì)劃編譯成LLVM IR,IR經(jīng)過優(yōu)化以后通過轉(zhuǎn)換成PTX代碼。然后調(diào)用CUDA將PTX代碼轉(zhuǎn)換成本地可執(zhí)行代碼,并啟動其中的GPU計(jì)算函數(shù)。
CodeGen可以針對不同的處理器生成不同的代碼,在GPU不可用時,也可以轉(zhuǎn)至CPU進(jìn)行執(zhí)行。相對傳統(tǒng)火山模型,ADB的CodeGen模塊有效減少函數(shù)調(diào)用的開銷、充分利用GPU的并發(fā)能力。另外Code Generator利用了算子融合,如group-by聚合、join再加聚合的融合,大大減少中間結(jié)果(特別是Join的連接結(jié)果)的拷貝和顯存的占用。
3.顯存管理
ADB開發(fā)了VRAM Manager用于管理各GPU的顯存。有別于現(xiàn)在市面上其他GPU數(shù)據(jù)庫系統(tǒng)使用GPU的方式,為了提升顯存的利用率、提升并發(fā)能力,結(jié)合ADB多分區(qū)、多線程的特點(diǎn),我們設(shè)計(jì)基于Slab的VRAM Manager來統(tǒng)一管理所有顯存申請。
性能測試顯示分配時間平均為1ms,明顯快于GPU自帶的顯存分配接口的700ms,有利于提高系統(tǒng)整體并發(fā)度。
4.Plan優(yōu)化
SQL從FN發(fā)送到CN,Task Manager先根據(jù)計(jì)算的數(shù)據(jù)量以及查詢特征選擇由CPU還是GPU處理,然后根據(jù)邏輯計(jì)劃生成適合GPU執(zhí)行的物理計(jì)劃。GPU Engine收到物理計(jì)劃后先對執(zhí)行計(jì)劃進(jìn)行重寫。如果計(jì)劃符合融合特征,則啟動復(fù)合算子融合,從而大量減少算子間臨時數(shù)據(jù)的傳輸成本。
產(chǎn)品化能力升級
一、易用性提升
1.全面切換羲和MPP引擎
從2.6.2版本開始,集團(tuán)內(nèi)和公有云全部默認(rèn)MPP引擎,徹底告別上一代LM引擎的各種查詢限制。MPP對SQL寫法支持更加自由靈活,ADB客戶迎來Full MPP時代。
2.SQL兼容性大幅度提升
接入層、存儲層Parser模塊全部升級為FastSQL后, 外加切換MPP成功,ADB v2.7以后的SQL兼容性較歷史版本有了非常大提升。SQL其他優(yōu)化還包括支持了流式后不再限制查詢結(jié)果集返回、分頁兼容MySQL等等。
3.自動擴(kuò)縮容、升降配
6月份發(fā)布了重磅功能: 自動擴(kuò)縮容+靈活升降配。除了擴(kuò)縮基本能力外,客戶還可以在規(guī)格之間切換。例如從10c4 切換至4c8, 可以從4c8切換至10c4,同時實(shí)時表還支持在高性能SSD實(shí)例和大存儲SATA實(shí)例間來回切換。上線效果:配置切換做到讀不中斷,寫入中斷約1-2分鐘,后續(xù)通過動態(tài)漂移分區(qū),寫入也能做到完全不停服。
4.新版控制臺和DMS上線
公有云新版的控制臺展示的內(nèi)容更加豐富,支持控制臺打點(diǎn),查看用戶畫像;增加了更多和用戶交互的地方。用戶管理,acl和子賬號授權(quán)更加便捷等。DMS全新改版,體驗(yàn)大幅度提升,方便導(dǎo)入導(dǎo)出,支持SQL提示和SQL記憶功能。
5.發(fā)布面向用戶側(cè)的監(jiān)控告警系統(tǒng)
為提升客戶的自助化服務(wù)能力,用戶側(cè)的監(jiān)控支持的指標(biāo)有CPU使用量、查詢和寫入量、數(shù)據(jù)傾斜、Top Slow SQL等。
6.全網(wǎng)數(shù)據(jù)庫監(jiān)控大盤上線
這是全網(wǎng)數(shù)據(jù)庫的眼睛,彈內(nèi)云上數(shù)據(jù)庫運(yùn)行狀況一覽無遺。通過對數(shù)據(jù)庫和系統(tǒng)層各種指標(biāo)的埋點(diǎn)分析,時刻監(jiān)控著數(shù)據(jù)庫的運(yùn)行狀況,高亮顯示異常數(shù)據(jù)庫,同時支持將異常指標(biāo)推送客戶釘釘群,大幅度提升了運(yùn)營值班效率。
7.發(fā)布可用區(qū)
這一年公共云發(fā)布多可用區(qū)支持,徹底解決單個region賣空的問題,企業(yè)客戶還可以有選擇的利用可用區(qū)做服務(wù)容災(zāi)。
二、發(fā)布新的核心功能
1.向量分析
今年9月正式發(fā)布向量分析能力,使得結(jié)構(gòu)化與非結(jié)構(gòu)化數(shù)據(jù)具備融合分析的能力。基于向量聚類規(guī)律的向量分區(qū)規(guī)則,按照聚類結(jié)果分區(qū),讓距離相近的向量就近存儲。在某專有云項(xiàng)目里,支持1:10億的人臉識別,QPS過萬,延遲在100毫秒內(nèi),數(shù)據(jù)量達(dá)到數(shù)TB級別。
同時首次支撐銀泰、盒馬等新零售場景的人臉識別、算法推薦、與結(jié)構(gòu)化數(shù)據(jù)實(shí)時融合分析,毫秒級打通線上線下會員體系,支撐實(shí)時數(shù)據(jù)化線下互動、營銷。
2.全文檢索
ADB v2.7.4版本后,通過SQL語言提供全文檢索功能,將常用的結(jié)構(gòu)化數(shù)據(jù)分析操作,與靈活的非結(jié)構(gòu)化數(shù)據(jù)分析操作統(tǒng)一,使用同一套SQL語言操作多種類型數(shù)據(jù),降低了學(xué)習(xí)和開發(fā)成本。一方面提供結(jié)構(gòu)化數(shù)據(jù)、非結(jié)構(gòu)化文本的融合檢索、多模分析能力,另一方面基于MPP+DAG技術(shù)提供了完善的分布式計(jì)算能力,同時內(nèi)置了來自淘寶、天貓搜索的智能分詞組件,分詞效果更好,速度更快。
3.新數(shù)據(jù)類型 JSON & Decimal
在2.7版本,正式發(fā)布JSON數(shù)據(jù)類型,完整的支持了包括Object、NULL、Array在內(nèi)的所有JSON類型的檢索分析,為業(yè)務(wù)提供了 Schema less的極大靈活性,同時也提供了快速的檢索性能。為了更好方便金融客戶,同樣在2.7版本里,ADB正式發(fā)布Decimal數(shù)據(jù)類型,向傳統(tǒng)數(shù)據(jù)庫的數(shù)據(jù)類型兼容性上又邁出了重要的一步。
三. 生態(tài)建設(shè)
1.數(shù)據(jù)接入
客戶數(shù)據(jù)往往有多種多樣,存儲在各種地方。為了追求更低成本、更高效率的數(shù)據(jù)接入能力,打造實(shí)時數(shù)倉的能力,ADB今年在數(shù)據(jù)接入上做了諸多完善:
1) Copy From OSS & MaxCompute 開發(fā)完成,元旦后上線。
2) ADB Uploader發(fā)布,方便本地文件快速導(dǎo)入。
3) ADB發(fā)布Logstash插件,方便日志數(shù)據(jù)format后直接寫入ADB,中間無需經(jīng)過MQ或者HUB。
4) ADB Client SDK發(fā)布并開源,客戶端寫入編程邏輯簡化,聚合寫入性能大幅度提升。
5) Batch表導(dǎo)入穩(wěn)定性大大提升,同時完成MaxCompute SDK升級和OpenMR切換。
6) Connector Service上線,提供統(tǒng)一數(shù)據(jù)源接入層
接下來ADB計(jì)劃基于現(xiàn)有框架接入更多數(shù)據(jù)源(圖中灰色部分)
2.行業(yè)云接入
完成金融云、物流云、聚石塔三大行業(yè)云接入,使得金融、物流、電商中小企業(yè)也能享受到低成本的實(shí)時數(shù)據(jù)分析能力,提升企業(yè)精細(xì)化數(shù)據(jù)運(yùn)營的水平。
望未來
2018年,對AnalyticDB來說是注定是非同平凡的一年,在架構(gòu)演進(jìn)、穩(wěn)定性、生態(tài)建設(shè)以及兼容性上均取得了長足的進(jìn)步。
這一年我們成功入選全球權(quán)威IT咨詢機(jī)構(gòu)Forrester——"The Forrester Wave?: CloudData Warehouse,Q4 2018"研究報(bào)告的Contenders象限(相關(guān)閱讀:厲害了!阿里分析型數(shù)據(jù)庫AnalyticDB入選Forrester云化數(shù)倉象限),以及Gartner發(fā)布的分析型數(shù)據(jù)管理平臺報(bào)告 (Magic Quadrant forData Management Solutions for Analytics),開始進(jìn)入全球分析市場。
展望未來,我們接下來將繼續(xù)在分析性能、穩(wěn)定性、以及產(chǎn)品化(易用性、數(shù)據(jù)通道、任務(wù)管理、可視化等周邊生態(tài)建設(shè)) 上繼續(xù)做廣、做深。AnalyticDB旨在幫客戶將整個數(shù)據(jù)分析和價值化從傳統(tǒng)的離線分析帶到下一代的在線實(shí)時分析模式。
原文發(fā)布時間為:2018-01-09
本文作者:繆長風(fēng)
了解相關(guān)信息可以關(guān)注“ 阿里巴巴數(shù)據(jù)庫技術(shù)”。
總結(jié)
以上是生活随笔為你收集整理的回首2018 | 分析型数据库AnalyticDB:不忘初心 砥砺前行...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: #pragma once与 #ifnde
- 下一篇: Android开源音乐播放器之播放器基本