【数据库】Apache Doris : 一个开源 MPP 数据库的架构与实践
文章目錄
- Doris 背景介紹
- 一、Doris
- 二、Doris 定位
- 適用場景 & 案例介紹
- 一、適用場景
- 二、具體案例
- Doris 整體架構(gòu)
- 一、Doris 整體架構(gòu)
- 二、Doris 數(shù)據(jù)分布
- 三、Doris 的使用方式
- Doris 關(guān)鍵技術(shù)
- 一、數(shù)據(jù)可靠性
- 二、易運維
- 三、MySQL 兼容性
- 四、支持 MPP
- Doris 數(shù)據(jù)模型
- 一、Doris 數(shù)據(jù)模型特點
- 二、聚合計算說明:
- 三、按列存儲
- 四、物化視圖
- 五、兩層分區(qū)與分級存儲
- 六、Doris 在 Elasticsearch 的應(yīng)用
- 七、Kafka 消息隊列加載
- 八、Doris 其他特性
Doris 背景介紹
介紹 Doris,讀音:[?d?r?s],的整體架構(gòu),以及 Doris 的一些特性。
一、Doris
Doris 是分布式、面向交互式查詢的分布式數(shù)據(jù)庫,主要部分是 SQL,內(nèi)部用到 MPP 技術(shù)。
什么是 MPP?
MPP ( Massively Parallel Processing ),即大規(guī)模并行處理,在數(shù)據(jù)庫非共享集群中,每個節(jié)點都有獨立的磁盤存儲系統(tǒng)和內(nèi)存系統(tǒng),業(yè)務(wù)數(shù)據(jù)根據(jù)數(shù)據(jù)庫模型和應(yīng)用特點劃分到各個節(jié)點上,每臺數(shù)據(jù)節(jié)點通過專用網(wǎng)絡(luò)或者商業(yè)通用網(wǎng)絡(luò)互相連接,彼此協(xié)同計算,作為整體提供數(shù)據(jù)庫服務(wù)。非共享數(shù)據(jù)庫集群有完全的可伸縮性、高可用、高性能、優(yōu)秀的性價比、資源共享等優(yōu)勢。簡單來說,MPP 是將任務(wù)并行的分散到多個服務(wù)器和節(jié)點上,在每個節(jié)點上計算完成后,將各自部分的結(jié)果匯總在一起得到最終的結(jié)果 ( 與 Hadoop 相似 )。
Doris 主要解決 PB 級別的數(shù)據(jù)量(如果高于 PB 級別,不推薦使用 Doris 解決,可以考慮用 Hive 等工具),解決結(jié)構(gòu)化數(shù)據(jù),查詢時間一般在秒級或毫秒級。
Doris 由百度大數(shù)據(jù)部研發(fā) ( 之前叫百度 Palo,2018年貢獻到 Apache 社區(qū)后,更名為 Doris ),在百度內(nèi)部,有超過200個產(chǎn)品線在使用,部署機器超過1000臺,單一業(yè)務(wù)最大可達到上百 TB。
百度將 Doris 貢獻給 Apache 社區(qū)之后,許多外部用戶也成為了 Doris 的使用者,例如新浪微博,美團,小米等著名企業(yè)。
二、Doris 定位
在數(shù)據(jù)分析處理框架中,Doris 主要做的是 Online 層面的數(shù)據(jù)服務(wù),主要處理的是數(shù)據(jù)分析方面的服務(wù)。
Doris 的目標(biāo)是:實現(xiàn)低成本(主要針對商業(yè)產(chǎn)品),可線性擴展,支持云化部署,高可用,高查詢性能,高加載性能。
簡要介紹兩個百度內(nèi)部業(yè)務(wù)中 Doris 的應(yīng)用案例:
A. 百度統(tǒng)計在線報表
B. 百度另一內(nèi)部業(yè)務(wù)的多維分析
可以手動拖拽維度、指標(biāo)等,進行查詢。
適用場景 & 案例介紹
一、適用場景
1、對數(shù)據(jù)分析、統(tǒng)計
數(shù)據(jù)分析大體上可以分為兩大類場景:一種偏向于報表類的,另一種偏向于多維分析的。
2、報表
報表類數(shù)據(jù)分析,數(shù)據(jù)分析以及查詢的模式相對比較固定,而且后臺 SQL 的模式往往都是確定的。針對此類應(yīng)用場景,選擇使用 MySQL 存結(jié)果數(shù)據(jù),用戶可從界面選擇執(zhí)行批處理以及發(fā)送郵件。在 Doris 平臺中,報表類查詢時延一般在秒級以下。
3、多維分析
這里提到的多維分析,同樣要求數(shù)據(jù)是結(jié)構(gòu)化的,適用于查詢相對靈活的場景,例如數(shù)據(jù)分析條件以及聚合維度等方面不是很確定,一般將此類數(shù)據(jù)分析定義為多維分析。相對于報表類分析,多維分析的查詢時延會稍慢,大約在會在 10s 的級別。
二、具體案例
案例分析 1:百度統(tǒng)計
百度統(tǒng)計,為網(wǎng)站站長提供流量分析,網(wǎng)站分析,受眾分析等多種分析服務(wù)。服務(wù)網(wǎng)站數(shù)量超過 450W,每天查詢量達到 1500W,QPS ( Queries Per Second,每秒查詢率 ) 峰值超過1400,每日新增數(shù)據(jù)量超過 2TB;數(shù)據(jù)導(dǎo)入頻次為5分鐘,平均查詢時延 30ms。
案例分析 2:百度云系統(tǒng)
1、百度云交易系統(tǒng)
百度云交易系統(tǒng),主要提供訂單、賬單、扣費、交易流水等 TB 級別量數(shù)據(jù)的存儲和實時查詢服務(wù),數(shù)據(jù)量約 12TB,每5分鐘導(dǎo)入。
2、百度云數(shù)據(jù)中心
百度云數(shù)據(jù)中心,主要提供百度云經(jīng)營分析,產(chǎn)品分析,用戶分析等多種分析服務(wù);提供多維度(100+)分析,具備高性能 ( 秒級 ) BI 能力;百度云數(shù)據(jù)中心的日處理數(shù)據(jù)量約 1T ( 略少于百度統(tǒng)計,因此查詢效率略高于百度統(tǒng)計 ),分鐘級導(dǎo)入。以下是百度云數(shù)據(jù)中心頁面的一個截圖:
Doris 整體架構(gòu)
一、Doris 整體架構(gòu)
Doris 的整體架構(gòu)和 TiDB 類似,借助 MySQL 協(xié)議,用戶使用任意 MySQL 的 ODBC/JDBC以及MySQL 的客戶端,都可以直接訪問 Doris。Doris 中的模塊包括 FE 和 BE 兩類:FE 主要負(fù)責(zé)元數(shù)據(jù)的管理、存儲,以及查詢的解析等;一個用戶請求經(jīng)過 FE 解析、規(guī)劃后,具體的執(zhí)行計劃會發(fā)送給 BE,BE 則會完成查詢的具體執(zhí)行。BE 節(jié)點主要負(fù)責(zé)數(shù)據(jù)的存儲、以及查詢計劃的執(zhí)行。目前平臺的 FE 部分主要使用 Java,BE 部分主要使用 C++。
二、Doris 數(shù)據(jù)分布
如果從表的角度來看數(shù)據(jù)結(jié)構(gòu),用戶的一張 Table 會拆成多個 Tablet,Tablet 會存成多副本,存儲在不同的 BE 中,從而保證數(shù)據(jù)的高可用和高可靠。
三、Doris 的使用方式
Doris 的使用方式和 MySQL 類似,創(chuàng)建 database,創(chuàng)建 table,導(dǎo)入數(shù)據(jù)、執(zhí)行查詢等。具體詳見下圖:
Doris 關(guān)鍵技術(shù)
一、數(shù)據(jù)可靠性
1、元數(shù)據(jù)使用 Memory+Checkpoint+Journal ( 分別是什么?),使用 BTBJE ( 類似于 Raft ) 協(xié)議實現(xiàn)高可用性和高可靠性。
2、Doris 內(nèi)部自行管理數(shù)據(jù)的多副本和自動修復(fù)。保證數(shù)據(jù)的高可用、高可靠。在服務(wù)器宕機的情況下,服務(wù)依然可用,數(shù)據(jù)也不會丟失。
二、易運維
無外部依賴:
Doris 部署無外部依賴,只需要部署 BE 和 IBE 即可搭建起一個集群。
支持 Online Schema Change
支持在線更改表模式 ( 加減列,創(chuàng)建 Rollup ),不會影響當(dāng)前服務(wù),不會阻塞讀、寫等操作;這種執(zhí)行是異步的 ( 用戶不需要一直盯在那里 )
數(shù)據(jù)庫同步操作和異步操作:
同步,是所有的操作都做完,才返回給用戶結(jié)果;即寫完數(shù)據(jù)庫之后,再響應(yīng)用戶,用戶體驗不好;
異步,不用等所有操作等做完,就相應(yīng)用戶請求;即先相應(yīng)用戶請求,然后慢慢去寫數(shù)據(jù)庫,用戶體驗較好。緩存機制(也就是消息隊列),就是異步操作的一個典型應(yīng)用。
1、副本自動均衡
傳統(tǒng)數(shù)據(jù)庫的擴(縮)容比較麻煩,有時甚至需要重做數(shù)據(jù);而 Doris 數(shù)據(jù)庫只需要一條 SQL ( 無須額外操作 ) 即可實現(xiàn)擴(縮)容。
2、內(nèi)置監(jiān)控
使用 Prometheus、Grafana 將監(jiān)控項指標(biāo)列出。
下圖為 Doris 默認(rèn)配置面板:
三、MySQL 兼容性
MySQL 的兼容性從兩方面體現(xiàn):
1、兼容 MySQL 的網(wǎng)絡(luò)協(xié)議 ( MySQL Network Protocol )
2、兼容 MySQL 語法,使用 MySQL 語法可對 Doris 數(shù)據(jù)庫進行查詢
關(guān)于 MySQL 語法的兼容性,前文已經(jīng)描述過,這里不再贅述;
關(guān)于 MySQL 的網(wǎng)絡(luò)協(xié)議的兼容性,舉個簡單的例子:MySQL 的調(diào)度服務(wù)器 Proxy,可以直接用作 Doris 的 Proxy。
Doris 的前端展示,可以使用 MySQL 專屬展示器 Tableu。下圖就是使用 Tableu 將 Doris 數(shù)據(jù)可視化的一個范例。
Doris 與 R 語言可以實現(xiàn)無縫對接,用 R 語言可直接操作 Doris 數(shù)據(jù)庫,進行數(shù)據(jù)分析、數(shù)據(jù)挖掘等工作。
四、支持 MPP
MPP 即 Massively Parallel Processing,大規(guī)模并行處理,即海量數(shù)據(jù)并發(fā)查詢。以下圖為例:
執(zhí)行
SELECT k1,SUM(v1) FROM A,B WHERE A.k2=B.k2 GROUP BY k1 ORDER BY SUM(v1)語句,該語句包含了合并、聚合計算、排序等多種操作;在執(zhí)行計劃的時候,MPP 將其拆分成多份,分布到每臺機器執(zhí)行,最后再將結(jié)果匯總。假如有10臺機器,在大數(shù)據(jù)量下,這種查詢執(zhí)行方式可以使得查詢性能達到10倍的提升。
Doris 數(shù)據(jù)模型
一、Doris 數(shù)據(jù)模型特點
1、鍵值對存儲形式:
類似于字典搜索查詢的鍵值對格式,Doris 中所有數(shù)據(jù)分成兩列:Key 列和 Value 列。如下圖所示,Time、Id、Country 列共同組成 Key 列,Clicks、Cost 列為 Value 列。Key 列有序可進行快速查找,Value 列可以按照具體聚合類型內(nèi)部完成數(shù)據(jù)聚合。
2、Key 列全局有序排列,查詢時方便快速定位查找。
Doris 數(shù)據(jù)模型的一個顯著特點是 Key 列全局唯一,因此存在相同 Key 值的不同 Value,則后面的數(shù)據(jù)與前面的數(shù)據(jù)自動做 ( SUM,MIN,MAX,REPLACE ) 等聚合處理。例如,下圖中綠色方框中的兩行,相同的 Key 值對應(yīng)不同的 Value;因此,新的 Value 到達后,與前數(shù)據(jù)作 SUM 處理,得到最新的數(shù)據(jù),不僅提升效率,還可提高數(shù)據(jù)處理的準(zhǔn)確性。
二、聚合計算說明:
本部分具體描述相同 Key 值下 Value 值的聚合。
數(shù)據(jù)的導(dǎo)入是分版本的(例如下圖右側(cè)91,92版本),每一個版本之間 Key 相同的數(shù)據(jù)匯總到中間表中,通過聚合處理最終輸出為左側(cè)的 base。
三、按列存儲
1、Doris 的數(shù)據(jù)是按列存儲的,每一列單獨存放。
2、查詢時,只訪問查詢涉及的列,大量降低 I/O。
3、數(shù)據(jù)類型一致,方便壓縮。
4、數(shù)據(jù)包建索引,數(shù)據(jù)即索引。
5、利用原始過濾條件以及 min、max 和 sum 等智能索引技術(shù),將數(shù)據(jù)集查詢范圍盡可能地縮小,大大減少 I/O,提升查詢效率。
四、物化視圖
物化視圖是提取某些維度的組合建立對用戶透明的卻有真實數(shù)據(jù)的視圖表格。Doris 的物化視圖可以保證用戶在更新時,直接更新原始表,Doris 會保證原表、物化視圖原子生效。在查詢的時候用戶也只需指定原始表,Doris 會根據(jù)查詢的具體條件,選擇適合的物化視圖完成查詢。
通常用戶可以通過物化視圖功能完成以下兩種功能。
1、更換索引列進行重排列
2、針對指定列做聚合查詢
五、兩層分區(qū)與分級存儲
兩層分區(qū):
1、方便新舊數(shù)據(jù)分離,使用不同的存儲介質(zhì)(例如新數(shù)據(jù)使用 SSD,歷史數(shù)據(jù) SATA)
2、分區(qū)減少了大量歷史數(shù)據(jù)不必要的重復(fù) BE/CE,節(jié)省了大量的 IO 和 CPU 開銷
3、兩層分區(qū)的方法簡化了表的擴容,便于 shard 調(diào)整(例如,前期不必建立過多 shard,后期隨著業(yè)務(wù)增長客隨時調(diào)整 shard 數(shù))
分級存儲
用戶可以指定數(shù)據(jù)放到 SSD 上或者 SATA 盤上,也支持根據(jù) TTL 將冷數(shù)據(jù)從 SSD 遷移到 SATA 上,高效利用 SSD 提高查詢性能。
六、Doris 在 Elasticsearch 的應(yīng)用
簡介:
1、ES 的優(yōu)點是索引,可支持多列索引,甚至可支持全文語義索引(如 term,match,fuzzy 等);然而其缺點是沒有分布式計算引擎,不支持 join 等操作
2、與 ES 相反,Palo 具備豐富的 SQL 計算能力,以及分布式查詢能力;然而其索引性能較低,不支持全文索引。
3、Doris 在 ES 開發(fā)的過程中,分別借鑒 ES 和 Palo 的長處,支持了 Elasticsearch 多表 Join 操作,同時引入 Elasticsearch 的語義搜索功能,擴充了 Doris 的查詢能力。
使用方式:
第一步:建立一張 ES 的外部表。
第二步:在 ES 外部表中導(dǎo)入一些數(shù)據(jù):
第三步:使用和 ES 一樣的搜索語句,進行全文檢索查詢:
類似于上圖這樣的搜索語句,在 SQL 中比較難以表達,但是在 ES 中較容易實現(xiàn)。
七、Kafka 消息隊列加載
1、Doris 內(nèi)部支持訂閱 Kafka 數(shù)據(jù)流,實現(xiàn)直接對接 Kafka:
2、用戶數(shù)據(jù)源經(jīng) Kafka 消息隊列收集后,可以依次進入到 Doris 中,通過 Doris 做報表展示和決策分析等工作。
3、優(yōu)點
無需額外組件,用戶可直接通過命令實現(xiàn) Kafka 消息訂閱。
精確傳輸,秒級延遲。
Doris 可自動感知 Kafka 中 partition 變化,合理調(diào)度并發(fā)導(dǎo)入。
在數(shù)據(jù)導(dǎo)入這一過程中,支持對 Kafka 原始數(shù)據(jù)做二次處理(如轉(zhuǎn)換,過濾等)。
八、Doris 其他特性
原子性——即一批數(shù)據(jù)要么都生效,要么都不生效。
支持單機多盤
向量化執(zhí)行
UDF ( User Defined Function 用戶自定義函數(shù) )
內(nèi)置 HLL 類型,快速計算 UV
doris官方文檔(中文版)鏈接
總結(jié)
以上是生活随笔為你收集整理的【数据库】Apache Doris : 一个开源 MPP 数据库的架构与实践的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Focusky教程 | Focusky新
- 下一篇: 原码、反码、补码、移码及其运算