導讀:蜀海供應鏈是集銷售、研發、採購、生產、品保、倉儲、運輸、資訊、金融為一體的餐飲供應鏈服務企業,因其業務比較複雜,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:列許可權規則,可以針對使用者設定禁止檢視,資料脫敏等規則
列級別許可權配置:
數倉資料備份
我們以 Dori 作為儲存和計算的核心,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 功能和效能在不斷的擴充和提升,遇到問題能夠得到社群的密切幫助。
加入社群
歡迎更多熱愛開源的小夥伴加入 Apache Doris 社群,參與社群建設,除了可以在 GitHub 上提 PR 或 Issue 之外,也歡迎大家積極參與到社群日常建設中來,比如:
參加社群徵文活動,進行技術解析、應用實踐等文章產出;作為講師參與 Doris 社群的線上線下活動;積極參與 Doris 社群使用者群的提問與解答等。
最後,歡迎更多的開源技術愛好者加入 Apache Doris 社群,攜手成長,共建社群生態。
SelectDB 是一家開源技術公司,致力於為 Apache Doris 社群提供一個由全職工程師、產品經理和支援工程師組成的團隊,繁榮開源社群生態,打造實時分析型資料庫領域的國際工業界標準。基於 Apache Doris 研發的新一代雲原生實時數倉 SelectDB,執行於多家雲上,為使用者和客戶提供開箱即用的能力。
相關連結:
SelectDB 官方網站:
https://selectdb.com (We Are Coming Soon)
Apache Doris 官方網站:
Apache Doris Github:
https://github.com/apache/doris
Apache Doris 開發者郵件組: