Apache Doris : 一個開源 MPP 數據庫的架構與實踐

圖片



分享提綱:
前端

  • Doris 背景介紹算法

  • 適用場景 & 案例介紹數據庫

  • Doris 總體架構緩存

  • Doris 關鍵技術服務器

Doris 背景介紹網絡

介紹 Doris 的總體架構,以及 Doris 的一些特性。數據結構

1、Doris架構

Doris 是分佈式、面向交互式查詢的分佈式數據庫,主要部分是 SQL,內部用到 MPP 技術。併發

什麼是 MPP?app

MPP ( Massively Parallel Processing ),即大規模並行處理,在數據庫非共享集羣中,每一個節點都有獨立的磁盤存儲系統和內存系統,業務數據根據數據庫模型和應用特色劃分到各個節點上,每臺數據節點經過專用網絡或者商業通用網絡互相鏈接,彼此協同計算,做爲總體提供數據庫服務。非共享數據庫集羣有徹底的可伸縮性、高可用、高性能、優秀的性價比、資源共享等優點。簡單來講,MPP 是將任務並行的分散到多個服務器和節點上,在每一個節點上計算完成後,將各自部分的結果彙總在一塊兒獲得最終的結果 ( 與 Hadoop 類似 )。

Doris 主要解決 PB 級別的數據量(若是高於 PB 級別,不推薦使用 Doris 解決,能夠考慮用 Hive 等工具),解決結構化數據,查詢時間通常在秒級或毫秒級。

Doris 由百度大數據部研發 ( 以前叫百度 Palo,2018年貢獻到 Apache 社區後,改名爲 Doris ),在百度內部,有超過200個產品線在使用,部署機器超過1000臺,單一業務最大可達到上百 TB。

百度將 Doris 貢獻給 Apache 社區以後,許多外部用戶也成爲了 Doris 的使用者,例如新浪微博,美團,小米等著名企業。

2、Doris 定位

在數據分析處理框架中,Doris 主要作的是 Online 層面的數據服務,主要處理的是數據分析方面的服務。

圖片

Doris 的目標是:實現低成本(主要針對商業產品),可線性擴展,支持雲化部署,高可用,高查詢性能,高加載性能。

圖片

簡要介紹兩個百度內部業務中 Doris 的應用案例:

A. 百度統計在線報表

圖片

B. 百度另外一內部業務的多維分析

圖片

能夠手動拖拽維度、指標等,進行查詢。

適用場景 & 案例介紹

1、適用場景

一、對數據分析、統計

數據分析大致上能夠分爲兩大類場景:一種偏向於報表類的,另外一種偏向於多維分析的。

二、報表

報表類數據分析,數據分析以及查詢的模式相對比較固定,並且後臺 SQL 的模式每每都是肯定的。針對此類應用場景,選擇使用 MySQL 存結果數據,用戶可從界面選擇執行批處理以及發送郵件。在 Doris 平臺中,報表類查詢時延通常在秒級如下。

三、多維分析

這裏提到的多維分析,一樣要求數據是結構化的,適用於查詢相對靈活的場景,例如數據分析條件以及聚合維度等方面不是很肯定,通常將此類數據分析定義爲多維分析。相對於報表類分析,多維分析的查詢時延會稍慢,大約在會在 10s 的級別。

2、具體案例

案例分析 1:百度統計

百度統計,爲網站站長提供流量分析,網站分析,受衆分析等多種分析服務。服務網站數量超過 450W,天天查詢量達到 1500W,QPS ( Queries Per Second,每秒查詢率 ) 峯值超過1400,每日新增數據量超過 2TB;數據導入頻次爲5分鐘,平均查詢時延 30ms。

案例分析 2:百度雲系統

一、百度雲交易系統

百度雲交易系統,主要提供訂單、帳單、扣費、交易流水等 TB 級別量數據的存儲和實時查詢服務,數據量約 12TB,每5分鐘導入。

二、百度雲數據中心

百度雲數據中心,主要提供百度雲經營分析,產品分析,用戶分析等多種分析服務;提供多維度(100+)分析,具有高性能 ( 秒級 ) BI 能力;百度雲數據中心的日處理數據量約 1T ( 略少於百度統計,所以查詢效率略高於百度統計 ),分鐘級導入。如下是百度雲數據中心頁面的一個截圖:

圖片

Doris 總體架構

1、Doris 總體架構

圖片

Doris 的總體架構和 TiDB 相似,藉助 MySQL 協議,用戶使用任意 MySQL 的 ODBC/JDBC以及MySQL 的客戶端,均可以直接訪問 Doris。Doris 中的模塊包括 FE 和 BE 兩類:FE 主要負責元數據的管理、存儲,以及查詢的解析等;一個用戶請求通過 FE 解析、規劃後,具體的執行計劃會發送給 BE,BE 則會完成查詢的具體執行。BE 節點主要負責數據的存儲、以及查詢計劃的執行。目前平臺的 FE 部分主要使用 Java,BE 部分主要使用 C++。

