導讀:蜀海供應鏈是集銷售、研發、采購、生產、品保、倉儲、運輸、信息、金融為一體的餐飲供應鏈服務企業,因其業務比較復雜,2020 年底完成了以 Apache Doris 為核心的架構升級,并在 2021 年開始建設以 Apache Doris 為核心的數據中臺。本文將從數據接入,數據服務編排,數據安全,Doris 應用等方面進行介紹。
業務背景
蜀海供應鏈是集銷售、研發、采購、生產、品保、倉儲、運輸、信息、金融為一體的餐飲供應鏈服務企業,為廣大餐飲連鎖企業及零售客戶提供整體食材供應鏈解決方案服務。因其業務比較復雜,2020 年底完成了以 Apache Doris 為核心的架構升級,并在 2021 年開始建設以 Apache Doris 為核心的數據中臺。
在使用 Doris 之前,我們采用了 CDH 這套數據平臺,用了很多組件,但其鏈路過長,并且開發和維護成本比較大,最后沒有引入一個很好的 OLAP 系統。
因為我們的數據歷史包袱比較輕,經過對 Apache Doris 的調研和測試,決定使用以 Apache Doris 為核心建設數據平臺,它有以下優勢:
- 同時支持高并發點查詢和高吞吐的 Ad-hoc 查詢。
- 同時支持離線批量導入和實時數據導入。
- 同時支持明細和聚合查詢。
- 兼容 MySQL 協議和標準 SQL。
- 支持 Rollup Table 和 Rollup Table 的智能查詢路由。
- 支持較好的多表 Join 策略和靈活的表達式查詢。
- 支持 Schema 在線變更。
- 支持 Range 和 Hash 二級分區。
- 高可用,能容忍部分節點掛掉。
- 運維簡單,部署,維護,升級都比較簡單,不依賴外部組件。
架構圖如下:

由于之前已經對元數據,數據服務,接入數據質量,血緣關系的建設做過介紹,本文將從數據接入,數據服務編排,數據安全,Doris 應用等方面進行介紹。
數據接入
數據接入功能是數據開發的重要一環,我們開發了一套數據接入系統,在 Web 端操作,實現零代碼數據接入到 Doris,以下為主要功能介紹:
- 訂閱 MySQL Binlog,入倉到 Doris 表。
- 訂閱 Kafka Topic,入倉到 Doris 表。
- 數據動態清洗,在頁面編寫代碼即可完成數據入倉之前的轉換。
- 接入任務合并,為節省資源,支持分庫分表在一個任務接入,支持多個 TOPIC 在一個任務接入。
- 動態數據質量校驗,配置字段質量規則,進行接入數據質量校驗。
- 入倉加密,再接入過程中,可以對敏感數據進行加密后再入到 Doris 表。
- 錯誤數據管理,因為網絡或者數據錯誤等原因,在頁面可完成數據的重新入倉。
- 數據接入鏈路監控,比如錯誤數據監控,數據生產鏈路異常監控,數據消費鏈路異常監控,任務數據接入趨勢圖,集群數據接入趨勢圖等。
數據接入任務列表:

數據接入任務配置:

數據接入動態代碼處理:

數據服務編排
數據服務是供業務系統調用 API 獲取數據的一個系統。可以在頁面進行 API 新建、編輯、在線開發調試、設置限流、上下線等操作。由于 API 之間可能存在業務邏輯關系,并且不能在配置同一個 API,我們開發了數據服務編排功能,通過拖拉拽的方式,讓 API 之間能夠進行編排并進行數據傳遞,對外提供 API 時,仍然暴露的是一個 API。
舉例: 用戶和用戶所屬的城市保存在一個 MySQL 數據源,每個城市的銷售額保存在 Doris 數據源。要開發的 API 的功能是用戶只能查看他所屬城市的銷售額。那么可以通過服務編排功能來實現,Node1 節點通過用戶 ID 獲取到城市,Node2 節點獲取上游節點的輸出(城市)作為輸入,獲取城市銷售額作為 API 的輸出。

