写点什么

Apache Doris 是如何保障系统稳定性的?

  • 2025-08-05
    北京
  • 本文字数:5245 字

    阅读完需:约 17 分钟

大小:1.41M时长:08:12
Apache Doris 是如何保障系统稳定性的?

引言

稳定性是数据价值实现的根本保障。数据从采集、传输、存储到计算处理的每个环节都需要系统的稳定运行支撑。数据库作为数据生命周期的核心载体,其稳定性的构建一直是业界公认的最大挑战。


一款数据库从技术架构落地到获得用户信任,通常需要经历数年的验证周期:既要在千万级并发请求中保持一致性响应,又要在长期运行中抵御内存泄漏等隐性风险,同时还要确保版本迭代时的数据兼容性和完整性。每次故障修复和测试完善都是为稳定性积累信任基础,这个过程需要经过反复锤炼才能让用户将核心业务数据托付给数据库系统。

一、稳定性面临的核心命题

Apache Doris 稳定性之所以难以保障,其实是受多方面影响:

1.1 广泛的应用场景

Doris 主要面临以下五大应用场景的挑战:



  • Real-Time Analytics:包括 BI 报表、用户画像、行为分析、A/B 测试等,要求低延迟和高并发处理能力。

  • Lakehouse Analytics:作为数据湖(Iceberg、Paimon、Hudi 等)或 Hadoop 平台的加速分析引擎,需要替换现有的 Presto/Trino 等组件。

  • Observability:基于 Log,Trace,Metrics 等数据,实现系统运行状况的实时监控,需要同时兼顾高吞吐、低成本。

  • Data Warehousing:主要运行 ETL 作业进行数据加工,需要处理大批量数据转换和复杂的数据处理逻辑。

  • GenAI Hybrid Search:结合向量搜索与传统关键词搜索的优势,对结构化与非结构化数据进行精准且高效的检索,为生成式 AI 应用提供多模态数据的快速匹配与关联能力。【敬请关注即将发布的 4.0 版本】


这些场景涵盖在线/离线处理、结构化/半结构化分析、AI 混合检索,甚至包括行存能力替代 HBase 的使用场景,多样化需求对 Doris 内核设计提出了综合性挑战。

1.2 多样化的客户需求

Doris 目前已服务超过 5000 家企业客户,足迹遍布互联网、金融、能源、电信、新能源制造等众多行业,客户群体的复杂性也给稳定性带来了巨大挑战:



互联网客户:追求大规模并发处理能力,需要在短时间内处理海量请求。例如浩瀚深度的 Doris 单表达到 13PB、534 万亿行数据的超大规模部署,对系统可扩展性和吞吐量提出极高要求。


金融电信客户:注重高可靠性,对数据准确性和系统稳定性有严苛要求。例如资管行业的净值计算,任何微小错误都可能造成重大财务损失。


传统行业客户:业务逻辑复杂,系统维护成本高,SQL 质量参差不齐。部分客户的 SQL 文本甚至达到 30MB,将复杂业务逻辑完全写入 SQL 中。

1.3 复杂的系统架构

数据库系统的复杂性被誉为软件领域的"珠穆朗玛峰"。


Doris 从底层的存储引擎到上层的查询执行器,从决定执行路径的优化器到保障数据一致性的事务管理,内部逻辑错综复杂,任何微小的设计疏漏都可能引发连锁反应。


分布式架构挑战:在单机数据库复杂度基础上,分布式架构还需要处理多副本数据同步时抵御网络抖动带来的一致性风险、负载均衡在节点动态扩缩容中保持性能稳定、分布式查询执行时协调跨节点计算资源,同时还要应对在网络延迟、节点故障等不可控因素下确保结果精准。



云原生适配要求:Doris 自 3.0 版本同时支持存算一体和存算分离两种部署模式。存算一体时需要优化本地资源调度,存算分离时则要应对远程存储的 IO 延迟与数据一致性难题,这种双重模式对架构设计的灵活性提出了极致要求。

1.4 高速迭代的开发节奏

更具挑战的是,在如此复杂的系统之上,我们还面临着高速迭代的压力:每周有上百个 PR 合并到主干分支,版本发布频率稳定在月级别。


这意味着开发团队必须在极短周期内完成新功能的设计、编码、测试和上线。如此高强度的节奏下,代码评审的深度可能被压缩,新功能与既有模块的兼容性测试可能出现疏漏,潜在的逻辑冲突或边界问题便可能趁隙而入,为系统稳定性埋下隐患。



这种 “高复杂度 + 高迭代速度” 的双重考验,正是 Doris 在稳定性建设中需要持续攻克的核心命题。

二、多维测试体系

