本文為順豐科技大數據分析平臺的架構演進實踐,其將原本使用的 Presto 查詢引擎替換成了 Doris,在內部可視化數據自助分析工具豐景臺場景廣泛應用。目前,順豐臨時查詢業務、豐景臺報表業務的 Presto 場景已經 100% 切換到 Doris 集群中,日均查詢量 100W+。并實現 P95 性能提升近 3 倍,硬件資源節省達 48% 的顯著收益。
而他們是怎么做的?我們將通過下文一探究竟。
本文為作者投稿,未經允許,禁止轉載。
作者 | 唐尚文,順豐科技 大數據平臺研發高級工程師
出品 | CSDN(ID:CSDNnews)
豐景臺是順豐科技自主研發的一款可視化數據自助分析工具,旨在提升數據分析師的工作效率,助力自助分析和業務決策。該產品支持多種豐富的圖表類型,用戶只需通過拖拽操作即可快速進行自助分析,實現數據可視化。目前,豐景臺已廣泛支撐順豐的物流收、轉、運、派等各個環節,該平臺處理的數據規模龐大,用戶數量眾多,對實時響應速度和穩定性有著較高要求。
最初,豐景臺使用 Presto 作為查詢引擎,面臨查詢速度慢、服務穩定性不足以及資源消耗成本高等問題。為解決這些問題,引入 Doris 替換 Presto,構建統一的數據分析平臺。目前,順豐臨時查詢業務、豐景臺報表業務的 Presto 場景已經 100% 切換到 Doris 集群中,日均查詢量 100W+。并實現 P95 性能提升近 3 倍,硬件資源節省達 48%。
使用 Presto 面臨挑戰
起初,豐景臺使用 Presto 作為查詢引擎來支撐業務。基于自研的 Presto On Yarn 模式,可以在租戶級別根據業務負載情況自動調整 Presto 集群的規模,或根據負載模式選擇不同的 Presto 子集群對查詢請求進行路由。
因豐景臺支撐的業務線眾多,查詢模式多樣化,且高峰期的 QPS 較高,涉及到的數據量龐大。同時,系統對查詢延遲有嚴格的保證需求。在使用 Presto 時遇到了以下問題:
查詢速度慢:因 Presto 查詢優化器能力有限,無法提供很好的規則優化,尤其在處理復雜查詢時,查詢速度慢,無法滿足性能要求。
服務穩定性差:Presto 缺乏內置的緩存機制,容易受到 HDFS IO 抖動的影響,影響服務的穩定性。引入外部緩存組件雖然可以緩解這一問題,但同時也會增加系統的復雜性。
資源成本高:Presto 以萬核規模運行,需要大量的計算資源和硬件支持,整體資源成本高昂。
適用場景有限:Presto 作為查詢引擎,但它不具備數據存儲的能力,當前只能分析存儲在 Hive 中的數據。更加實時的場景、半結構化分析的場景不好滿足。

- 查詢速度更快Doris 的查詢優化器(CBO)可有效支持復雜查詢,尤其是多表關聯查詢的優化,同時通過豐富的統計信息提升優化規則的準確性。此外,Doris 物化視圖能力能靈活應對數據加工和湖倉透明加速等場景。
- 服務穩定性高Doris 提供內置的元數據和數據緩存能力,可有效降低遠端存儲(如 HDFS)抖動對查詢延遲的不穩定影響,同時降低系統維護的復雜度。
- 湖倉統一及查詢加速Doris 作為湖倉加速引擎,可直接對 Hive、Iceberg 和 Paimon 在內的主流湖倉格式進行查詢加速,并能管理高性能的自有格式數據。憑借 Doris 單一引擎即可支撐日志分析、實時報表分析等多樣化場景的統一分析。
- 彈性資源隔離Doris 提供節點級別的物理隔離和進程內的線程級別隔離,利用計算節點和計算組等功能,滿足順豐對多業務、多租戶及彈性擴縮容的需求。


