来源书籍
Ceph源码分析
源码分享类
类别清单覆盖
8/8
已覆盖 8
补充生成 0
未覆盖 0
全书概览
Ceph源码分析
- Skill 版本:v1
- 类别:源码分享类
- 评级:工程实践(第二级别,高浓度 + 低稳定性)
评级理由
- 高浓度:全书围绕 Ceph(基于 10.2.1/Jewel 版本)的核心模块逐个展开——通用基础设施 (Object/Buffer/线程池/Finisher/Throttle)、网络通信框架、CRUSH 数据分布算法、客户端 IO 路径、OSD 读写流程、本地对象存储引擎、纠删码、快照克隆、Peering 状态机、数据修复、 一致性检查(Scrub)、自动分层存储,每一章都深入到核心数据结构的设计动机和关键流程的 实现细节(如 CRUSH 算法为何要做层级化的 Cluster Map、EC 与副本策略的权衡、Peering 状态机 为何要用 statechart 建模),不是停留在操作步骤层面。
- 低稳定性:内容强绑定 Ceph 10.2.1(2016 年 Jewel 版本)某一时间点的具体代码实现——
精确到函数名(如
OSD::ms_fast_dispatch、PG::queue_op)、类结构和调用顺序。Ceph 在 此后经历了本地存储引擎从 FileStore 到 BlueStore 的整体替换、消息协议 msgr v1 到 v2 的 演进、Peering/Recovery 逻辑的多次重构,书中大量函数级细节已经过时,只有其揭示的设计 动机和权衡具有迁移价值。 - 结论:高浓度 + 低稳定性 → 工程实践。
章节进度追踪表
| 章节号 | 章节标题 | 精读/略读 | 状态 | 卡片数 |
|---|---|---|---|---|
| 序言/前言 | 序言、前言 | 略读 | done | 0 |
| 第1章 | Ceph整体架构 | 精读 | done | 13 |
| 第2章 | Ceph通用模块 | 精读 | done | 8 |
| 第3章 | Ceph网络通信 | 精读 | done | 6 |
| 第4章 | CRUSH数据分布算法 | 精读 | done | 7 |
| 第5章 | Ceph客户端 | 精读 | done | 7 |
| 第6章 | Ceph的数据读写 | 精读 | done | 8 |
| 第7章 | 本地对象存储 | 精读 | done | 13 |
| 第8章 | Ceph纠删码 | 精读 | done | 7 |
| 第9章 | Ceph快照和克隆 | 精读 | done | 8 |
| 第10章 | Ceph Peering机制 | 精读 | done | 13 |
| 第11章 | Ceph数据修复 | 精读 | done | 6 |
| 第12章 | Ceph一致性检查 | 精读 | done | 8 |
| 第13章 | Ceph自动分层存储 | 精读 | done | 8 |
章节文件范围对照(供续跑参考,_epub-src/OEBPS/ 下)
- 序言 text00002 / 前言 text00003
- 第1章 text00004–text00025
- 第2章 text00026–text00041
- 第3章 text00042–text00058
- 第4章 text00059–text00069
- 第5章 text00070–text00093
- 第6章 text00094–text00113
- 第7章 text00114–text00139
- 第8章 text00140–text00154
- 第9章 text00155–text00169
- 第10章 text00170–text00195
- 第11章 text00196–text00206
- 第12章 text00207–text00220
- 第13章 text00221–text00231
类别清单核对(源码分享类)
| 维度 | 覆盖状态 | 关联卡片标题或未覆盖理由 |
|---|---|---|
| 整体架构分层:模块划分、核心流程入口 | 已覆盖 | RADOS三层架构、Librados三层职责划分、OSD到PGBackend的分层职责设计、Message与Messenger的四层职责分离 |
| 核心数据结构设计:关键内部数据结构,为什么这样设计 | 已覆盖 | Object标识符的四层继承设计、Buffer三层抽象分离内存所有权与视图、pool的size字段承载两种冗余语义、三个版本指针共同刻画数据修复进度、SnapContext/SnapSet 相关卡片等 |
| 关键算法/流程实现:核心业务流程的具体实现步骤与关键判断点 | 已覆盖 | 四种Bucket选择算法的复杂度权衡、写操作三阶段流水线设计、快照写操作用seq比较驱动的COW规则、Backfill用多路归并指针对比全量对象列表、Scrub按对象哈希边界分块扫描 |
| 并发/线程安全处理:多线程/并发场景下如何保证正确性 | 已覆盖 | 线程池与工作队列的解耦设计、ShardedThreadPool用任务归属线程消解锁竞争、Throttle的阻塞与非阻塞两种限流语义、OpSequencer把并发操作收窄到PG粒度的顺序队列、ObjectContext记录跨对象操作依赖 |
| 扩展点与插件机制:源码中预留的可扩展接口设计 | 已覆盖 | Cls把自定义逻辑下沉到OSD端执行、四种本地存储引擎的取舍(FileStoreBackend 按文件系统扩展) |
| 性能优化手段:源码中体现的具体性能优化技巧 | 已覆盖 | 批量合并写入提升日志提交性能、快照对象修复靠clone_overlap避免全量拷贝、随机化触发避免deep_scrub扎堆、HitSet三种实现在内存与查找效率间的取舍 |
| 异常/边界情况处理:错误处理、边界条件、资源释放 | 已覆盖 | 网络错误处理的关闭重连与消息重发、EC回滚机制应对全局断电导致的部分写、up_thru解决先后宕机与同时宕机的歧义、AsyncReserver用优先级队列限制并发修复规模 |
| 版本演化/设计取舍历史:为什么某个设计经历过重大重构 | 已覆盖 | 日志方式的双写代价催生BlueStore、四种本地存储引擎的取舍、三种网络实现的稳定性与性能权衡 |
实践卡进度
| 序号 | 实践标题 | 实践方式 | 状态 | 关联章节 | 产出 |
|---|---|---|---|---|---|
| 1 | 核对BlueStore是否延续解决双写代价 | 实现深读 | done | 第7章 | FileStore→BlueStore 写路径对照表 |
| 2 | 核验三种网络实现是否已被msgr2取代 | 证据验证 | done | 第3章 | 书中结论 vs 当前状态对照表 |
| 3 | 横向比较Ceph纠删码库与工业界EC参数选择 | 横向学习 | done | 第8章 | 纠删码方案对照表 |
待关联术语
| 术语名 | 出现章节 | 一句话语境 |
|---|---|---|
| Infiniband | 第3章 | XIO 网络实现方式可以支持 Infiniband 网络,区别于 Simple/Async 只支持 TCP/IP,未展开原理 |
引用文献
| 标题 | 类型 | 出现章节 | 一句话语境 |
|---|---|---|---|
| accelio | 框架/源码项目 | 第3章 | XIO 网络实现依赖的第三方开源通信库,书中仅提及需要熟悉其使用方式和代码实现,未展开介绍 |
| Jerasure | 框架/源码项目 | 第8章 | Ceph 默认使用的开源纠删码实现库,实现了 RS 编码,书中未展开其内部算法实现 |
| ISA(Intel ISA-L) | 框架/源码项目 | 第8章 | Intel 提供的纠删码加速库,利用 Intel 处理器本地指令加速 EC 计算,仅一笔带过 |
| Google GFS II / Facebook HDFS RAID / 微软Azure | 框架/源码项目 | 第8章 | 书中仅提及三者分别采用的 EC 编码参数(RS(6,3)/RS(10,4)/LRC(12,2,2))作为案例,未展开介绍系统本身 |
章节与卡片
01 Ceph整体架构
- RADOS三层架构 普通读书笔记卡
- 三种客户端接口的IO特征差异 普通读书笔记卡
- 对象存储的扁平命名空间 普通读书笔记卡
- pool与PG的抽象关系 普通读书笔记卡
- 对象寻址的两级映射设计 普通读书笔记卡
- 数据均衡由ClusterMap变化触发 普通读书笔记卡
- Peering建立PG级数据一致性窗口 普通读书笔记卡
- Recovery与Backfill的适用场景区别 普通读书笔记卡
- 纠删码的空间效率与应用限制 普通读书笔记卡
- 快照与克隆基于Copy-on-Write的关系 普通读书笔记卡
- CacheTier通过读写路径拦截实现透明分层 普通读书笔记卡
- RADOS对象的三段式结构 普通读书笔记卡
- Monitor靠Paxos维护ClusterMap一致性 普通读书笔记卡
02 Ceph通用模块
- Object标识符的四层继承设计 普通读书笔记卡
- Buffer三层抽象分离内存所有权与视图 普通读书笔记卡
- 线程池与工作队列的解耦设计 普通读书笔记卡
- ShardedThreadPool用任务归属线程消解锁竞争 普通读书笔记卡
- 心跳超时与自杀机制防止线程假死拖垮集群 普通读书笔记卡
- Throttle的阻塞与非阻塞两种限流语义 普通读书笔记卡
- SafeTimer用双重索引实现高效取消 普通读书笔记卡
- Finisher解耦异步完成通知与调用线程 普通读书笔记卡
03 Ceph网络通信
- 三种网络实现的稳定性与性能权衡 普通读书笔记卡
- Message与Messenger的四层职责分离 普通读书笔记卡
- Simple模式的每连接双线程模型 普通读书笔记卡
- fast_dispatch与dispatch的性能分级设计 普通读书笔记卡
- 网络错误处理的关闭重连与消息重发 普通读书笔记卡
- Policy把连接策略下沉为配置对象 普通读书笔记卡
04 CRUSH数据分布算法
- 数据分布算法的两种流派 普通读书笔记卡
- 层级化ClusterMap实现机架感知 普通读书笔记卡
- Placement Rules用take-choose-emit描述副本分布规则 普通读书笔记卡
- 四种Bucket选择算法的复杂度权衡 普通读书笔记卡
- 哈希冲突靠递增副本序号重算解决 普通读书笔记卡
- 用数组下标而非指针引用子bucket 普通读书笔记卡
- CRUSH的优点与代价 普通读书笔记卡
05 Ceph客户端
- Librados三层职责划分 普通读书笔记卡
- op_target分离原始身份与实际路由目标 普通读书笔记卡
- Striper条带化切分大文件到多个对象 普通读书笔记卡
- Cls把自定义逻辑下沉到OSD端执行 普通读书笔记卡
- RBD用多个专职对象拆分标识与数据 普通读书笔记卡
- RBD克隆靠CopyUp延迟复制父镜像数据 普通读书笔记卡
- ObjectMap用位图加速稀疏卷的存在性判断 普通读书笔记卡
06 Ceph的数据读写
- OSD到PGBackend的分层职责设计 普通读书笔记卡
- pool的size字段承载两种冗余语义 普通读书笔记卡
- PG分裂只做本地数据搬移 普通读书笔记卡
- ObjectState用exists字段消解元数据来源歧义 普通读书笔记卡
- 写操作三阶段流水线设计 普通读书笔记卡
- 写操作先打包事务再统一执行 普通读书笔记卡
- 双重ACK确保写操作的持久性与一致性 普通读书笔记卡
- ObjectContext记录跨对象操作依赖 普通读书笔记卡
07 本地对象存储
- 四种本地存储引擎的取舍 普通读书笔记卡
- xattr与omap按大小热度分工存储元数据 普通读书笔记卡
- 日志与事务实现磁盘写入的原子性 普通读书笔记卡
- 事务用索引复用压缩重复对象引用 普通读书笔记卡
- 环形日志用多个序号指针管理生命周期 普通读书笔记卡
- 同步写与AIO两种日志落盘方式的取舍 普通读书笔记卡
- writeahead与parallel日志模式依赖文件系统快照能力 普通读书笔记卡
- OpSequencer把并发操作收窄到PG粒度的顺序队列 普通读书笔记卡
- 日志同步靠暂停线程池批量刷盘释放空间 普通读书笔记卡
- omap用header间接层压缩对象属性存储开销 普通读书笔记卡
- omap克隆靠parent指针实现COW属性继承 普通读书笔记卡
- CollectionIndex用哈希分层子目录应对海量小文件 普通读书笔记卡
- 日志方式的双写代价催生BlueStore 普通读书笔记卡
08 Ceph纠删码
- EC三个指标的相互制约 普通读书笔记卡
- RS编码的恢复代价催生LRC与SHEC 普通读书笔记卡
- LRC用全局与局部双层校验降低单块恢复成本 普通读书笔记卡
- SHEC用参数直接控制恢复读取量 普通读书笔记卡
- 副本与三种EC编码的三边权衡矩阵 普通读书笔记卡
- EC不支持随机overwrite的结构性原因 普通读书笔记卡
- EC回滚机制应对全局断电导致的部分写 普通读书笔记卡
09 Ceph快照和克隆
- RADOS对象clone与RBD克隆是两个不同层面的机制 普通读书笔记卡
- RBD多层级克隆的递归读放大与flatten优化 普通读书笔记卡
- 快照写操作用seq比较驱动的COW规则 普通读书笔记卡
- Watcher通知机制让客户端惰性同步快照序号 普通读书笔记卡
- clone_overlap记录增量重叠优化数据恢复 普通读书笔记卡
- 快照删除是延迟删除依赖共享检测 普通读书笔记卡
- 空快照靠定位最近的后继clone对象实现零拷贝读取 普通读书笔记卡
- 秒级快照的本质是把整卷拷贝开销分摊到后续写操作 普通读书笔记卡
10 Ceph Peering机制
- 层级状态机用父子嵌套复用公共事件处理 普通读书笔记卡
- statechart的三种事件响应方式 普通读书笔记卡
- context函数让子状态安全访问祖先状态数据 普通读书笔记卡
- 主OSD由Monitor创建PG从OSD靠Peering隐式创建 普通读书笔记卡
- Stray状态体现PG副本身份的不确定性 普通读书笔记卡
- acting set与up set分离应对新OSD无法立即服务 普通读书笔记卡
- up_thru解决先后宕机与同时宕机的歧义 普通读书笔记卡
- PG日志只记元数据作为修复依据 普通读书笔记卡
- 合并日志按头尾位置关系分三种情况处理 普通读书笔记卡
- 三个版本指针共同刻画数据修复进度 普通读书笔记卡
- past_interval追踪acting与up set的历史稳定区间 普通读书笔记卡
- 按优先级选举权威日志OSD 普通读书笔记卡
- MissingLoc分离缺失对象清单与其位置索引 普通读书笔记卡
11 Ceph数据修复
- AsyncReserver用优先级队列限制并发修复规模 普通读书笔记卡
- 严格先Recovery后Backfill的顺序设计 普通读书笔记卡
- 快照对象修复靠clone_overlap避免全量拷贝 普通读书笔记卡
- 分块修复大对象靠临时空间保证原子可见性 普通读书笔记卡
- Backfill用多路归并指针对比全量对象列表 普通读书笔记卡
- Backfill扫描窗口内仍需追踪并发写操作 普通读书笔记卡
12 Ceph一致性检查
- 端到端校验代价过高促使Ceph选择后台扫描 普通读书笔记卡
- Scrub与deep-scrub的轻重两级检查 普通读书笔记卡
- 软性调度窗口与硬性deadline的双轨调度 普通读书笔记卡
- 随机化触发避免deep_scrub扎堆 普通读书笔记卡
- Scrub按对象哈希边界分块扫描 普通读书笔记卡
- 权威对象靠自带元数据自证选出 普通读书笔记卡
- Scrub只负责发现问题不负责修复 普通读书笔记卡
- Scrub靠snapset链表校验快照家族完整性 普通读书笔记卡
13 Ceph自动分层存储
- 自动分层存储以对象而非块为统计粒度 普通读书笔记卡
- CacheTier五种模式应对缓存未命中的不同取舍 普通读书笔记卡
- HitSet三种实现在内存与查找效率间的取舍 普通读书笔记卡
- 代理读写与promote解耦即时响应与缓存预热 普通读书笔记卡
- evict_effort按热度分位数比例调节剔除力度 普通读书笔记卡
- flush操作维护克隆链的持久化顺序依赖 普通读书笔记卡
相关主题
暂无公开主题。