为应对上述的多重挑战,测试工作作为保障 Doris 稳定性的第一道防线,发挥着关键作用。因此,我们开展了一系列全面而精准的测试工作,从多个维度夯实 Doris 的稳定基础,确保其在各类场景下的可靠运行。


2.1 基础能力测试

  • 单元测试:严格要求关键核心代码的行覆盖率达到 80% 以上,通过对函数和模块的各种输入输出场景进行枚举测试(重点关注核心的数据结构和库函数),能在开发初期就精准捕捉到逻辑漏洞或边界错误等潜在问题,将隐患扼杀在萌芽状态,为后续的系统构建打下坚实基础。

  • P0 集成测试:建立了 6000 多组测试脚本,由 600+ 社区开发者在 3 年内共同构建,覆盖系统各模块间的关键交互流程。通过模拟真实业务场景下的协同工作,验证模块接口的兼容性和数据传递的准确性,确保系统作为一个整体能够顺畅运行,避免因模块衔接问题引发的稳定性故障。

  • 集成测试:测试与 Kerberos、多种数据源(MySQL、PostgreSQL)、数据湖格式(Iceberg、Hudi、Paimon)的集成兼容性。由于我们还提供了 SQL 方言转换工具基于开源的 SQLGlot 来兼容一些用户从 Spark 或者 Trino 迁移到 Doris,所以还需要做这些 SQL 语法的兼容性测试。

  • 性能测试:对每个 PR 运行查询和导入基准测试,及时发现性能回退问题。

2.2 系统化集成测试

  • RQG 测试(规则化 SQL 生成):借助 RQG 生成超过 100 万个测试用例,全面验证优化器在不同规则组合下的处理逻辑,避免优化策略失误导致的查询错误或性能问题。

  • 错误注入测试:聚焦于核心控制逻辑,通过主动引入网络中断、数据损坏、资源耗尽等异常场景,验证系统的容错机制和异常处理能力。它能帮助我们发现系统在极端情况下的脆弱点,确保核心逻辑在遭遇意外时仍能保持稳定,避免崩溃或数据错乱的现象。

  • Fuzzy 测试:通过随机生成特殊值、边界值,模拟多种参数组合冲突场景,精准排查潜在风险。

  • 混沌测试与长稳测试:混沌测试通过随机制造节点故障或网络延迟等突发状况,检验系统的抗干扰能力和自我恢复能力;长稳测试通过长时间高负载运行系统,捕捉内存泄漏、资源耗尽、性能衰减等随时间推移才会暴露的问题,确保系统在长期运行中保持稳定。

  • Sqlsmith & SQL Lancer:凭借其强大的随机 SQL 生成能力,创造出人工难以想到的复杂或怪异 SQL 语句。这些语句往往能触及系统的边缘场景和未被充分测试的逻辑,有效挖掘出 SQL 解析和执行过程中的深层漏洞,进一步完善系统对复杂查询的处理能力。

2.3 版本兼容性测试

  • 升降级测试:升降级测试是保障系统平滑过渡的关键。在系统版本迭代过程中,通过模拟升级和降级操作,验证数据兼容性、功能连续性以及回滚机制的可靠性,避免因版本更替导致的服务中断或数据丢失等问题,确保迭代过程中的系统稳定,让 Doris 用户在任何 2 位和 3 位版本之间都可以滚动升级。

  • 多云兼容性测试:覆盖阿里云、腾讯云、华为云、AWS、GCP、Azure 等主流云平台,针对不同云平台的特性和限制,验证系统在不同云环境下的适配能力。确保系统在切换云环境或混合云架构中,各项功能正常运行,不受云平台差异影响。

  • 集成性能测试:每周运行 20+ 性能测试集,包括 TPC-DS、TPC-H、Star Schema 等标准基准测试,以及贴近用户场景构建的独特测试集。通过模拟不同负载压力下的系统表现,测试响应时间、吞吐量、资源利用率等关键指标,确保系统在高并发和大数据量场景下仍能保持良好性能。

  • 算子级性能测试:对近 1000 个关键算子和函数进行单线程和多线程并发性能测试,从各个角度观测系统的性能。


测试体系从多个维度入手,涵盖基础能力、系统集成、版本兼容性等方面。通过这些测试,Doris 能够在不同环境和负载下保持可靠性和高性能。

三、全方位的稳定性保障体系

在构建多维测试体系的基础上,我们意识到单一手段无法应对复杂系统的稳定性挑战,还需要将工程实践、社区共建、系统重构与文档建设融为一体,形成全方位的稳定性保障体系。


3.1 最佳工程实践模型