2、Doris 數據分佈

若是從表的角度來看數據結構,用戶的一張 Table 會拆成多個 Tablet,Tablet 會存成多副本,存儲在不一樣的 BE 中,從而保證數據的高可用和高可靠。

圖片

3、Doris 的使用方式

Doris 的使用方式和 MySQL 相似,建立 database,建立 table,導入數據、執行查詢等。具體詳見下圖:

圖片

Doris 關鍵技術

1、數據可靠性

一、元數據使用 Memory+Checkpoint+Journal ( 分別是什麼?),使用 BTBJE ( 相似於 Raft ) 協議實現高可用性和高可靠性。

二、Doris 內部自行管理數據的多副本和自動修復。保證數據的高可用、高可靠。在服務器宕機的狀況下,服務依然可用,數據也不會丟失。

圖片

2、易運維

無外部依賴:

  • Doris 部署無外部依賴,只須要部署 BE 和 IBE 便可搭建起一個集羣。

  • 支持 Online Schema Change

  • 支持在線更改表模式 ( 加減列,建立 Rollup ),不會影響當前服務,不會阻塞讀、寫等操做;這種執行是異步的 ( 用戶不須要一直盯在那裏 )

數據庫同步操做和異步操做:

同步,是全部的操做都作完,才返回給用戶結果;即寫完數據庫以後,再響應用戶,用戶體驗很差;

異步,不用等全部操做等作完,就相應用戶請求;即先相應用戶請求,而後慢慢去寫數據庫,用戶體驗較好。緩存機制(也就是消息隊列),就是異步操做的一個典型應用。

一、副本自動均衡

傳統數據庫的擴(縮)容比較麻煩,有時甚至須要重作數據;而 Doris 數據庫只須要一條 SQL ( 無須額外操做 ) 便可實現擴(縮)容。

二、內置監控

使用 Prometheus、Grafana 將監控項指標列出。

下圖爲 Doris 默認配置面板:

圖片

3、MySQL 兼容性

MySQL 的兼容性從兩方面體現:

一、兼容 MySQL 的網絡協議 ( MySQL Network Protocol )

二、兼容 MySQL 語法,使用 MySQL 語法可對 Doris 數據庫進行查詢

  • 關於 MySQL 語法的兼容性,前文已經描述過,這裏再也不贅述;

  • 關於 MySQL 的網絡協議的兼容性,舉個簡單的例子:MySQL 的調度服務器 Proxy,能夠直接用做 Doris 的 Proxy。

圖片

  • Doris 的前端展現,可使用 MySQL 專屬展現器 Tableu。下圖就是使用 Tableu 將 Doris 數據可視化的一個範例。

圖片

  • Doris 與 R 語言能夠實現無縫對接,用 R 語言可直接操做 Doris 數據庫,進行數據分析、數據挖掘等工做。

4、支持 MPP

MPP 即 Massively Parallel Processing,大規模並行處理,即海量數據併發查詢。如下圖爲例:

執行

SELECT k1,SUM(v1) FROM A,B WHERE A.k2=B.k2 GROUP BY k1 ORDER BY SUM(v1)

語句,該語句包含了合併、聚合計算、排序等多種操做;在執行計劃的時候,MPP 將其拆分紅多份,分佈到每臺機器執行,最後再將結果彙總。假若有10臺機器,在大數據量下,這種查詢執行方式可使得查詢性能達到10倍的提高。

圖片

Doris 數據模型

1、Doris 數據模型特色

一、鍵值對存儲形式:

相似於字典搜索查詢的鍵值對格式,Doris 中全部數據分紅兩列:Key 列和 Value 列。以下圖所示,Time、Id、Country 列共同組成 Key 列,Clicks、Cost 列爲 Value 列。Key 列有序可進行快速查找,Value 列能夠按照具體聚合類型內部完成數據聚合。

圖片

二、Key 列全局有序排列,查詢時方便快速定位查找。

Doris 數據模型的一個顯著特色是 Key 列全局惟一,所以存在相同 Key 值的不一樣 Value,則後面的數據與前面的數據自動作 ( SUM,MIN,MAX,REPLACE ) 等聚合處理。例如,下圖中綠色方框中的兩行,相同的 Key 值對應不一樣的 Value;所以,新的 Value 到達後,與前數據做 SUM 處理,獲得最新的數據,不只提高效率,還可提升數據處理的準確性。

圖片

2、聚合計算說明:

