来源书籍

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_dispatchPG::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整体架构

  1. RADOS三层架构 普通读书笔记卡
  2. 三种客户端接口的IO特征差异 普通读书笔记卡
  3. 对象存储的扁平命名空间 普通读书笔记卡
  4. pool与PG的抽象关系 普通读书笔记卡
  5. 对象寻址的两级映射设计 普通读书笔记卡
  6. 数据均衡由ClusterMap变化触发 普通读书笔记卡
  7. Peering建立PG级数据一致性窗口 普通读书笔记卡
  8. Recovery与Backfill的适用场景区别 普通读书笔记卡
  9. 纠删码的空间效率与应用限制 普通读书笔记卡
  10. 快照与克隆基于Copy-on-Write的关系 普通读书笔记卡
  11. CacheTier通过读写路径拦截实现透明分层 普通读书笔记卡
  12. RADOS对象的三段式结构 普通读书笔记卡
  13. Monitor靠Paxos维护ClusterMap一致性 普通读书笔记卡

02 Ceph通用模块

  1. Object标识符的四层继承设计 普通读书笔记卡
  2. Buffer三层抽象分离内存所有权与视图 普通读书笔记卡
  3. 线程池与工作队列的解耦设计 普通读书笔记卡
  4. ShardedThreadPool用任务归属线程消解锁竞争 普通读书笔记卡
  5. 心跳超时与自杀机制防止线程假死拖垮集群 普通读书笔记卡
  6. Throttle的阻塞与非阻塞两种限流语义 普通读书笔记卡
  7. SafeTimer用双重索引实现高效取消 普通读书笔记卡
  8. Finisher解耦异步完成通知与调用线程 普通读书笔记卡

03 Ceph网络通信

  1. 三种网络实现的稳定性与性能权衡 普通读书笔记卡
  2. Message与Messenger的四层职责分离 普通读书笔记卡
  3. Simple模式的每连接双线程模型 普通读书笔记卡
  4. fast_dispatch与dispatch的性能分级设计 普通读书笔记卡
  5. 网络错误处理的关闭重连与消息重发 普通读书笔记卡
  6. Policy把连接策略下沉为配置对象 普通读书笔记卡

04 CRUSH数据分布算法

  1. 数据分布算法的两种流派 普通读书笔记卡
  2. 层级化ClusterMap实现机架感知 普通读书笔记卡
  3. Placement Rules用take-choose-emit描述副本分布规则 普通读书笔记卡
  4. 四种Bucket选择算法的复杂度权衡 普通读书笔记卡
  5. 哈希冲突靠递增副本序号重算解决 普通读书笔记卡
  6. 用数组下标而非指针引用子bucket 普通读书笔记卡
  7. CRUSH的优点与代价 普通读书笔记卡

05 Ceph客户端

  1. Librados三层职责划分 普通读书笔记卡
  2. op_target分离原始身份与实际路由目标 普通读书笔记卡
  3. Striper条带化切分大文件到多个对象 普通读书笔记卡
  4. Cls把自定义逻辑下沉到OSD端执行 普通读书笔记卡
  5. RBD用多个专职对象拆分标识与数据 普通读书笔记卡
  6. RBD克隆靠CopyUp延迟复制父镜像数据 普通读书笔记卡
  7. ObjectMap用位图加速稀疏卷的存在性判断 普通读书笔记卡

06 Ceph的数据读写

  1. OSD到PGBackend的分层职责设计 普通读书笔记卡
  2. pool的size字段承载两种冗余语义 普通读书笔记卡
  3. PG分裂只做本地数据搬移 普通读书笔记卡
  4. ObjectState用exists字段消解元数据来源歧义 普通读书笔记卡
  5. 写操作三阶段流水线设计 普通读书笔记卡
  6. 写操作先打包事务再统一执行 普通读书笔记卡
  7. 双重ACK确保写操作的持久性与一致性 普通读书笔记卡
  8. ObjectContext记录跨对象操作依赖 普通读书笔记卡

07 本地对象存储

  1. 四种本地存储引擎的取舍 普通读书笔记卡
  2. xattr与omap按大小热度分工存储元数据 普通读书笔记卡
  3. 日志与事务实现磁盘写入的原子性 普通读书笔记卡
  4. 事务用索引复用压缩重复对象引用 普通读书笔记卡
  5. 环形日志用多个序号指针管理生命周期 普通读书笔记卡
  6. 同步写与AIO两种日志落盘方式的取舍 普通读书笔记卡
  7. writeahead与parallel日志模式依赖文件系统快照能力 普通读书笔记卡
  8. OpSequencer把并发操作收窄到PG粒度的顺序队列 普通读书笔记卡
  9. 日志同步靠暂停线程池批量刷盘释放空间 普通读书笔记卡
  10. omap用header间接层压缩对象属性存储开销 普通读书笔记卡
  11. omap克隆靠parent指针实现COW属性继承 普通读书笔记卡
  12. CollectionIndex用哈希分层子目录应对海量小文件 普通读书笔记卡
  13. 日志方式的双写代价催生BlueStore 普通读书笔记卡

