Crimson 代码架构文档
目录
概述
Crimson 是 Ceph 的下一代 OSD 实现,基于 Seastar 异步框架构建。它采用事件驱动、无锁编程模型,旨在提供更高的性能和更好的可扩展性。
主要特点
- 基于 Seastar: 使用 Seastar 异步框架实现高性能 I/O
- 无锁设计: 采用单线程、事件驱动的架构
- 模块化: 清晰的模块划分,便于维护和扩展
- 类型安全: 使用现代 C++ 特性,提供类型安全的异步操作
核心设计理念
1. 异步编程模型
- 使用
seastar::future和seastar::promise进行异步操作 - 使用
crimson::interruptible_future支持可中断的异步操作 - 使用
crimson::errorator处理错误类型
2. 单线程架构
- 每个 CPU 核心运行一个 Seastar 线程
- 通过消息传递进行跨核心通信
- 避免锁竞争,提高性能
3. 存储抽象
FuturizedStore: 存储接口的异步版本Seastore: 基于 Seastar 的新存储后端AlienStore: 兼容传统 BlueStore 的适配器
目录结构
1 | crimson/ |
主要模块
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 | main() (main.cc) |
2. 客户端请求处理流程
1 | 客户端请求到达 (public_msgr) |
3. Peering 流程
1 | 收到 Peering 事件 |
4. 恢复流程
1 | 触发恢复 |
5. Seastore 事务流程
1 | 创建事务 (TransactionManager::create_transaction()) |
数据流
写操作数据流
1 | 客户端 |
读操作数据流
1 | 客户端 |
依赖关系
核心依赖
- Seastar: 异步框架
- Boost: C++ 库支持
- Ceph Common: Ceph 通用库
模块依赖关系
1 | crimson-osd |
编译配置
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 | test/crimson/ |
测试框架
- GoogleTest: 单元测试框架
- Seastar Test: Seastar 测试支持
- CBT: 性能测试工具
扩展点
1. 存储后端
- 实现
FuturizedStore接口 - 支持新的存储引擎
2. 调度器
- 实现
Scheduler接口 - 支持新的调度算法
3. 网络协议
- 扩展
Messenger实现 - 支持新协议版本
参考资料
版本信息
- 文档生成时间: 2024
- 基于代码库: devCephMain
- Crimson 版本: 基于当前代码库
维护者
本文档应随代码更新而更新。主要更新点:
- 新增模块时更新目录结构
- 架构变更时更新设计说明
- API 变更时更新接口文档
正在加载留言…