导读:顺丰科技引入 Doris 替换 Presto,在内部可视化数据自助分析工具丰景台场景广泛应用。目前,顺丰临时查询业务、丰景台报表业务的 Presto 场景已经 100% 切换到 Doris 集群中,日均查询量 100W+。并实现 P95 性能提升近 3 倍,硬件资源节省达 48% 显著收益。

丰景台是顺丰科技自主研发的一款可视化数据自助分析工具,旨在提升数据分析师的工作效率,助力自助分析和业务决策。该产品支持多种丰富的图表类型,用户只需通过拖拽操作即可快速进行自助分析,实现数据可视化。 目前,丰景台已广泛支撑顺丰的物流收、转、运、派等各个环节,该平台处理的数据规模庞大,用户数量众多,对实时响应速度和稳定性有着较高要求。
最初,丰景台使用 Presto 作为查询引擎,面临查询速度慢、服务稳定性不足以及资源消耗成本高等问题。为解决这些问题,引入 Doris 替换 Presto,构建统一的数据分析平台。 目前,顺丰临时查询业务、丰景台报表业务的 Presto 场景已经 100% 切换到 Doris 集群中,日均查询量 100W+。并实现 P95 性能提升近 3 倍,硬件资源节省达 48%。
起初,丰景台使用 Presto 作为查询引擎来支撑业务。基于自研的 Presto On Yarn 模式,可以在租户级别根据业务负载情况自动调整 Presto 集群的规模,或根据负载模式选择不同的 Presto 子集群对查询请求进行路由。

因丰景台支撑的业务线众多,查询模式多样化,且高峰期的 QPS 较高,涉及到的数据量庞大。同时,系统对查询延迟有严格的保证需求。在使用 Presto 时遇到了以下问题:
为解决上述痛点,顺丰在 2024 年初开始调研下一代数据分析产品,旨在寻求一款高性能、功能丰富且适用场景广泛的工具,以支持丰景台及内部业务的各种数据分析需求。Apache Doris 在性能表现和资源成本等方面具有显著优势:
顺丰科技自 2024 年中开始,逐步使用 Apache Doris 替换 Presto 所支持场景,构建统一的数据分析平台。Doris 具备查询和存储的能力,既可以作为查询引擎查询数据湖 Hive 中数据,也作为数据仓库存储数据。这一升级,同时满足数据仓库和数据湖的需求,实现了查询与存储引擎的统一。

在平台升级过程中,顺丰重点关注以下两点:
接下来核心围绕以上两点,详细介绍架构迭代升级过程中的实践、优化经验和收获。
Presto 和 Doris 两套系统虽然都支持标准 SQL,但是在部分语法、函数语义和执行行为上存在细微差别。因此我们在前期涉及了周密的迁移验证流程,在平台侧通过以下方案来确保架构的平滑升级:

这些方案是整个升级和迁移项目的重要基石,为后续的性能表现、版本迭代提供了有力保障。
Doris 社区提供了 SQL Convertor 组件,灵活支持将 Hive、Trino/Presto、Spark、Clickhouse 等多种 SQL 方言转换为 Doris SQL,帮助业务无感迁移到 Doris 。在验证阶段,飞轮科技与顺丰合作,完成了大量方言适配工作,显著提升了 Presto SQL 方言的兼容性。
date_parse 函数改写为
str_to_da``te 函数;或者调换
data_trunc 函数中的参数顺序等。cast 转换类型,以不影响原函数行为的情况下提升对 Presto 函数行为的兼容度。{"k1":null, "k2":"v3"} 改写为
{k1=NULL, k2=v3},确保用户在进一步处理时获得正确的语义。目前在顺丰业务场景下,Presto SQL 兼容度可以达到 97%,仅有少部分 SQL 需要业务方配合调整,后续将进一步加强兼容性,目标达到 99% 以上。
丰景台场景存储格式包括 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 在文件格式读取性能、稳定性和兼容性方面的表现。
丰景台场景数据由科技提供的 HDFS 统一存储。由于 HDFS 在多个业务共享,业务高峰期可能出现 IO 抖动、延迟增大甚至超时等问题。针对 HDFS 特性,制定了多种改善 IO 的措施:
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 分位以上的延迟上效果显著。
缓存功能降低了通过网络访问外部数据源的不可预测性,并提升了热点数据的读取性能。在丰景台场景下,单集群磁盘缓存容量达到 10 TB。在使用 Doris 替换 Presto 的过程中,针对缓存的时效性和一致性进行了优化,这不仅提高了查询性能和稳定性,还有效降低了对 Hive Metastore 和 HDFS 的访问压力。
Doris 除了在丰景台场景广泛应用之外,顺丰科技正在基于 Doris 进行内部云产品改造,面向顺丰内部提供按需的 Doris 集群服务。当前正进行 Doris 容器化部署的实践,通过容器化的方式, 提供更小规格的资源供业务选择,实现按需使用。
以下为内部云上 Doris 产品图以及部分管理页面展示:



应用层主要分为两部分:
顺丰科技期望在 2025 年全面完成 Doris 的平台化建设,推动 Doris 产品更广泛在内部应用。
目前,顺丰的临时查询业务、丰景台报表业务场景已从 Presto 100% 切换到 Doris 集群中,日均查询量超过 100W。
除了湖仓分析场景,Doris 在日志分析和实时报表分析中表现同样出色。顺丰科技正与 Doris 社区、飞轮科技团队合作,持续推进 Doris 在内部的业务拓展。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70017904/viewspace-3083645/ ,如需转载,请注明出处,否则将追究法律责任。