构建一套卓越的工程实践模型,是支撑产品持续进化、保障稳定性的核心框架,这一模型需涵盖从 Feature 管理到发布体系的全流程闭环,具体如下:


  1. 在 Feature 管理环节,我们建立了清晰的规划与优先级排序机制。通过用户需求调研、市场趋势分析,精准定义 Feature 的价值与边界,避免盲目开发。同时,引入 Feature Flag(功能开关)机制,实现新功能的灰度发布与快速回滚,在不影响主流程稳定性的前提下,灵活验证功能效果,为后续迭代提供数据支撑。

  2. UT/CI/CD 流程的高效运转能加速问题暴露。每次代码提交后,自动触发编译、单元测试与静态分析,及时反馈构建结果与测试覆盖率,让开发者在第一时间修复缺陷,避免问题在集成阶段堆积。测试环节形成多层次体系,从单测、集成测试到混沌测试、长稳测试,全方位验证系统在不同场景下的表现,结合 RQG、Sqlsmith 等工具挖掘隐蔽问题,确保功能与性能双重达标。

  3. 发布体系的规范化是保障线上稳定的最后屏障。通过制定明确的发布流程,包括预发布环境验证、灰度发布策略,一旦发现异常可快速触发回滚机制,将故障影响降至最低。

3.2 社区共建与多元场景融合

Doris 自发布以来已经积累了大量的企业用户,不同领域的用户既深度理解自身行业的业务特性与技术痛点,又在长期使用 Doris 的过程中沉淀了丰富的、高可借鉴的测试验证经验。因此,我们鼓励更多企业用户参与社区共建,将这些分散在各行业的实践智慧与测试资源汇集起来,在场景仿真与测试集共建中释放合力,产生更加深远且富有开源精神的价值意义,例如:


  1. 金融行业高并发交易下的实时分析场景

  2. 能源行业海量时序数据的存储计算测试用例

  3. 工业制造物联网、车联网的边缘计算验证场景

  4. ……


这些来自一线的真实场景与测试用例,将极大地丰富测试体系的行业覆盖度与场景真实性,让 Doris 在迭代过程中更精准地适配多元业务需求,为系统稳定性与功能完备性注入更坚实的保障。

3.3 系统重构与技术债务管理

测试本质上是在枚举各种可能的情况,它是从一个外部视角来观察系统的行为。而系统稳定性问题的根源还是在于代码质量的不足,这就使得系统重构在稳定性建设中扮演着不可或缺的角色。


随着 Doris 的技术演进,整个系统的架构和设计越来越复杂,初期的一些设计缺陷逐渐暴露出来;另外,冗余的代码分支如同盘根错节的藤蔓,逐渐成为系统演进的绊脚石;当系统被 Legacy Code(遗留代码)绑架时,新功能开发不得不迁就历史设计,甚至可能埋下新的隐患,积累越来越多的技术债务。


重构的核心价值在于破解“稳定性衰减”困局,通过重构梳理模块边界、优化数据流转链路,能让系统在面对高并发、复杂查询时保持清晰的执行逻辑,从架构层面降低异常概率。

3.4 文档建设与契约精神

数据库作为一类极其复杂的系统,其开发维护更是对工程质量有着极高要求。它涵盖分布式存储、SQL 优化、事务处理、分布式查询执行以及各类外部数据源对接等众多环节,任何一个微小的变更都可能改变系统行为,一旦部署到生产环境,很可能引发严重事故。


我们曾多次因行为变更而导致人力资源浪费,而清晰、准确的文档,被我们视为 Doris 开发者与用户之间的重要契约,其价值体现在多个关键维度:


  • 明确系统预期行为和功能边界,防止用户将系统存在的缺陷误当作正常功能来使用,从而减少因认知偏差导致的问题蔓延。

  • 文档为系统重构工作提供了坚实基础。重构过程中,开发者需要准确把握系统原有设计逻辑和功能细节,完善的文档能清晰呈现这些信息,降低重构过程引入新问题的风险。值得一提的是,我们曾遇到过 Bug as feature 的依赖行为,严谨的文档结构能够有效避免此类事件的发生。

  • 大幅减少开发者与用户之间的沟通成本。在 Doris 发展初期,用户多为国内群体,借助微信等即时通讯工具能较为便捷地沟通;但进入国际市场后,语言壁垒、时差差异等问题凸显,沟通效率大打折扣。此时,完善的官方文档就成为跨越这些障碍的桥梁,用户可通过文档自主获取所需信息,开发者也能减少重复性的解释工作,将精力更多投入到系统优化与功能迭代中。


在这个体系中,工程实践提供方法论指导,社区共建扩展了测试场景边界,系统重构解决了根源性问题,而文档建设则确保了各方对系统行为的一致理解。通过这四个维度的协同发力,我们构建了全方位的稳定性保障体系,让 Doris 能够在高速迭代的同时,也能持续提升系统的可靠性与健壮性。

