Crimson 代码架构文档

Crimson 代码架构文档

目录

  1. 概述
  2. 核心设计理念
  3. 目录结构
  4. 主要模块
  5. 关键组件
  6. 数据流
  7. 依赖关系

概述

Crimson 是 Ceph 的下一代 OSD 实现,基于 Seastar 异步框架构建。它采用事件驱动、无锁编程模型,旨在提供更高的性能和更好的可扩展性。

主要特点

  • 基于 Seastar: 使用 Seastar 异步框架实现高性能 I/O
  • 无锁设计: 采用单线程、事件驱动的架构
  • 模块化: 清晰的模块划分,便于维护和扩展
  • 类型安全: 使用现代 C++ 特性,提供类型安全的异步操作

核心设计理念

1. 异步编程模型

  • 使用 seastar::futureseastar::promise 进行异步操作
  • 使用 crimson::interruptible_future 支持可中断的异步操作
  • 使用 crimson::errorator 处理错误类型

2. 单线程架构

  • 每个 CPU 核心运行一个 Seastar 线程
  • 通过消息传递进行跨核心通信
  • 避免锁竞争,提高性能

3. 存储抽象

  • FuturizedStore: 存储接口的异步版本
  • Seastore: 基于 Seastar 的新存储后端
  • AlienStore: 兼容传统 BlueStore 的适配器

目录结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
crimson/
├── admin/ # 管理接口
│ ├── admin_socket.h/cc
│ ├── osd_admin.h/cc
│ └── pg_commands.h/cc

├── auth/ # 认证模块
│ ├── AuthClient.h
│ ├── AuthServer.h
│ ├── DummyAuth.h
│ └── KeyRing.h/cc

├── common/ # 通用工具和基础设施
│ ├── errorator.h # 错误处理
│ ├── interruptible_future.h # 可中断的 future
│ ├── coroutine.h # 协程支持
│ ├── operation.h/cc # 操作抽象
│ ├── throttle.h/cc # 限流器
│ ├── log.h/cc # 日志系统
│ └── ...

├── crush/ # CRUSH 算法
│ └── CrushLocation.h/cc

├── mgr/ # Manager 客户端
│ └── client.h/cc

├── mon/ # Monitor 客户端
│ └── MonClient.h/cc

├── net/ # 网络层
│ ├── Messenger.h/cc # 消息传递
│ ├── Socket.h/cc # Socket 抽象
│ ├── ProtocolV2.h/cc # 协议实现
│ └── ...

├── os/ # 对象存储层
│ ├── futurized_store.h/cc # 存储接口
│ ├── seastore/ # Seastore 存储后端
│ │ ├── seastore.h/cc
│ │ ├── transaction_manager.h/cc
│ │ ├── cache.h/cc
│ │ ├── journal.h/cc
│ │ ├── lba_manager.h/cc
│ │ ├── onode_manager.h
│ │ ├── omap_manager.h/cc
│ │ ├── collection_manager.h/cc
│ │ └── ...
│ ├── cyanstore/ # CyanStore (测试用)
│ └── alienstore/ # AlienStore (BlueStore 适配器)

├── osd/ # OSD 核心模块
│ ├── osd.h/cc # OSD 主类
│ ├── pg.h/cc # Placement Group
│ ├── pg_map.h/cc # PG 映射管理
│ ├── shard_services.h/cc # Shard 服务
│ ├── pg_backend.h/cc # PG 后端
│ ├── recovery_backend.h/cc # 恢复后端
│ ├── ops_executer.h/cc # 操作执行器
│ ├── osd_operations/ # OSD 操作
│ │ ├── client_request.h/cc
│ │ ├── peering_event.h/cc
│ │ ├── replicated_request.h/cc
│ │ └── ...
│ ├── scheduler/ # 调度器
│ │ ├── scheduler.h/cc
│ │ └── mclock_scheduler.h/cc
│ ├── scrub/ # Scrub 功能
│ │ ├── pg_scrubber.h/cc
│ │ ├── scrub_machine.h/cc
│ │ └── scrub_validator.h/cc
│ └── ...

└── tools/ # 工具程序
├── store_nbd/ # NBD 工具
├── store_bench/ # 性能测试工具
└── objectstore/ # 对象存储工具

主要模块

1. OSD 模块 (crimson/osd/)

1.1 OSD 主类 (osd.h/cc)

  • 职责: OSD 进程的主入口和生命周期管理
  • 关键组件:
    • cluster_msgr: 集群内部通信
    • public_msgr: 客户端/监控通信
    • hb_front_msgr / hb_back_msgr: 心跳消息
    • monc: Monitor 客户端
    • mgrc: Manager 客户端
    • store: 存储后端

