跳到主要内容
最后于 更新

系统架构

本文档介绍 Apache Doris 的系统架构,包括两种部署模式的核心组件及其交互逻辑:

  • 存算一体架构:FE + BE 经典架构,数据存储与计算融合
  • 存算分离架构:元数据层、计算层、存储层三层分离

适用场景: 选型评估 · 架构学习 · 运维理解

存算一体架构​

存算一体架构是 Apache Doris 的经典部署模式,由 Frontend(FE) 和 Backend(BE) 两类进程组成。

存算一体架构

核心组件​

Frontend(FE)节点​

FE 是 Apache Doris 的入口节点,承担协调和控制职能:

职责说明
用户请求接入兼容 MySQL 协议,支持标准 SQL
查询解析与规划词法分析 → 语义分析 → 生成逻辑计划 → CBO 优化 → 下发执行
元数据管理库表结构、副本分布、用户权限、集群拓扑、导入状态
节点管理心跳检测、负载均衡、副本修复、扩缩容管理

FE 采用 BDB JE 作为元数据存储引擎,支持事务特性。不依赖 ZooKeeper 等外部组件,简化部署和维护。

Backend(BE)节点​

BE 是计算和存储节点:

特性说明
列式存储数据按列组织,配合编码压缩提升 I/O 效率
数据分片(Tablet)数据水平切分,是副本调度的最小单位
多副本每 Tablet 默认 3 副本,分布在不同 BE 节点
向量化执行列式内存布局 + SIMD 加速,宽表聚合性能 5~10x
Pipeline 引擎多核并行 + 线程数限制,避免爆炸

FE 高可用​

生产环境部署多个 FE 节点,角色类型如下:

角色职责是否参与选举
Master元数据读写操作,同步到 Follower/Observer是
Follower读取元数据,Master 故障时参与选举是
Observer读取元数据,仅扩展查询并发能力否

元数据变更需多数派节点确认,保证一致性。

架构特点​

  • 简洁易维护:仅 FE + BE 两类进程
  • 高性能:计算节点直接访问本地存储,网络开销低
  • 高可用:多副本 + 故障自动隔离
  • 水平扩展:FE/BE 均支持在线扩容

存算分离架构​

从 3.0 版本引入,计算层与存储层完全分离,支持独立弹性扩展。

存算分离架构

核心组件​

在存算分离架构中,FE 节点依然保留,承担用户请求接入和查询解析职责。同时新增了 Meta Service 专门负责数据层面的元数据管理。

FE 前端节点​

FE 在存算分离架构中职责不变:

职责说明
用户请求接入兼容 MySQL 协议,支持标准 SQL,认证和权限验证
查询解析与规划词法分析 → 语义分析 → 逻辑计划 → CBO 优化 → 下发执行
SQL 层元数据库表结构、用户权限、集群拓扑

元数据层(Meta Service)​

无状态服务,可水平扩展。

职责说明
数据导入事务版本管理、冲突检测
Tablet 元数据数据版本、文件列表
Rowset 元数据增量数据信息,用于恢复和垃圾回收
集群资源计算组资源分配和调度

计算层(Compute Layer)​

由多个 计算组(Compute Cluster) 组成,每个计算组包含多个无状态 BE 节点。计算组之间共享同一份数据,但拥有独立的计算资源。

特性说明
资源独立各计算组独立服务不同业务
无状态 BE不持久存储,只缓存热点数据
弹性扩缩容节点增减不影响其他计算组
本地缓存LRU 策略缓存热点数据,降低访问延迟

共享存储层(Storage Layer)​

持久化所有数据文件,包括 Segment 文件和倒排索引文件。

支持类型示例
对象存储S3、OSS、COS、OBS、MinIO
分布式文件系统HDFS
CephRGW、CephFS

架构特点​

  • 弹性计算:资源按需扩展,适合波峰波谷业务
  • 工作负载隔离:不同业务团队共享数据但计算资源独立
  • 低存储成本:可使用对象存储等低成本方案
  • 分钟级扩缩容:计算资源快速调整

选型对比​

组件功能对比​

两种架构在组件职责上存在以下差异:

对比项存算一体存算分离
FE 节点保留,存储所有元数据保留,仅存储 SQL 层元数据
BE 节点有状态(存储数据)无状态(仅缓存热点数据)
数据存储位置BE 本地磁盘共享存储层,BE 本地磁盘做缓存
扩缩容重点存储 + 计算同步扩缩可独立扩缩计算或存储
存储成本较高(SSD)较低(对象存储)
运维复杂度较低较高(依赖外部存储)
查询延迟更低(本地 I/O)略高(未命中缓存时)。命中缓存情况下,延迟和存算分离一致。

选型建议​

