首页>参考读物>计算机科学与技术>计算机网络

Ceph源码分析
作者 : 常涛 编著
丛书名 : 大数据技术丛书
出版日期 : 2016-11-17
ISBN : 978-7-111-55207-9
定价 : 59.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 265
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

本书作者是资深开发人员,有过多年的开发经验,总结了自己使用Ceph的实战经验,本书系统分析Ceph的源代码,为开发分布式系统提供参考。主要内容包括:Ceph 整体架构、ceph 通用模块、Ceph 网络通信模块、Ceph客户端实现、Ceph CRUSH算法、Ceph 底层对象存储机制、Ceph osd、ceph mon等。

图书特色

从源码角度全面解析Ceph的整体框架和各个模块的实现原理
包含作者多年开发经验,掌握分布式存储技术必备参考

这本书是目前我所看到的从代码角度解读Ceph的最好作品,即使在全球范围内,都没有类似的书籍能够与之媲美。相信每个Ceph爱好者都能从这本书中找到自己心中某些疑问的解答途径。
—— 王豪迈 XSKY公司CTO

看到常涛写的这本书很是欣慰,很高兴国内有了一本专业书供相关人员去接触和学习Ceph代码,这有助于增加国内开发者在Ceph社区的代码提交量。另外Ceph中国社区也将计划组织Ceph Hackathon活动,以此来促进Ceph代码的良性循环,取之于Ceph社区,回馈于Ceph社区。我们要让全世界开发者看到中国人不仅仅在OpenStack中贡献大,在Ceph社区中的贡献同样显著。
—— 耿航 Ceph中国社区联合创始人,XSKY公司市场技术专家

本书主要内容包括
Ceph数据读写功能关键流程的实现。
Ceph如何做到数据强一致性,并可大规模部署。
Ceph数据分布式算法CRUSH如何实现只通过计算就可定位数据块。
Ceph如何实现存储的高级功能:如快照、克隆、纠删码、Scrub、Cache Tier等。
Ceph数据修复的实现过程,包括Recovery和Backfill两个过程的具体实现。
Ceph如何实现集群伸缩时的数据迁移和数据均衡。

作者简介
常涛
国内较早一批接触Ceph的先行者,具有多年分布式存储开发经验,曾在雅虎北京研发中心工作,后到京东、华为任职,目前在ZettaKit创业公司从事分布式存储、云计算相关技术研发。

图书前言

随着云计算技术的兴起和普及,云计算基石:分布式共享存储系统受到业界的重视。Ceph以其稳定、高可用、可扩展的特性,乘着开源云计算管理系统OpenStack的东风,迅速成为最热门的开源分布式存储系统。
Ceph作为一个开源的分布式存储系统,人人都可以免费获得其源代码,并能够安装部署,但是并不等于人人都能用起来,人人都能用好。用好一个开源分布式存储系统,首先要对其架构、功能原理等方面有比较好的了解,其次要有修复漏洞的能力。这些都是在采用开源分布式存储系统时所面临的挑战。
要用好Ceph,就必须深入了解和掌握Ceph源代码。Ceph源代码的实现被公认为比较复杂,阅读难度较大。阅读Ceph源代码,不但需要对C++语言以及boost库和STL库非常熟悉,还需要有分布式存储系统相关的基础知识以及对实现原理的深刻理解,最后还需要对Ceph框架和设计原理以及具体的实现细节有很好的把握。所以Ceph源代码的阅读是相当有挑战性的。
本着对Ceph源代码的浓厚兴趣以及实践工作的需要,需要对Ceph在源代码层级有比较深入的了解。当时笔者尽可能地搜索有关Ceph源代码的介绍,发现这方面的资料比较少,笔者只能自己对着Ceph源代码开始了比较艰辛的阅读之旅。在这个过程中,每一个小的进步都来之不易,理解一些实现细节,都需要对源代码进行反复地推敲和琢磨。自己在阅读的过程中,特别希望有人能够帮助理清整体代码的思路,能够解答一下关键的实现细节。本书就是秉承这样一个简单的目标,希望指引和帮助广大Ceph爱好者更好地理解和掌握Ceph源代码。
本书面向热爱Ceph的开发者,想深入了解Ceph原理的高级运维人员,想基于Ceph做优化和定制的开发人员,以及想对社区提交代码的研究人员。官网上有比较详细的介绍Ceph安装部署以及操作相关的知识,希望阅读本书的人能够自己动手实践,对Ceph进一步了解。本书基于目前最新的Ceph 10.2.1版本进行分析。
本书着重介绍Ceph的整体框架和各个实现模块的实现原理,对核心源代码进行分析,包括一些关键的实现细节。存储系统的实现都是围绕数据以及对数据的操作来展开,只要理解核心的数据结构,以及数据结构的相关操作就可以大致了解核心的实现和功能。本书的写作思路是先介绍框架和原理,其次介绍相关的数据结构,最后基于数据结构,介绍相关的操作实现流程。
最后感谢一起工作过的同事们,同他们在Ceph技术上进行交流沟通并加以验证实践,使我受益匪浅。感谢机械工业出版社的编辑吴怡对本书出版所做的努力,以及不断提出的宝贵意见。感谢我的妻子孙盛南女士在我写作期间默默的付出,对本书的写作提供了坚强的后盾。
由于Ceph源代码比较多,也比较复杂,写作的时间比较紧,加上个人的水平有限,错误和疏漏在所难免,恳请读者批评指正。有任何的意见和建议都可发送到我的邮箱changtao381@163.com,欢迎读者与我交流Ceph相关的任何问题。