四、稳定性的未来

自飞轮科技成立以来,技术团队暨 Doris 核心开发人员通过编码规范、测试体系、文档建设等系统性手段大幅降低了故障发生率, 在稳定性建设方面取得显著进展,包括分布式存储、SQL 优化、事务处理等核心模块的稳定性表现,皆已实现巨大飞跃。


然而,对标世界一流产品标准,Doris 仍有提升空间。这份差距的弥合,离不开广大社区开发者的持续深耕。无论是提交更全面的测试用例、参与代码重构优化,还是完善多语言文档、分享实战中的稳定性调优经验,每一份努力都将推动 Doris 向世界一流产品的目标更近一步,让这款数据库在全球市场的稳定性口碑更趋坚实。


未来,我们也将随着 AI 技术的不断发展,借助 AI 去重塑整个质量保障流程:


  • 需求分析阶段:协助梳理测试要点,为测试用例生成提供依据;

  • 测试执行阶段:自动生成测试用例,快速验证系统功能并及时发现缺陷;

  • 结果分析阶段:深度分析测试数据,总结系统薄弱环节和潜在风险,为后续优化提供多维度的有效建议。

2025-08-05 15:474799
用户头像
李冬梅 加V:busulishang4668

发布了 1179 篇内容, 共 800.8 次阅读, 收获喜欢 1299 次。

关注

评论

发布
暂无评论

软件测试 | 测试开发 | app自动化测试之Appium 源码修改定制分析

测吧(北京)科技有限公司

测试

Java 14 令人期待的 5 大新特性,打包工具终于要来了

小小怪下士

Java 编程 程序员 架构

马化腾:腾讯探索社会价值与商业价值共融的路径

博文视点Broadview

将生活的热情放进1平米工位中|ONES 人物特别策划

万事ONES

软件测试 | 测试开发 | 测试平台开发-前端开发之Vue.js 框架

测吧(北京)科技有限公司

测试

软件测试 | 测试开发 | 数据持久化技术(Python)的使用

测吧(北京)科技有限公司

测试

HarmonyOS助力构建“食用菌智慧农场”

HarmonyOS开发者

HarmonyOS

前端js手写题经常忘,记录一下

helloworld1024fd

JavaScript 前端

软件测试 | 测试开发 | app自动化测试之设备交互API详解

测吧(北京)科技有限公司

测试

软件测试 | 测试开发 | Spring Boot 异常处理

测吧(北京)科技有限公司

测试

不会武功的程序员不是一个好厨子!那么问题来了,如何成为一个优秀的程序员?

雨果

程序员

技术分享 | 测试平台开发-前端开发之Vue.js 框架的使用

测吧(北京)科技有限公司

测试

前端面试遇到了这些手写题

helloworld1024fd

JavaScript 前端

龙蜥开发者说:一人行快,众人行远!在龙蜥社区的日子,我想说这些 | 第 12 期

OpenAnolis小助手

Linux 开源 合作 龙蜥开发者说 红旗

Jeff Dean:机器学习在硬件设计中的潜力

OneFlow

人工智能 机器学习 深度学习 芯片开发

2022年史上最全Java面试题:数据结构+算法+JVM+线程+finalize+GC

小小怪下士

Java JVM java面试 秋招编程 算法结构

软件测试 | 测试开发 | 移动端App自动化之触屏操作自动化

测吧(北京)科技有限公司

测试

软件测试 | 测试开发 | Spring Boot 集成 Swagger

测吧(北京)科技有限公司

测试

软件测试 | 测试开发 | 从PO设计模式到Appium源码剖析

测吧(北京)科技有限公司

测试

软件测试 | 测试开发 | app自动化测试之Appium问题分析及定位

测吧(北京)科技有限公司

测试

java培训学员需要注意什么呢

小谷哥

java开发培训课程应该注意什么

小谷哥

前端培训机构如何选择比较好

小谷哥

软件测试 | 测试开发 | 测试开发基础 | 计算机网络篇(二):物理层与数据链路层

测吧(北京)科技有限公司

测试

ONES 参与《软件研发效能权威指南》编写

万事ONES

零基础参加java培训机构有用吗

小谷哥

什么是容灾和备份?

源字节1号

微信小程序 软件开发 前端开发 后端开发

大数据培训班如何选择

小谷哥

leetcode 144. Binary Tree Preorder Traversal 二叉树展开为链表(中等)

okokabcd

LeetCode 算法与数据结构

等保费用是什么?为什么这么贵?

行云管家

网络安全 等保 等级保护

软件测试 | 测试开发 | app自动化测试之Capability 使用进阶

测吧(北京)科技有限公司

测试

Apache Doris 是如何保障系统稳定性的?_数据库_SelectDB_InfoQ精选文章