根据实际场景选择对应架构:

场景存算一体存算分离
开发测试环境,快速体验✓
缺乏共享存储条件(HDFS/Ceph/对象存储)✓
无专职 DBA,多团队独立维护✓
无需弹性扩缩容、Kubernetes 容器化✓
已有公有云部署✓
有可靠共享存储系统✓
需要 Kubernetes 容器化或私有云弹性✓
多计算组共享数据场景✓
有专职平台团队维护✓

核心技术模块​

存储引擎​

列式存储与压缩

数据按列组织,仅读取查询涉及的列,减少 I/O。配合字典编码、位图压缩、RLE 等算法,实现高压缩率。

索引结构

索引类型适用场景
排序复合键(最多 3 列)高并发报表裁剪
Min/Max数值类型等值/范围过滤
BloomFilter高基数列等值过滤
倒排索引任意字段快速搜索、全文检索

数据模型

模型特性适用场景
明细模型(Duplicate)保留明细数据事实表明细存储
主键模型(Primary Key)主键唯一,相同主键覆盖行级更新
聚合模型(Aggregate)相同主键自动聚合预聚合加速

查询引擎​

MPP 分布式查询

复杂查询分解为多阶段,在多个 BE 节点并行处理。支持分布式 Shuffle Join,高效处理大表关联。

向量化执行

列式内存布局 + SIMD 指令,宽表聚合性能 5~10x 提升。

Pipeline 执行引擎

多核并行 + 线程数限制,避免线程爆炸。减少算子间数据拷贝和内存分配开销。

查询优化器

优化器策略
RBO常量折叠、子查询改写、谓词下推
CBO成本评估、Join 重排序
HBO历史查询加速重复查询

Runtime Filter

运行时动态生成 Filter,下推到扫描节点,减少待处理数据量。支持 In/Min/Max/BloomFilter 类型。

高可用机制​

多副本与 Quorum 协议

  • 默认 3 副本存储
  • 写入需多数派(如 2 副本)确认成功
  • 部分节点故障不丢数据,集群仍可服务

故障自动隔离

  1. 检测节点心跳超时或副本损坏
  2. 标记节点不可用,停止分发任务
  3. 从健康副本自动补齐缺失副本
  4. 恢复后自动同步增量数据

FE 高可用

Paxos 类共识协议保证元数据一致性。Master 故障时 Follower 自动选举新 Master,对用户透明。


常见问题​

Q: 存算一体和存算分离架构的核心区别是什么?​

存算一体架构中,BE 节点同时负责数据存储和计算,数据存储在本地磁盘;存算分离架构中,数据存储在共享存储层(如 S3、HDFS),BE 节点仅作为无状态计算节点,通过本地缓存加速查询。存算分离支持计算资源和存储资源独立弹性扩缩。

Q: 什么时候应该选择存算分离架构?​

存算分离适用于以下场景:已有公有云部署、需要 Kubernetes 容器化、有可靠共享存储系统(HDFS/Ceph/对象存储)、需要多计算组共享数据、有专职平台团队维护。对于简单使用或开发测试环境,存算一体更为合适。

Q: 存算分离架构中 BE 节点是否存储数据?​

存算分离架构中,BE 节点是无状态的,不持久存储数据本身。但 BE 节点会使用本地 SSD 缓存热点数据(采用 LRU 淘汰策略),以克服对象存储随机读性能较差和网络传输开销带来的延迟问题。

Q: FE 在存算分离架构中的角色是什么?​

FE 在存算分离架构中依然保留,主要负责用户请求接入、SQL 解析与规划、SQL 层元数据管理(库表结构、用户权限、集群拓扑)。数据层面的元数据管理(如 Tablet 元数据、Rowset 元数据)由新增的 Meta Service 承担。

Q: Doris 的高可用是如何实现的?​

Doris 通过多副本 + Quorum 协议实现高可用:每个 Tablet 默认 3 副本,写入需多数派确认。部分节点故障时自动隔离并从健康副本补数据。FE 通过 Paxos 类共识协议保证元数据一致性,Master 故障时自动选举新 Master。

Q: 存算分离架构中 Meta Service 的作用是什么?​

Meta Service 是存算分离架构中专门负责数据层面元数据管理的无状态服务,职责包括:数据导入事务处理(版本管理、冲突检测)、Tablet/Rowset 元数据管理、计算组资源分配和调度。由于是无状态服务,可水平扩展以提升元数据处理能力。


总结​

Apache Doris 提供两种架构以适应不同需求:

架构适用场景
存算一体性能优先、运维资源有限、规模可控
存算分离云原生、弹性伸缩、多团队共享数据

两种架构均提供完整高可用机制,确保数据可靠性和服务稳定性。