常涛
2016年6月于北京

上架指导

计算机\网络

封底文字

这本书是目前我所看到的从代码角度解读Ceph的最好作品,即使在全球范围内,都没有类似的书籍能够与之媲美。相信每个Ceph爱好者都能从这本书中找到自己心中某些疑问的解答途径。
——王豪迈,XSKY公司CTO

看到常涛写的这本《Ceph源码分析》很是欣慰。很高兴国内有了一本专业书供相关人员去接触和学习Ceph代码,从而有助于增加国内人对Ceph社区的代码提交量。另外Ceph中国社区也将计划组织Ceph Hackathon活动,以此来促进Ceph代码的良性循环,取之于Ceph社区,回馈于Ceph社区。要让全世界的人看到中国人不仅仅在OpenStack中贡献大,在Ceph社区中的贡献同样显著。
——耿航,Ceph中国社区联合创始人,XSKY公司市场技术专家
主要内容包括:
Ceph数据读写功能关键流程的实现。
Ceph如何做到数据强一致性,并可大规模部署。
Ceph数据分布式算法CRUSH如何实现只通过计算就可定位数据块。
Ceph如何实现存储的高级功能:如快照、克隆、纠删码、Scrub、Cache Tier等。
Ceph数据修复的实现过程,包括Recovery和Backfill两个过程的具体实现。
Ceph如何实现集群伸缩时的数据迁移和数据均衡。

图书序言

自从2013年加入Ceph社区以来,我一直想写一本分析Ceph源码的书,但是两年多来提交了数万行的代码后,我渐渐放下了这个事情。Ceph每个月、每周都会发生巨大变化,我总是想让Ceph源码爱好者看到最新最棒的设计和实现,社区一线的模块维护和每周数十个代码提交集的阅读,让我很难有时间回顾和把握其他Ceph爱好者的疑问和需求点。
今天看到这本书让我非常意外,作者常涛把整个Ceph源码树肢解得恰到好处,如庖丁解牛般将Ceph的核心思想和实现展露出来。虽然目前Ceph分分钟都有新的变化,但无论是新的模块设计,还是重构已有逻辑,都是已有思想的翻新和延续,这些才是众多Ceph开发者能十年如一日改进的秘密!
我跟作者常涛虽然只有一面之缘,但是在开源社区中的交流已经足够成为彼此的相知。他对于分布式存储的设计和实现都有独到见解,其代码阅读和理解灵感更是超群。我在年前看到他一些对Ceph核心模块的创新性理解,相信这些都通过这本书展现出来了。
这本书是目前我所看到的从代码角度解读Ceph的最好作品,即使在全球范围内,都没有类似的书籍能够与之媲美。相信每个Ceph爱好者都能从这本书中找到自己心中某些疑问的解答途径。
作为Ceph社区的主要开发者,我也想在这里强调Ceph的魅力,希望每个读者都能充分感受到Ceph社区生机勃勃的态势。Ceph是开源世界中存储领域的一个里程碑!在过去很难想像,从IT巨无霸们组成的巨大存储壁垒中能够诞生一个真正被大量用户使用并投入生产环境的开源存储项目,而Ceph这个开源存储项目已经成为全球众多海量存储项目的主要选择。
众所周知,在过去十年里,IT技术领域中巨大的创新项目很多来自于开源世界,从垄断大数据的Hadoop、Spark,到风靡全球的Docker,都证明了开源力量推动了新技术的产生与发展。而再往以前看十年,从Unix到Linux,从Oracle到MySQL/PostgreSQL,从 VMWare到KVM,开源世界从传统商业技术继承并给用户带来更多的选择。处于开源社区一线的我欣喜地看到,在IT基础设施领域,越来越多的创业公司从创立之初就以开源为基石,而越来越多的商业技术公司也受益于开源,大量的复杂商业软件基于开源分布式数据库、缓存存储、中间件构建。相信开源的Ceph也将成为IT创新的驱动力。正如Sage Weil在2016 Ceph Next会议上所说,Ceph将成为存储里的Linux!