1.2 Placement Group (pg.h/cc)

  • 职责: 管理单个 PG 的状态和操作
  • 关键功能:
    • PG 状态机管理
    • 客户端请求处理
    • Peering 和恢复
    • Scrub 操作
    • 快照管理

1.3 Shard Services (shard_services.h/cc)

  • 职责: 为每个 shard 提供服务接口
  • 功能:
    • OSDMap 管理
    • PG 创建和删除
    • 消息分发

1.4 OSD Operations (osd_operations/)

各种 OSD 操作的实现:

  • client_request: 客户端请求处理
  • peering_event: Peering 事件处理
  • replicated_request: 副本请求处理
  • background_recovery: 后台恢复
  • scrub_events: Scrub 事件

2. 存储层 (crimson/os/)

2.1 FuturizedStore (futurized_store.h/cc)

  • 职责: 存储接口的异步抽象
  • 接口:
    • create(): 创建集合
    • open(): 打开集合
    • read() / write(): 异步读写
    • omap_*(): OMap 操作

2.2 Seastore (os/seastore/)

基于 Seastar 的新存储后端:

核心组件:

  • TransactionManager (transaction_manager.h/cc): 事务管理器

    • 提供事务接口
    • 管理缓存和日志
    • 处理事务提交和回滚
  • Cache (cache.h/cc): 缓存管理

    • 管理内存中的 extent
    • LRU 淘汰策略
    • 脏页管理
  • Journal (journal.h/cc): 日志系统

    • 写前日志 (WAL)
    • 日志回放
    • 日志清理
  • LBAManager (lba_manager.h/cc): 逻辑块地址管理

    • 逻辑地址到物理地址映射
    • B-tree 索引
  • OnodeManager (onode_manager.h): 对象节点管理

    • 对象元数据管理
    • 对象树结构
  • OMapManager (omap_manager.h/cc): OMap 管理

    • 对象扩展属性
    • 键值对存储
  • CollectionManager (collection_manager.h/cc): 集合管理

    • PG 集合管理
    • 集合元数据

2.3 AlienStore (os/alienstore/)

  • 职责: 兼容传统 BlueStore 的适配器
  • 功能: 在 Seastar 环境中运行 BlueStore

2.4 CyanStore (os/cyanstore/)

  • 职责: 内存存储后端(主要用于测试)

3. 网络层 (crimson/net/)

3.1 Messenger (Messenger.h/cc)

  • 职责: 消息传递抽象
  • 功能:
    • 连接管理
    • 消息发送和接收
    • 协议处理

3.2 Socket (Socket.h/cc)

  • 职责: Socket 抽象
  • 实现: 基于 Seastar 的异步 Socket

3.3 ProtocolV2 (ProtocolV2.h/cc)

  • 职责: Ceph 协议 V2 实现
  • 功能: 消息序列化、压缩、加密

4. 通用模块 (crimson/common/)

4.1 Errorator (errorator.h)

  • 职责: 类型安全的错误处理
  • 特点: 编译时错误类型检查

4.2 InterruptibleFuture (interruptible_future.h)

  • 职责: 可中断的异步操作
  • 用途: 支持操作取消和中断

4.3 Operation (operation.h/cc)

  • 职责: 操作抽象基类
  • 功能: 操作跟踪、阻塞管理

4.4 Throttle (throttle.h/cc)

  • 职责: 限流器
  • 用途: 控制并发操作数量

4.5 Log (log.h/cc)

  • 职责: 日志系统
  • 特点: 集成 Seastar 日志后端

5. 调度器 (crimson/osd/scheduler/)

5.1 Scheduler (scheduler.h/cc)

  • 职责: 操作调度抽象
  • 功能: 优先级调度、限流

5.2 MClockScheduler (mclock_scheduler.h/cc)

  • 职责: MClock 调度算法实现
  • 特点: 支持 QoS、公平性保证

关键组件

1. OSD 启动流程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
main() (main.cc)

初始化 Seastar 应用

创建 OSD 实例 (OSD::create())

初始化 Messenger (cluster_msgr, public_msgr)

连接 Monitor (monc->start())

加载 OSDMap

初始化存储后端 (store->mount())

启动 PG 管理 (pg_map)

开始服务

2. 客户端请求处理流程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
客户端请求到达 (public_msgr)

OSD::ms_dispatch()

根据消息类型分发

ClientRequest 操作