- 無感升級由于是線上業務的升級,需保證整個過程業務側無明顯感知。因此,需完善對 Presto 的語法支持、SQL 行為的兼容、集群切換方案和監控報警方面的能力。
- 性能提升和穩定性保障基于 Doris 以更少的計算資源獲得更好的分析性能,同時保證整體服務的穩定性。
Presto 和 Doris 兩套系統雖然都支持標準 SQL,但是在部分語法、函數語義和執行行為上存在細微差別。因此我們在前期涉及了周密的遷移驗證流程,在平臺側通過以下方案來確保架構的平滑升級:
開發線上查詢模擬工具,自動收集線上查詢語句,并在測試環境進行回放和結果比對,驗證結果正確性。
開發壓力測試工具模擬真實線上流量負載,檢查高峰、低谷期 Doris 集群的資源開銷、查詢延遲等,用于驗證穩定性和性能預期。
搭建 Doris -> Presto 的雙跑和降級切換鏈路。可以按照比例將流量緩慢灰度到 Doris 集群。并且通過自定義路由規則,當遇到 Doris 不支持的函數、語法、SQL 行為時,系統自動將切換到 Presto 集群上,確保上游業務的平穩運行。
這些方案是整個升級和遷移項目的重要基石,為后續的性能表現、版本迭代提供了有力保障。
02 Presto SQL 方言兼容Doris 社區提供了 SQL Convertor 組件,靈活支持將 Hive、Trino/Presto、Spark、Clickhouse 等多種 SQL 方言轉換為 Doris SQL,幫助業務無感遷移到 Doris。在驗證階段,飛輪科技與順豐合作,完成了大量方言適配工作,顯著提升了 Presto SQL 方言的兼容性。
- 語法改寫將 Presto SQL 語法等價改寫為 Doris SQL 語法。例如,在 Presto SQL 中,列名用雙引號包裹需轉換為反引號;或者為 Presto SQL 中的子查詢添加別名,以滿足 Doris SQL 對別名的強制要求等。
- 函數簽名改寫:將 Presto 中與 Doris 行為相同但簽名不同的函數進行改寫。比如將 date_parse 函數改寫為 str_to_date 函數;或者調換 data_trunc 函數中的參數順序等。
- 函數行為改寫:Doris 的大部分函數行為兼容 MySQL,如對非法參數的處理和返回值的精度等。如果直接修改這些函數的行為,會對其他用戶造成影響。因此額外補充了一些符合 Presto 行為的新函數,并通過 SQL Convertor 改寫,或使用 cast 轉換類型,以不影響原函數行為的情況下提升對 Presto 函數行為的兼容度。
- 輸出格式改寫:針對 Array、Map、JSON 等復雜類型的字符串輸出,Doris 提供了相應的改寫規則。比如將 Doris 對 Map 類型的字符串表示由{"k1":null, "k2":"v3"}改寫為 {k1=NULL, k2=v3},確保用戶在進一步處理時獲得正確的語義。
- 新增函數:新增大量 Doris 原本不支持的 Presto/Trino 函數,進一步提升 SQL 兼容性。
目前在順豐業務場景下,Presto SQL 兼容度可以達到97%,僅有少部分 SQL 需要業務方配合調整,后續將進一步加強兼容性,目標達到 99% 以上。
03 Parquet/ORC 性能優化
豐景臺場景存儲格式包括 Parquet、ORC 以及少量 Json 和 Text 數據格式。數據多樣性對優化工作帶來了挑戰。順豐與飛輪科技在以下方面合作,顯著提升了 Doris 對不同文件格式的訪問性能:
復雜類型的延遲物化:針對包含 Map、Array、Struct 等復雜類型的查詢,在 Parquet/ORC 讀取過程中提供延遲物化能力,顯著降低 IO 數量。
小IO優化:通過調整 Merge IO 的閾值,緩解在不同查詢模式下 Merge IO 引發的讀放大問題,并顯著降低 IO 次數。
ORC Tiny Stripe 優化:針對包含大量小 Stripe(小于 8MB)的 ORC 文件,提供跨 Stripe 合并讀取能力,降低 IO 次數并提升文件讀取吞吐。
數據格式兼容度提升:全面支持 Parquet/ORC/Text 在 snappy、lz4、zstd、gzip、lzo、bzip2、brotli 等多種壓縮格式下的讀取能力。并且提供
enable_text_validate_utf8
等可調選項,確保在非法值場景下(如非 UTF8 編碼的 Text 格式)行為和 Presto 一致。
這些優化顯著改善了 Doris 在文件格式讀取性能、穩定性和兼容性方面的表現。
04 HDFS IO 優化
豐景臺的數據由科技提供的 HDFS 統一存儲。由于 HDFS 在多個業務共享,業務高峰期可能出現 IO 抖動、延遲增大甚至超時等問題。針對 HDFS 特性,制定了多種改善 IO 的措施:
文件對齊 Block 切分:Doris 將大文件切分為多個文件分片,通過并行讀取提升效率。針對 HDFS 文件,Doris 根據 HDFS Block Size 對齊切分,避免分片任務跨 Block 讀取,降低對 Namenode 的訪問頻率,從而減少 HDFS 不穩定的影響。
HDFS Hedged Read 和 Read Timeout:HDFS 客戶端提供 Hedged Read 功能,當數據塊的讀取請求在預設時間內未響應時,會向其他數據節點發送額外請求,使用最快返回的數據塊,減少讀取延遲。此外,通過 dfs.client.socket-timeout 降低讀取超時閾值,快速觸發重試,從而提升 IO 穩定性。這些功能在部分順豐業務場景下顯著改善了訪問 HDFS 的 IO 響應性能。
Hive 等湖倉外表數據的查詢執行環境與內表數據存在顯著差異,如元數據訪問延遲和網絡 IO 開銷。因此,針對外表查詢特點優化了執行調度:
動態優先級調度:豐景臺場景查詢模式多樣,無法通過預定義 Workload Group 進行資源分組和隔離。動態優先級調度策略通過任務分片執行時間統計,實時識別大查詢和小查詢,動態調整優先級,顯著降低中小查詢在資源搶占場景下的延遲。
分片異步調度:Hive 集群中有大量分區數量在十萬級別的表。Doris 通過分片異步調度,讓文件列表的 List 操作與 BE 節點的文件讀取并行執行,顯著改善了海量分區訪問時的查詢調度耗時。
Limit 下推優化:實際場景中存在大量由謂詞條件和 Limit 子句組成的查詢,通常用于快速探查符合條件的數據,但無需返回查詢結果,但要求探查完成后快速結束查詢。Doris 在查詢規劃時將 Limit 下推到數據掃描節點,并在掃描任務調度、跨節點數據傳輸、查詢快速熔斷方面進行了優化,顯著減少了 IO 開銷。
這些優化降低了 Doris 對 CPU 和 IO 資源的開銷,在混合負載的 Hive 查詢場景中大幅提升了查詢的穩定性和可預期性,尤其在長尾查詢和 95 分位以上的延遲上效果顯著。
06 緩存優化
緩存功能降低了通過網絡訪問外部數據源的不可預測性,并提升了熱點數據的讀取性能。在豐景臺場景下,單集群磁盤緩存容量達到 10 TB。在使用 Doris 替換 Presto 的過程中,針對緩存的時效性和一致性進行了優化,這不僅提高了查詢性能和穩定性,還有效降低了對 Hive Metastore 和 HDFS 的訪問壓力。
提升數據緩存命中率:Doris 數據緩存屬于本地緩存,采用一致性哈希算法確保對相同數據文件的請求被發送到同一個節點,從而提升緩存命中率。在豐景臺場景中,緩存命中率高達96%。
單查詢文件列表共享:在需要實時感知 Hive 分區文件變化的場景中,關閉了 Doris 的全局分區文件列表緩存,這意味著每次查詢需通過 List 操作從 HDFS 獲取文件列表。為此,Doris 進行了優化。例如在同一查詢中對同一張表的子查詢時,進行 Union 或自關聯操作,子查詢間可以共享文件列表。這使得查詢規劃性能數倍提升,并降低了對 HDFS 的請求壓力。
基于 Doris 的云產品改造Doris 除了在豐景臺場景廣泛應用之外,順豐科技正在基于 Doris 進行內部云產品改造,面向順豐內部提供按需的 Doris 集群服務。當前正進行 Doris 容器化部署的實踐,通過容器化的方式, 提供更小規格的資源供業務選擇,實現按需使用。以下為內部云上 Doris 產品圖以及部分管理頁面展示:
應用層主要分為兩部分:
面向用戶:用戶能夠在頁面上進行集群申請操作,該申請流程會自動接入內部計費體系。在完成集群申請后,用戶可在頁面上進行查詢以及查看監控、日志,實施庫表授權等相關自助操作,還可通過頁面針對所在的慢查詢進行分析等。
面向運維:運維人員可以對所有資源進行管理,諸如存儲空間、集群等。同時,還能夠對集群進行版本升級以及通用模版配置修改等多種操作,從而便于運維人員在線上對故障進行快速處理,以保障云上集群的服務質量。
順豐科技期望在 2025 年全面完成 Doris 的平臺化建設,推動 Doris 產品更廣泛在內部應用。
結束語01 業務收益
目前,順豐的臨時查詢業務、豐景臺報表業務場景已從 Presto 100% 切換到 Doris 集群中,日均查詢量超過 100W。
查詢性能提升 3 倍:P95 性能降低到 20 秒以內,提升近 3 倍。大于 50s 的查詢由 8% 降低至 1.5%,小于 10s 的查詢比例由 72% 提升至 88%。
硬件資源節省 48%:將 Presto 的上萬核規模降低至 Doris 的數千核規模,實現了約 48% 的資源節省。
除了湖倉分析場景,Doris 在日志分析和實時報表分析中表現同樣出色。順豐科技正與 Doris 社區、飛輪科技團隊合作,持續推進 Doris 在內部的業務拓展。
完善穩定性及兼容性:今年將全面下線 Presto 服務,繼續完善 Doris 集群穩定性,并增強對 Presto SQL 的兼容性。同時引入 Delta Lake 替換 Hive 格式,驗證 Doris 3.0 版本對 Delta Lake 的支持(Doris 計劃在 3.1 版本中增強對 Delta Lake 的讀取能力)。
日志及半結構化場景應用:Doris 當前已在多個企業的日志及半結構化數據分析場景成功落地,順豐也在嘗試用 Doris 替換 Elasticsearch,簡化更多數據平臺的組件,構建統一數據分析技術棧。
嘗試存算分離架構:計劃引入 Doris 3.0 版本所支持的存算分離架構,不僅提升多租戶彈性能力,還能支持冷數據動態備份,降低用戶存儲成本。
Doris 集群運維:隨著 Doris 在順豐內部的逐漸鋪開,需要更完善的工具來運維 Doris 集群或診斷線上問題。順豐正在推動 Doris 社區提供更加完善的 SQL 診斷工具,如可視化的 Query Profile 分析能力、慢 SQL 診斷優化工具等。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.