王豪迈,XSKY公司CTO
2016年9月8日

作者简介

常涛 编著:暂无简介

图书目录

序言
前言
第1章 Ceph整体架构 1
1.1 Ceph的发展历程 1
1.2 Ceph的设计目标 2
1.3 Ceph基本架构图 2
1.4 Ceph客户端接口 3
1.4.1 RBD 4
1.4.2 CephFS 4
1.4.3 RadosGW 4
1.5 RADOS 6
1.5.1 Monitor 6
1.5.2 对象存储 7
1.5.3 pool和PG的概念 7
1.5.4 对象寻址过程 8
1.5.5 数据读写过程 9
1.5.6 数据均衡 10
1.5.7 Peering 11
1.5.8 Recovery和Backfill 11
1.5.9 纠删码 11
1.5.10 快照和克隆 12
1.5.11 Cache Tier 12
1.5.12 Scrub 13
1.6 本章小结 13
第2章 Ceph通用模块 14
2.1 Object 14
2.2 Buffer 16
2.2.1 buffer::raw 16
2.2.2 buffer::ptr 17
2.2.3 buffer::list 17
2.3 线程池 19
2.3.1 线程池的启动 20
2.3.2 工作队列 20
2.3.3 线程池的执行函数 21
2.3.4 超时检查 22
2.3.5 ShardedThreadPool 22
2.4 Finisher 23
2.5 Throttle 23
2.6 SafeTimer 24
2.7 本章小结 25
第3章 Ceph网络通信 26
3.1 Ceph网络通信框架 26
3.1.1 Message 27
3.1.2 Connection 29
3.1.3 Dispatcher 29
3.1.4 Messenger 29
3.1.5 网络连接的策略 30
3.1.6 网络模块的使用 30
3.2 Simple实现 32
3.2.1 SimpleMessager 33
3.2.2 Accepter 33
3.2.3 DispatchQueue 33
3.2.4 Pipe 34
3.2.5 消息的发送 35
3.2.6 消息的接收 36
3.2.7 错误处理 37
3.3 本章小结 38
第4章 CRUSH数据分布算法 39
4.1 数据分布算法的挑战 39
4.2 CRUSH算法的原理 40
4.2.1 层级化的Cluster Map 40
4.2.2 Placement Rules 42
4.2.3 Bucket随机选择算法 46
4.3 代码实现分析 49
4.3.1 相关的数据结构 49
4.3.2 代码实现 50
4.4 对CRUSH算法的评价 52
4.5 本章小结 52
第5章 Ceph客户端 53
5.1 Librados 53
5.1.1 RadosClient 54
5.1.2 IoCtxImpl 56
5.2 OSDC 56
5.2.1 ObjectOperation 56
5.2.2 op_target 57
5.2.3 Op 57
5.2.4 Striper 58
5.2.5 ObjectCacher 59
5.3 客户写操作分析 59
5.3.1 写操作消息封装 60
5.3.2 发送数据op_submit 61
5.3.3 对象寻址_calc_target 61
5.4 Cls 62
5.4.1 模块以及方法的注册 62
5.4.2 模块的方法执行 63
5.4.3 举例说明 64
5.5 Librbd 65
5.5.1 RBD的相关的对象 65
5.5.2 RBD元数据操作 66
5.5.3 RBD数据操作 67
5.5.4 RBD的快照和克隆 69
5.6 本章小结 71
第6章 Ceph的数据读写 72
6.1 OSD模块静态类图 72
6.2 相关数据结构 73
6.2.1 Pool 74
6.2.2 PG 75
6.2.3 OSDMap 75
6.2.4 OSDOp 77
6.2.5 Object_info_t 77
6.2.6 ObjectState 78
6.2.7 SnapSetContext 79
6.2.8 ObjectContext 79
6.2.9 Session 80
6.3 读写操作的序列图 81
6.4 读写流程代码分析 83
6.4.1 阶段1:接收请求 83
6.4.2 阶段2:OSD的op_wq处理 85
6.4.3 阶段3:PGBackend的处理 95
6.4.4 从副本的处理 95
6.4.5 主副本接收到从副本的应答 95
6.5 本章小结 96
第7章 本地对象存储 97
7.1 基本概念介绍 98
7.1.1 对象的元数据 98
7.1.2 事务和日志的基本概念 98
7.1.3 事务的封装 99
7.2 ObjectStore对象存储接口 100
7.2.1 对外接口说明 101
7.2.2 ObjectStore代码示例 101
7.3 日志的实现 102
7.3.1 Jouanal对外接口 102
7.3.2 FileJournal 103
7.4 FileStore的实现 109
7.4.1 日志的三种类型 110
7.4.2 JournalingObjectStore 111
7.4.3 Filestore的更新操作 112
7.4.4 日志的应用 115
7.4.5 日志的同步 115
7.5 omap的实现 116
7.5.1 omap存储 117
7.5.2 omap的克隆 118
7.5.3 部分代码实现分析 119
7.6 CollectionIndex 120
7.6.1 CollectIndex接口 122
7.6.2 HashIndex 123
7.6.3 LFNIndex 124
7.7 本章小结 124
第8章 Ceph纠删码 125
8.1 EC的基本原理 125
8.2 EC的不同插件 126
8.2.1 RS编码 126
8.2.2 LRC编码 126
8.2.3 SHEC编码 128
8.2.4 EC和副本的比较 129
8.3 Ceph中EC的实现 129
8.3.1 Ceph中EC的基本概念 129
8.3.2 EC支持的写操作 130
8.3.3 EC的回滚机制 131
8.4 EC的源代码分析 132
8.4.1 EC的写操作 132
8.4.2 EC的write_full 133
8.4.3 ECBackend 133
8.5 本章小结 133
第9章 Ceph快照和克隆 134
9.1 基本概念 134
9.1.1 快照和克隆 134
9.1.2 RDB的快照和克隆比较 135
9.2 快照实现的核心数据结构 137
9.3 快照的工作原理 139
9.3.1 快照的创建 139
9.3.2 快照的写操作 139
9.3.3 快照的读操作 140
9.3.4 快照的回滚 141
9.3.5 快照的删除 141
9.4 快照读写操作源代码分析 141
9.4.1 快照的写操作 141
9.4.2 make_writeable函数 142
9.4.3 快照的读操作 145
9.5 本章小结 146
第10章 Ceph Peering机制 147
10.1 statechart状态机 147
10.1.1 状态 147
10.1.2 事件 148
10.1.3 状态响应事件 148
10.1.4 状态机的定义 149
10.1.5 context函数 150
10.1.6 事件的特殊处理 150
10.2 PG状态机 151
10.3 PG的创建过程 151
10.3.1 PG在主OSD上的创建 151
10.3.2 PG在从OSD上的创建 153
10.3.3 PG的加载 154
10.4 PG创建后状态机的状态转换 154
10.5 Ceph的Peering过程分析 156
10.5.1 基本概念 156
10.5.2 PG日志 159
10.5.3 Peering的状态转换图 166
10.5.4 pg_info数据结构 167
10.5.5 GetInfo 169
10.5.6 GetLog 176
10.5.7 GetMissing 181
10.5.8 Active操作 183
10.5.9 副本端的状态转移 187
10.5.10 状态机异常处理 188
10.6 本章小结 188
第11章 Ceph数据修复 189
11.1 资源预约 190
11.2 数据修复状态转换图 191
11.3 Recovery过程 193
11.3.1 触发修复 193
11.3.2 ReplicatedPG 195
11.3.3 pgbackend 199
11.4 Backfill过程 205
11.4.1 相关数据结构 205
11.4.2 Backfill的具体实现 205
11.5 本章小结 210
第12章 Ceph一致性检查 211
12.1 端到端的数据校验 211
12.2 Scrub概念介绍 213
12.3 Scrub的调度 213
12.3.1 相关数据结构 214
12.3.2 Scrub的调度实现 214
12.4 Scrub的执行 217
12.4.1 相关数据结构 217
12.4.2 Scrub的控制流程 219
12.4.3 构建ScrubMap 221
12.4.4 从副本处理 224
12.4.5 副本对比 225
12.4.6 结束Scrub过程 228
12.5 本章小结 228
第13章 Ceph自动分层存储 230
13.1 自动分层存储技术 230
13.2 Ceph分层存储架构和原理 231
13.3 Cache Tier的模式 231
13.4 Cache Tier的源码分析 234
13.4.1 pool中的Cache Tier数据结构 234
13.4.2 HitSet 236
13.4.3 Cache Tier的初始化 237
13.4.4 读写路径上的Cache Tier处理 238
13.4.5 cache的flush和evict操作 245
13.5 本章小结 250

教学资源推荐
作者: 蔡开裕 范金鹏
作者: (美)Gary R.Wright,W.Richard Stevens
参考读物推荐
作者: 陈金窗 沈灿 刘政委 编著
作者: 梁嘉祯 著
作者: 范传辉 编著
作者: 杨保华 戴王剑 曹亚仑 编著