PG::handle_op()

OpsExecuter::execute_op()

PGBackend::submit_transaction()

Store::queue_transaction()

返回响应

3. Peering 流程

1
2
3
4
5
6
7
8
9
10
11
收到 Peering 事件

PeeringEvent 操作

PG::handle_peering_event()

PeeringState 状态机

根据状态执行相应操作

更新 PG 状态

4. 恢复流程

1
2
3
4
5
6
7
8
9
10
11
12
13
触发恢复

BackgroundRecovery 操作

PGRecovery::start_recovery_ops()

RecoveryBackend::start_recovery_ops()

ReplicatedRecoveryBackend::recover_object()

从其他 OSD 拉取对象

写入本地存储

5. Seastore 事务流程

1
2
3
4
5
6
7
8
9
10
11
12
13
创建事务 (TransactionManager::create_transaction())

读取/修改 extents

提交事务 (TransactionManager::submit_transaction())

写入 Journal

更新 LBA 映射

更新 Cache

异步刷新到设备

数据流

写操作数据流

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
客户端

Public Messenger

OSD::ms_dispatch()

ClientRequest

PG::handle_op()

OpsExecuter::execute_op()

PGBackend::submit_transaction()

Seastore::queue_transaction()

TransactionManager::submit_transaction()

Journal::submit_record()

设备写入

读操作数据流

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
客户端

Public Messenger

OSD::ms_dispatch()

ClientRequest

PG::handle_op()

OpsExecuter::execute_op()

Seastore::read()

TransactionManager::read_extent()

Cache::get_extent()

设备读取 (如需要)

返回数据

依赖关系

核心依赖

  • Seastar: 异步框架
  • Boost: C++ 库支持
  • Ceph Common: Ceph 通用库

模块依赖关系

1
2
3
4
5
6
7
8
9
10
11
12
13
crimson-osd
├── crimson-admin
├── crimson-os
│ ├── crimson-seastore
│ ├── crimson-cyanstore
│ └── crimson-alienstore (可选)
├── crimson
│ ├── crimson-common
│ ├── crimson-auth
│ ├── crimson-mon
│ ├── crimson-mgr
│ └── crimson-net
└── crimson-common

编译配置

  • WITH_CRIMSON=1: 启用 Crimson 支持
  • WITH_BLUESTORE: 启用 BlueStore 支持(AlienStore)
  • WITH_TESTS: 启用测试支持

关键设计模式

1. Future/Promise 模式

  • 所有异步操作返回 seastar::future
  • 使用 co_await.then() 处理异步结果

2. 操作模式 (Operation Pattern)

  • 所有操作继承自 Operation
  • 支持操作跟踪、阻塞、取消

3. 状态机模式

  • PG 使用状态机管理状态转换
  • PeeringState 处理 PG 状态

4. 策略模式

  • PGBackend 抽象,支持 ReplicatedBackend 和 ECBackend
  • Scheduler 抽象,支持不同调度算法

5. 适配器模式

  • AlienStore 适配 BlueStore
  • FuturizedStore 适配传统存储接口

性能优化

1. 零拷贝

  • 使用 Seastar 的零拷贝网络栈
  • 减少内存拷贝开销

2. 批处理

  • 批量提交事务
  • 合并小 I/O

3. 预取

  • 智能预取策略
  • 减少 I/O 等待

4. 缓存

  • 多级缓存
  • LRU 淘汰策略

测试

测试目录结构

1
2
3
4
5
6
7
test/crimson/
├── test_*.cc # 单元测试
├── seastore/ # Seastore 测试
│ ├── test_seastore.cc
│ ├── test_transaction_manager.cc
│ └── ...
└── gtest_seastar.h/cc # GoogleTest + Seastar 集成

测试框架

  • GoogleTest: 单元测试框架
  • Seastar Test: Seastar 测试支持
  • CBT: 性能测试工具

扩展点

1. 存储后端

  • 实现 FuturizedStore 接口
  • 支持新的存储引擎

2. 调度器

  • 实现 Scheduler 接口
  • 支持新的调度算法

3. 网络协议

  • 扩展 Messenger 实现
  • 支持新协议版本

参考资料


版本信息

  • 文档生成时间: 2024
  • 基于代码库: devCephMain
  • Crimson 版本: 基于当前代码库

维护者

本文档应随代码更新而更新。主要更新点:

  • 新增模块时更新目录结构
  • 架构变更时更新设计说明
  • API 变更时更新接口文档

文章互动

阅读 --

留言

0 条留言

正在加载留言…