Apache Doris:基于MPP架構(gòu)的實(shí)時(shí)分析數(shù)據(jù)庫(kù),是時(shí)候上手了
Apache Doris 是一個(gè)基于 MPP 架構(gòu)的高性能實(shí)時(shí)分析數(shù)據(jù)庫(kù),以極速和易用性著稱。海量數(shù)據(jù)下僅需亞秒級(jí)響應(yīng)時(shí)間即可返回查詢結(jié)果,不僅可以支持高并發(fā)點(diǎn)查詢場(chǎng)景,還可以支持高吞吐量的復(fù)雜分析場(chǎng)景。基于此,Apache Doris可以更好的滿足報(bào)表分析、即席查詢、統(tǒng)一數(shù)倉(cāng)、數(shù)據(jù)湖查詢加速等場(chǎng)景,用戶可以構(gòu)建用戶行為分析、AB測(cè)試平臺(tái)、日志檢索分析、用戶畫(huà)像分析、訂單分析,以及在此之上的其他應(yīng)用程序。
Apache Doris最早誕生于百度廣告報(bào)表業(yè)務(wù)的Palo項(xiàng)目,2017年正式開(kāi)源,2018年7月由百度捐贈(zèng)給Apache基金會(huì)孵化,在Apache導(dǎo)師的指導(dǎo)下,由孵化器項(xiàng)目管理委員會(huì)成員進(jìn)行孵化和運(yùn)營(yíng)。Apache Doris 順利畢業(yè)于 Apache 孵化器,并于 2022 年 6 月成為頂級(jí)項(xiàng)目。目前,Apache Doris 社區(qū)聚集了來(lái)自不同行業(yè)近百家公司的 300 多名貢獻(xiàn)者,活躍貢獻(xiàn)者人數(shù)接近 100 人/月。
Apache Doris 目前在中國(guó)乃至全球擁有廣泛的用戶群,截至今天,Apache Doris 已在全球超過(guò) 500 家公司的生產(chǎn)環(huán)境中使用。中國(guó)互聯(lián)網(wǎng)市值或估值前50強(qiáng)企業(yè)中,80%以上長(zhǎng)期使用Apache Doris百度、美團(tuán)、小米、京東、字節(jié)跳動(dòng)、騰訊、網(wǎng)易、快手、微博等。它還廣泛應(yīng)用于金融、能源、制造、電信等一些傳統(tǒng)行業(yè)。
使用場(chǎng)景
如下圖所示,經(jīng)過(guò)各種數(shù)據(jù)整合和處理后,數(shù)據(jù)源通常存儲(chǔ)在實(shí)時(shí)數(shù)倉(cāng)Doris和離線數(shù)據(jù)湖或數(shù)倉(cāng)(Apache Hive、Apache Iceberg或Apache Hudi中)。
使用場(chǎng)景
Apache Doris 廣泛應(yīng)用于以下場(chǎng)景:
報(bào)告分析
- 實(shí)時(shí)儀表板
- 生成內(nèi)部分析師和經(jīng)理的報(bào)告
- 面向用戶或客戶的高并發(fā)報(bào)表分析:比如網(wǎng)站主 做站點(diǎn)分析,廣告主 做廣告報(bào)表等場(chǎng)景,并發(fā)通常需要上千QPS,查詢時(shí)延需要亞秒級(jí)響應(yīng)。著名電商京東在廣告報(bào)表中使用Doris,每天寫(xiě)入100億行數(shù)據(jù),上萬(wàn)并發(fā)查詢QPS,99%查詢延遲150ms。
即席查詢
面向分析師的具有不規(guī)則查詢模式和高吞吐量要求的的自助服務(wù)分析。小米基于Doris構(gòu)建了增長(zhǎng)分析平臺(tái)(Growth Analytics,GA),利用用戶行為數(shù)據(jù)進(jìn)行業(yè)務(wù)增長(zhǎng)分析,平均查詢延遲10秒,95%查詢延遲30秒以下,數(shù)萬(wàn)每天的 SQL 查詢數(shù)。
統(tǒng)一數(shù)據(jù)倉(cāng)庫(kù)建設(shè)
Doris 是一個(gè)滿足統(tǒng)一數(shù)據(jù)倉(cāng)庫(kù)建設(shè)需求,簡(jiǎn)化復(fù)雜數(shù)據(jù)軟件棧的平臺(tái)。海底撈基于Doris的統(tǒng)一數(shù)據(jù)倉(cāng)庫(kù)取代了由Apache Spark、Apache Hive、Apache Kudu、Apache HBase、Apache Phoenix組成的舊架構(gòu),大大簡(jiǎn)化了架構(gòu)。
數(shù)據(jù)湖查詢
通過(guò)使用外部表聯(lián)合位于 Apache Hive、Apache Iceberg 和 Apache Hudi 中的數(shù)據(jù),在避免數(shù)據(jù)復(fù)制的同時(shí)大大提高了查詢性能。
技術(shù)概覽
Apache Doris 的整體架構(gòu)如下圖所示。Doris 架構(gòu)非常簡(jiǎn)單,只有兩類進(jìn)程。
- Frontend(FE):主要負(fù)責(zé)用戶請(qǐng)求接入、查詢解析和規(guī)劃、元數(shù)據(jù)管理、節(jié)點(diǎn)管理等相關(guān)工作。
- 后端(BE):主要負(fù)責(zé)數(shù)據(jù)存儲(chǔ)和查詢計(jì)劃執(zhí)行。
兩種類型的進(jìn)程都可以水平擴(kuò)展,單個(gè)集群最多可以支持?jǐn)?shù)百臺(tái)機(jī)器和數(shù)十 PB 的存儲(chǔ)容量。并且這兩類流程通過(guò)一致性協(xié)議保證了服務(wù)的高可用性和數(shù)據(jù)的高可靠性。這種高度集成的架構(gòu)設(shè)計(jì)大大降低了分布式系統(tǒng)的運(yùn)維成本。
Apache Doris 的架構(gòu)
Doris采用MySQL協(xié)議,高度兼容MySQL方言,支持標(biāo)準(zhǔn)SQL。用戶可以通過(guò)各種客戶端工具訪問(wèn)Doris,支持與BI工具無(wú)縫對(duì)接。
在存儲(chǔ)引擎方面,Doris采用列式存儲(chǔ)對(duì)數(shù)據(jù)進(jìn)行按列編碼壓縮和讀取,在實(shí)現(xiàn)極高壓縮率的同時(shí)減少大量掃描無(wú)關(guān)數(shù)據(jù),從而更高效地利用IO和CPU資源.
Doris 還支持比較豐富的索引結(jié)構(gòu)來(lái)減少數(shù)據(jù)掃描:
- 支持排序復(fù)合鍵索引:最多可以指定三列組成復(fù)合排序鍵。有了這個(gè)索引,可以對(duì)數(shù)據(jù)進(jìn)行有效的剪枝,更好的支持高并發(fā)的上報(bào)場(chǎng)景。
- Z-order 索引:使用Z-order 索引,您可以高效地對(duì)架構(gòu)中的任意字段組合運(yùn)行范圍查詢。
- MIN/MAX 索引:有效過(guò)濾數(shù)字類型的等價(jià)和范圍查詢
- 布隆過(guò)濾器:對(duì)高基數(shù)列的等價(jià)過(guò)濾和修剪非常有效
- 倒排索引:它可以快速搜索任何字段
在存儲(chǔ)模型方面,Doris 支持多種存儲(chǔ)模型,針對(duì)不同場(chǎng)景有針對(duì)性的優(yōu)化:
- 聚合鍵模型:通過(guò)預(yù)先聚合來(lái)合并具有相同鍵的值列,以顯著提高性能。
- 唯一鍵模型:鍵是唯一的。具有相同鍵的數(shù)據(jù)將被覆蓋,以實(shí)現(xiàn)行級(jí)數(shù)據(jù)更新。
- 重復(fù)鍵模型:詳細(xì)的數(shù)據(jù)模型,可以滿足事實(shí)表的詳細(xì)存儲(chǔ)。
Doris 還支持強(qiáng)一致性物化視圖,物化視圖的更新和選擇在系統(tǒng)內(nèi)部自動(dòng)完成,不需要用戶手動(dòng)選擇,從而顯著降低了物化視圖的維護(hù)成本。
在查詢引擎方面,Doris采用了MPP模型,節(jié)點(diǎn)間和節(jié)點(diǎn)內(nèi)并行執(zhí)行,也支持多張大表的分布式shuffle join,可以更好的應(yīng)對(duì)復(fù)雜的查詢。
Apache Doris 的查詢引擎
Doris查詢引擎是向量化的,所有內(nèi)存結(jié)構(gòu)都可以以列格式布局,從而實(shí)現(xiàn)顯著減少虛擬函數(shù)調(diào)用、提高緩存命中率和高效使用SIMD指令。寬表聚合場(chǎng)景中的性能比非向量化引擎高 5-10 倍。
向量化查詢執(zhí)行器
Doris使用自適應(yīng)查詢執(zhí)行技術(shù),可以根據(jù)運(yùn)行時(shí)的統(tǒng)計(jì)動(dòng)態(tài)調(diào)整執(zhí)行計(jì)劃,例如運(yùn)行時(shí)過(guò)濾器技術(shù),在運(yùn)行時(shí)生成過(guò)濾器推送到探測(cè)端,并自動(dòng)將過(guò)濾器穿透到探測(cè)端,大大減少了探測(cè)端的數(shù)據(jù)量,提高了連接性能。Doris 的運(yùn)行時(shí)過(guò)濾器支持 In/Min/Max/Bloom 過(guò)濾器。
查詢優(yōu)化器
在優(yōu)化器方面,Doris 使用了 CBO 和 RBO 的組合,RBO 支持常量折疊、子查詢重寫(xiě)、謂詞下推等,CBO支持 Join 重新排序。CBO仍在持續(xù)優(yōu)化中,主要集中在更準(zhǔn)確的統(tǒng)計(jì)信息收集和推導(dǎo)、更準(zhǔn)確的成本模型預(yù)測(cè)等方面。
未來(lái),Apache Doris除了數(shù)據(jù)分析之外,還將提升數(shù)據(jù)工程能力,更好地覆蓋企業(yè)數(shù)據(jù)ETL/ELT場(chǎng)景,通過(guò)一個(gè)平臺(tái)滿足多種混合工作負(fù)載。另一方面,對(duì)云基礎(chǔ)設(shè)施做深度優(yōu)化,利用云提供的彈性和新硬件,提供性價(jià)比更好的產(chǎn)品。
為什么選擇 Apache Doris?
- 易于使用:兩個(gè)進(jìn)程,沒(méi)有其他依賴;在線集群伸縮,自動(dòng)副本恢復(fù);兼容MySQL協(xié)議,使用標(biāo)準(zhǔn)SQL。
- 高性能:通過(guò)列式存儲(chǔ)引擎、現(xiàn)代 MPP 架構(gòu)、矢量化查詢引擎、預(yù)聚合物化視圖和數(shù)據(jù)索引,為低延遲和高吞吐量查詢提供極快的性能。
- 單一統(tǒng)一:單一系統(tǒng)可以支持實(shí)時(shí)數(shù)據(jù)服務(wù)、交互式數(shù)據(jù)分析和離線數(shù)據(jù)處理場(chǎng)景。
- 聯(lián)邦查詢:支持Hive、Iceberg、Hudi等數(shù)據(jù)湖和MySQL、Elasticsearch等數(shù)據(jù)庫(kù)的聯(lián)邦查詢。
- 多種數(shù)據(jù)導(dǎo)入方式:支持從HDFS/S3批量導(dǎo)入,從MySQL Binlog/Kafka流式導(dǎo)入;支持通過(guò)HTTP接口進(jìn)行微批量寫(xiě)入,也支持在JDBC中使用Insert實(shí)時(shí)寫(xiě)入。
- 豐富生態(tài): Spark使用Spark-Doris-Connector讀寫(xiě)Doris;Flink-Doris-Connector 使 Flink CDC 能夠?qū)崿F(xiàn) Exactly-once 數(shù)據(jù)寫(xiě)入 Doris;提供 DBT Doris Adapter 用于將 Doris 中的數(shù)據(jù)與 DBT 進(jìn)行轉(zhuǎn)換。