08 Ceph纠删码

  1. EC三个指标的相互制约 普通读书笔记卡
  2. RS编码的恢复代价催生LRC与SHEC 普通读书笔记卡
  3. LRC用全局与局部双层校验降低单块恢复成本 普通读书笔记卡
  4. SHEC用参数直接控制恢复读取量 普通读书笔记卡
  5. 副本与三种EC编码的三边权衡矩阵 普通读书笔记卡
  6. EC不支持随机overwrite的结构性原因 普通读书笔记卡
  7. EC回滚机制应对全局断电导致的部分写 普通读书笔记卡

09 Ceph快照和克隆

  1. RADOS对象clone与RBD克隆是两个不同层面的机制 普通读书笔记卡
  2. RBD多层级克隆的递归读放大与flatten优化 普通读书笔记卡
  3. 快照写操作用seq比较驱动的COW规则 普通读书笔记卡
  4. Watcher通知机制让客户端惰性同步快照序号 普通读书笔记卡
  5. clone_overlap记录增量重叠优化数据恢复 普通读书笔记卡
  6. 快照删除是延迟删除依赖共享检测 普通读书笔记卡
  7. 空快照靠定位最近的后继clone对象实现零拷贝读取 普通读书笔记卡
  8. 秒级快照的本质是把整卷拷贝开销分摊到后续写操作 普通读书笔记卡

10 Ceph Peering机制

  1. 层级状态机用父子嵌套复用公共事件处理 普通读书笔记卡
  2. statechart的三种事件响应方式 普通读书笔记卡
  3. context函数让子状态安全访问祖先状态数据 普通读书笔记卡
  4. 主OSD由Monitor创建PG从OSD靠Peering隐式创建 普通读书笔记卡
  5. Stray状态体现PG副本身份的不确定性 普通读书笔记卡
  6. acting set与up set分离应对新OSD无法立即服务 普通读书笔记卡
  7. up_thru解决先后宕机与同时宕机的歧义 普通读书笔记卡
  8. PG日志只记元数据作为修复依据 普通读书笔记卡
  9. 合并日志按头尾位置关系分三种情况处理 普通读书笔记卡
  10. 三个版本指针共同刻画数据修复进度 普通读书笔记卡
  11. past_interval追踪acting与up set的历史稳定区间 普通读书笔记卡
  12. 按优先级选举权威日志OSD 普通读书笔记卡
  13. MissingLoc分离缺失对象清单与其位置索引 普通读书笔记卡

11 Ceph数据修复

  1. AsyncReserver用优先级队列限制并发修复规模 普通读书笔记卡
  2. 严格先Recovery后Backfill的顺序设计 普通读书笔记卡
  3. 快照对象修复靠clone_overlap避免全量拷贝 普通读书笔记卡
  4. 分块修复大对象靠临时空间保证原子可见性 普通读书笔记卡
  5. Backfill用多路归并指针对比全量对象列表 普通读书笔记卡
  6. Backfill扫描窗口内仍需追踪并发写操作 普通读书笔记卡

12 Ceph一致性检查

  1. 端到端校验代价过高促使Ceph选择后台扫描 普通读书笔记卡
  2. Scrub与deep-scrub的轻重两级检查 普通读书笔记卡
  3. 软性调度窗口与硬性deadline的双轨调度 普通读书笔记卡
  4. 随机化触发避免deep_scrub扎堆 普通读书笔记卡
  5. Scrub按对象哈希边界分块扫描 普通读书笔记卡
  6. 权威对象靠自带元数据自证选出 普通读书笔记卡
  7. Scrub只负责发现问题不负责修复 普通读书笔记卡
  8. Scrub靠snapset链表校验快照家族完整性 普通读书笔记卡

13 Ceph自动分层存储

  1. 自动分层存储以对象而非块为统计粒度 普通读书笔记卡
  2. CacheTier五种模式应对缓存未命中的不同取舍 普通读书笔记卡
  3. HitSet三种实现在内存与查找效率间的取舍 普通读书笔记卡
  4. 代理读写与promote解耦即时响应与缓存预热 普通读书笔记卡
  5. evict_effort按热度分位数比例调节剔除力度 普通读书笔记卡
  6. flush操作维护克隆链的持久化顺序依赖 普通读书笔记卡

相关主题

暂无公开主题。