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