Doris存算分离架构详解
请详细介绍Doris存算分离架构的设计原理。Compute-Storage Separation架构下,FE/BE的角色有何变化?数据如何分层存储?存算分离相比存算一体有哪些优势和劣势?如何部署和配置Doris存算分离?
回答
屠龙少年
1. 架构设计
Doris存算分离(3.0+)的核心思想:计算与存储解耦
存算分离架构:
┌─────────────┐ ┌─────────────┐
│ FE集群 │ │ BE集群 │
│ (元数据管理) │ │ (计算节点) │
└─────────────┘ └──────┬──────┘
│
┌──────┴──────┐
│ 共享存储 │
│ (S3/HDFS) │
└─────────────┘
角色变化:
- FE:元数据管理 + 查询协调(无变化)
- BE:
- 不再存储本地数据
- 变为无状态计算节点
- 从共享存储实时读取数据
- 本地仅缓存热数据
2. 数据分层
| 层级 | 存储介质 | 内容 |
|---|---|---|
| 热缓存 | Local SSD/BE内存 | 高频访问的数据 |
| 温数据 | S3标准存储 | 近期写入数据 |
| 冷数据 | S3 Glacier/Deep Archive | 过期历史数据 |
3. 优势
- 弹性扩缩容:BE可快速增减,无需数据重分布
- 存储成本低:共享存储利用率高(S3 ≈ 1/10 SSD成本)
- 计算与存储独立扩缩:
- 计算密集场景:增加BE节点
- 存储密集场景:扩展S3容量
- 故障恢复快:BE宕机后新节点直接挂载共享存储
4. 劣势
- 网络延迟:计算节点需要网络读取数据
- 本地缓存管理复杂:需精确的Cache淘汰策略
- 写入延迟略高:数据需先写入共享存储
- 依赖对象存储:S3兼容性影响性能
5. 配置示例
-- 创建存算分离集群
CREATE STORAGE VAULT s3_vault
PROPERTIES (
"type" = "S3",
"s3.endpoint" = "s3.amazonaws.com",
"s3.region" = "us-east-1",
"s3.bucket" = "doris-data",
"s3.root.path" = "data/"
);
-- BE配置
be.conf:
enable_file_cache = true
file_cache_path = /mnt/ssd/doris_cache