本部分具體描述相同 Key 值下 Value 值的聚合。

數據的導入是分版本的(例以下圖右側91,92版本),每個版本之間 Key 相同的數據彙總到中間表中,經過聚合處理最終輸出爲左側的 base。

圖片

3、按列存儲

一、Doris 的數據是按列存儲的,每一列單獨存放。

二、查詢時,只訪問查詢涉及的列,大量下降 I/O。

三、數據類型一致,方便壓縮。

四、數據包建索引,數據即索引。

五、利用原始過濾條件以及 min、max 和 sum 等智能索引技術,將數據集查詢範圍儘量地縮小,大大減小 I/O,提高查詢效率。

4、物化視圖

物化視圖是提取某些維度的組合創建對用戶透明的卻有真實數據的視圖表格。Doris 的物化視圖能夠保證用戶在更新時,直接更新原始表,Doris 會保證原表、物化視圖原子生效。在查詢的時候用戶也只需指定原始表,Doris 會根據查詢的具體條件,選擇適合的物化視圖完成查詢。

一般用戶能夠經過物化視圖功能完成如下兩種功能。

一、更換索引列進行重排列

二、針對指定列作聚合查詢

圖片

5、兩層分區與分級存儲

兩層分區:

一、方便新舊數據分離,使用不一樣的存儲介質(例如新數據使用 SSD,歷史數據 SATA)

二、分區減小了大量歷史數據沒必要要的重複 BE/CE,節省了大量的 IO 和 CPU 開銷

三、兩層分區的方法簡化了表的擴容,便於 shard 調整(例如,前期沒必要創建過多 shard,後期隨着業務增加客隨時調整 shard 數)

分級存儲

用戶能夠指定數據放到 SSD 上或者 SATA 盤上,也支持根據 TTL 將冷數據從 SSD 遷移到 SATA 上,高效利用 SSD 提升查詢性能。

圖片

6、Doris 在 Elasticsearch 的應用

簡介:

一、ES 的優勢是索引,可支持多列索引,甚至可支持全文語義索引(如 term,match,fuzzy 等);然而其缺點是沒有分佈式計算引擎,不支持 join 等操做

二、與 ES 相反,Palo 具有豐富的 SQL 計算能力,以及分佈式查詢能力;然而其索引性能較低,不支持全文索引。

三、Doris 在 ES 開發的過程當中,分別借鑑 ES 和 Palo 的長處,支持了 Elasticsearch 多表 Join 操做,同時引入 Elasticsearch 的語義搜索功能,擴充了 Doris 的查詢能力。

使用方式:

第一步:創建一張 ES 的外部表。

圖片

第二步:在 ES 外部表中導入一些數據:

圖片

第三步:使用和 ES 同樣的搜索語句,進行全文檢索查詢:

圖片

相似於上圖這樣的搜索語句,在 SQL 中比較難以表達,可是在 ES 中較容易實現。

7、Kafka 消息隊列加載

一、Doris 內部支持訂閱 Kafka 數據流,實現直接對接 Kafka:

圖片

二、用戶數據源經 Kafka 消息隊列收集後,能夠依次進入到 Doris 中,經過 Doris 作報表展現和決策分析等工做。

圖片

三、優勢

  • 無需額外組件,用戶可直接經過命令實現 Kafka 消息訂閱。

  • 精確傳輸,秒級延遲。

  • Doris 可自動感知 Kafka 中 partition 變化,合理調度併發導入。

  • 在數據導入這一過程當中,支持對 Kafka 原始數據作二次處理(如轉換,過濾等)。

8、Doris 其餘特性

  • 原子性——即一批數據要麼都生效,要麼都不生效。

  • 支持單機多盤

  • 向量化執行

  • UDF ( User Defined Function 用戶自定義函數 )

  • 內置 HLL 類型,快速計算 UV

嘉賓介紹

趙純,百度資深研發工程師。Doris 項目最初創始人之一。工做7年以來一直從事 OLAP/OLTP 等數據庫相關領域。



關於 DataFun:

DataFun 定位於最實用的數據智能平臺,主要形式爲線下的深度沙龍、線上的內容整理。但願將工業界專家在各自場景下的實踐經驗,經過 DataFun 的平臺傳播和擴散,對即將或已經開始相關嘗試的同窗有啓發和借鑑。

DataFun 的願景是:爲大數據、人工智能從業者和愛好者打造一個分享、交流、學習、成長的平臺,讓數據科學領域的知識和經驗更好的傳播和落地產生價值。

DataFun 成立至今,已經成功在全國範圍內舉辦數十場線下技術沙龍,有超過三百位的業內專家參與分享,彙集了數萬大數據、算法相關領域從業者。

圖片

相關文章
相關標籤/搜索