基本介紹
- 中文名:Apache Doris
- 授權協定:Apache License v2.0
- 開發語言:Java C/C++
- 軟體類別:基於MPP的分析型資料庫
Apache Doris概述,Apache Doris特性,Apache Doris技術概述,適用場景,相關產品,
Apache Doris概述
Apache Doris 最早是誕生於百度廣告報表業務的 Palo 項目,2017 年正式對外開源,2018 年 7 月由百度捐贈給 Apache 基金會進行孵化,之後在 Apache 導師的指導下由孵化器項目管理委員會成員進行孵化和運營。目前 Apache Doris 社區已經聚集了來自不同行業近百家企業的 300 余位貢獻者,並且每月活躍貢獻者人數也接近 100 位。 2022 年 6 月,Apache Doris 成功從 Apache 孵化器畢業,正式成為 Apache 頂級項目(Top-Level Project,TLP)。
Apache Doris 如今在中國乃至全球範圍內都擁有著廣泛的用戶群體,截止 2022年 6月, Apache Doris 已經在全球超過 500 家企業的生產環境中得到套用,在中國市值或估值排行前 50 的網際網路公司中,有超過 80% 長期使用 Apache Doris,包括百度、美團、小米、京東、位元組跳動、騰訊、網易、快手、微博、貝殼等。同時在一些傳統行業如金融、能源、製造、電信等領域也有著豐富的套用。
Apache Doris可以滿足多種數據分析需求,例如固定歷史報表,實時數據分析,互動式數據分析和探索式數據分析等,令數據分析工作簡單高效。
Apache Doris特性
- 性能優異:自帶高效的列式存儲引擎,減少數據掃描量的同時還實現了超高的數據壓縮比。同時Doris還提供了豐富的索引結構來加速數據讀取與過濾,利用分區分桶裁剪功能,Doris可以支持線上服務業務的超高並發,單節點最高可支持上千QPS。更進一步,Apache Doris 結合了向量化執行引擎來充分發揮現代化CPU並行計算能力,輔以智慧型物化視圖技術實現預聚合加速,並可以通過查詢最佳化器同時進行基於規劃和基於代價的查詢最佳化。通過上述多種方式,實現了極致的查詢性能。
- 簡單易用:支持標準ANSI SQL語法,包括單表聚合、排序、過濾和多表Join、子查詢等,還支持視窗函式、Grouping Set等複雜SQL語法,同時用戶可以通過UDF和UDAF等自定義函式來拓展系統功能。除此以外,Apache Doris 還實現了MySQL協定兼容,用戶可以通過各類客戶端工具來訪問Doris,並支持與BI工具的無縫對接。
- 架構精簡:系統只有Frontend(FE)和Backend(BE)兩個模組,其中FE節點負責用戶請求的接入、查詢計畫的解析、元數據存儲及集群管理等工作,BE節點負責數據存儲和查詢計畫的執行,自身就是一個完備的分散式資料庫管理系統,用戶無需安裝任何第三方管控組件即可運行起Apache Doris 集群,並且部署和升級過程都非常簡易。同時,任一模組都可以支持橫向拓展,集群最高可以拓展到數百個節點,支持存儲超過10PB的超大規模數據。
- 穩定可靠:支持數據多副本存儲,集群具備自愈功能,自身的分散式管理框架可以自動管理數據副本的分布、修復和均衡,副本損壞時系統可以自動感知並進行修復。節點擴容時,僅需一條SQL命令即可完成,數據分片會自動在節點間均衡,無需人工干預或操作。無論是擴容、縮容、單節點故障還是在升級過程中,系統都無需停止運行,可正常提供穩定可靠的線上服務。
- 生態豐富:提供豐富的數據同步方式,支持快速載入來自本地、Hadoop、Flink、Spark、Kafka、SeaTunnel等系統中的數據,也可以直接訪問MySQL、PostgreSQL、Oracle、S3、Hive、Iceberg、Elasticsearch等系統中的數據而無需數據複製。同時存儲在Doris中的數據也可以被 Spark、Flink 讀取,並且可以輸出給上游數據套用進行展示分析。
Apache Doris技術概述
ApacheDoris 主要基於C++ 和Java 開發,集成了Google Mesa 和Apache Impala 的技術。將Mesa 與Impala進行組合的基礎上,Doris 被設計為一個不依賴於其他系統的簡單且單一緊密耦合的系統,並實現了MySQL協定,使得用戶可以像使用MySQL 無縫過渡到Doris,包括各種報表套用都可以通過MySQL協定連線Doris,同時獲得高並發低延遲點查詢性能,而且還能進行高吞吐量的即席分析查詢。Doris 不僅提供大批量數據載入,而且還提供近乎實時的小批量,甚至流數據載入。此外Doris還具備可用性,可靠性,容錯性和可擴展性。
Doris整體架構如下圖所示,Doris 架構非常簡單,只有兩類進程
- Frontend(FE),主要負責用戶請求的接入、查詢解析規劃、元數據的管理、節點管理相關工作。
- Backend(BE),主要負責數據存儲、查詢計畫的執行。
這兩類進程都是可以橫向擴展的,單集群可以支持到數百台機器,數十 PB 的存儲容量。並且這兩類進程通過一致性協定來保證服務的高可用和數據的高可靠。這種高度集成的架構設計極大的降低了一款分散式系統的運維成本。
在使用接口方面,Doris 採用 MySQL 協定,高度兼容 MySQL 語法,支持標準 SQL,用戶可以通過各類客戶端工具來訪問 Doris,並支持與 BI 工具的無縫對接。
Doris 也支持比較豐富的索引結構,來減少數據的掃描:
- 支持 Sorted Compound Key Index,可以最多指定三個列組成複合排序鍵,通過該索引,能夠有效進行數據裁剪,從而能夠更好支持高並發的報表場景
- Z-order Index :使用 Z-order 索引,可以高效對數據模型中的任意欄位組合進行範圍查詢
- Min/Max 索引 :有效過濾數值類型的等值和範圍查詢
- Bloom Filter :對高基數列的等值過濾裁剪非常有效
- Invert Index :能夠對任意欄位實現快速檢索
在存儲模型方面,Doris 支持多種存儲模型,針對不同的場景做了針對性的最佳化:
- Aggregate Key 模型:相同 Key 的 Value 列合併,通過提前聚合大幅提升性能
- Unique Key 模型:Key 唯一,相同 Key 的數據覆蓋,實現行級別數據更新
- Duplicate Key 模型:明細數據模型,滿足事實表的明細存儲
Doris 也支持強一致的物化視圖,物化視圖的更新和選擇都在系統內自動進行,不需要用戶手動選擇,從而大幅減少了物化視圖維護的代價。
Doris 查詢引擎是向量化的查詢引擎,所有的記憶體結構能夠按照列式布局,能夠達到大幅減少虛函式調用、提升 Cache 命中率,高效利用 SIMD 指令的效果。在寬表聚合場景下性能是非向量化引擎的 5-10 倍。
Doris 採用了 Adaptive Query Execution 技術, 可以根據 Runtime Statistics 來動態調整執行計畫,比如通過 Runtime Filter 技術能夠在運行時生成生成 Filter 推到 Probe 側,並且能夠將 Filter 自動穿透到 Probe 側最底層的 Scan 節點,從而大幅減少 Probe 的數據量,加速 Join 性能。Doris 的 Runtime Filter 支持 In/Min/Max/Bloom Filter。
在最佳化器方面 Doris 使用 CBO 和 RBO 結合的最佳化策略,RBO 支持常量摺疊、子查詢改寫、謂詞下推等,CBO 支持 Join Reorder。目前 CBO 還在持續最佳化中,主要集中在更加精準的統計信息收集和推導,更加精準的代價模型預估等方面。
適用場景
- 報表分析
- 實時看板 (Dashboards)
- 面向企業內部分析師和管理者的報表
- 面向用戶或者客戶的高並發報表分析(Customer-facing Analytics)。比如面向網站主的站點分析、面向廣告主的廣告報表,並發通常要求成千上萬的 QPS ,查詢延時要求毫秒級回響。著名的電商公司京東在廣告報表中使用 Apache Doris ,每天寫入 100 億行數據,查詢並發 QPS 上萬,99 分位的查詢延時 150ms。
即席查詢(Ad-hoc Query):面向分析師的自助分析,查詢模式不固定,要求較高的吞吐。小米公司基於 Doris 構建了增長分析平台(Growing Analytics,GA),利用用戶行為數據對業務進行增長分析,平均查詢延時 10s,95 分位的查詢延時 30s 以內,每天的 SQL 查詢量為數萬條。
統一數倉構建 :一個平台滿足統一的數據倉庫建設需求,簡化繁瑣的大數據軟體棧。海底撈基於 Doris 構建的統一數倉,替換了原來由 Spark、Hive、Kudu、Hbase、Phoenix 組成的舊架構,架構大大簡化。
數據湖聯邦查詢:通過外表的方式聯邦分析位於 Hive、Iceberg、Hudi 中的數據,在避免數據拷貝的前提下,查詢性能大幅提升。
相關產品
Palo 是由百度 Palo 團隊在百度雲上提供的基於 Apache Doris 的數據倉庫服務