每個節點的輸入和輸出都可以自定義配置,輸入可以來自 API 請求參數,也可以來自上游某個節點的輸出,可以來自全局參數,比如用戶 ID,分頁參數等;


數據安全建設
數據安全是一個很大的話題,涉及到方方面面,這里從數據加密,數據權限和數倉數據備份幾個方面進行簡單介紹。
數據入倉加密
在數據接入過程中,可以選擇對字段進行加密,當接入到 Doris 表后,就已經是加密的數據,后續的數據分析,可以利用密鑰進行解密。
數據接入加密配置:

數據權限
由于公司查看報表的人員分布很廣,對于同一個數據模型,每個城市每個區域的銷售,運營,工廠人員,管理人員等人員查看到的數據是不一樣的,需要精確控制到行權限和列權限,所以我們在 Doris 上層開發了一套數據權限系統,通過配置化的方式,完成數據權限配置,可以精確到行權限和列權限。 BI 報表系統作為一個接入方,引入數據權限客戶端并實現相應抽象方法即可。
舉例1: 對一個報表模型,張三只能查看區域為華北區域或者西北區域的數據;李四,王明只能查看城市為西安或者北京,并且銷售額大于 10000 的數據;張四,張五不受限制,其他人無任何權限。
模型行級權限規則列表:

行級別賦權規則編輯:

舉例2: 所有人都能查看報表數據,但是每個人只能查看自己所在城市,并且金額大于200或者金額小于100的數據。
自由組合規則條件和規則關系:

人員標簽管理:


舉例3: 列權限規則,可以針對用戶設置禁止查看,數據脫敏等規則 列級別權限配置:


數倉數據備份
我們以 Doris 作為存儲和計算的核心,Doris 本身數據已經是多副本存儲,但是考慮到容災,我們還是會對核心接入數據進行備份到 HDFS,為此開發了一套數倉數據備份系統,把 Doris 表按照全量或者分區,定時備份到 HDFS。
備份計劃配置:

備份計劃任務列表

Doris 的應用
我們用 Doris 承載了數據分析的計算和存儲。此外,還存在一個這樣的場景:業務的 MySQL 數據庫數據一直在增長,大量的歷史數據影響業務線上性能,而且不能直接刪除,因為還有低頻的歷史數據查詢,為此,我們基于 Doris 開發了一套業務歷史數據歸檔系統,可以定時把不再變更的歷史數據進行增量歸檔,通過數據服務系統提供數據查詢,把歸檔的數據推送給業務方,業務方進行校驗,并刪除歷史數據。
歸檔計劃列表:

歸檔計劃配置:

數據推送計劃配置:

收益
目前以 Doris 為核心的數據平臺,已經支撐了公司幾十個業務系統的數據查詢和數據分析需求。為BI智能分析,各業務系統提供了優異的查詢性能,并且極大減少了數據平臺維護,數據開發,數據中臺建設的成本。
- 數據實時接入穩定可靠,通過 Stream Load,實時接入了數千張表,每天接入數據總條數在億級別,非常穩定可靠;
- 支持高并發高性能的數據在線分析查詢,每天對 Doris 的在線分析查詢次數在百萬級別,大部分 SQL 在毫秒級別,慢 SQL 也有很大優化空間,并且 Doris 會自動做一些場景下的查詢優化;
- 通過直接查詢原始接入表,建立物化試圖,建立索引,支撐了多個低延時高并發的實時查詢需求。并且多表 Join 性能優異;
其他:
- Doris 的整體架構簡單,運維成本很低,可在線滾動升級,可節省人力專注于數據中臺的建設以及業務開發;
- Doris 高度兼容 MySQL 協議,交互式查詢分析,提供高效的數據開發體驗;
- 高可用,數據分區多副本存儲,不會因為部分節點的異常導致整體服務不可用;
- 廣泛生態兼容,社區提供了和 Flink,Datax 等大數據交互的 Doris 插件,通過 Broker 導入導出數據簡單快捷;
- 社區活躍,Doris 功能和性能在不斷的擴充和提升,遇到問題能夠得到社區的密切幫助。
