新書推薦:
《
根源、制度和秩序:从老子到黄老学(王中江著作系列)
》
售價:HK$
121.0
《
索恩丛书·北宋政治与保守主义:司马光的从政与思想(1019~1086)
》
售價:HK$
75.9
《
掌故家的心事
》
售價:HK$
85.8
《
农为邦本——农业历史与传统中国
》
售價:HK$
74.8
《
郊庙之外:隋唐国家祭祀与宗教 增订版 (三联·哈佛燕京学术丛书)
》
售價:HK$
105.6
《
小麦文明:“黄金石油”争夺战
》
售價:HK$
97.9
《
悬壶杂记全集:老中医多年临证经验总结(套装3册) 中医医案诊疗思路和处方药应用
》
售價:HK$
135.1
《
无法忍受谎言的人:一个调查记者的三十年
》
售價:HK$
63.8
編輯推薦:
1)大厂资深工程师撰写,串联纷繁复杂的分布式存储知识,通俗易懂、好学易用,一本书学透,进阶存储资深工程师2)以Go和Linux存储为“地基”,以分布式系统核心技术与实现“主框架”,以分布式文件系统为“梁柱”,利用多种业务场景和案例进行可用性夯实,打造存储知识体系“样板间”
內容簡介:
全书分为3篇。第1篇存储基本原理和分布式基本原理。特别针对 Linux OS 的 IO 知识进行讲解,并且还会结合 Go 的存储编程实现。第二篇剖析现有的存储系统实现,对它们使用的设计,概念,实现进行深入的剖析。以此来借鉴。第三篇进行编程实战,将编写数个极具实践价值的应用程序,并且形成一个完备的分布式存储系统。
關於作者:
李庆:资深存储系统工程师,拥有近十年存储研发与落地经验。曾参与设计和运维多个EiB级别(百亿兆字节规模)的存储系统,这些系统应用于全球领先的科技企业,支撑着关键业务的数据处理和存储需求。
目錄 :
目 录 Contents
前言
第一部分 Go语言基础
第1章 存储概述2
1.1 Go语言与存储应用2
1.2 存储:云变革的基石3
1.3 存储技术的发展3
1.3.1 提升速度4
1.3.2 扩大容量4
1.4 本章小结4
第2章 Go语言的数据结构5
2.1 字节5
2.1.1 字节的定义5
2.1.2 字节的序列6
2.2 数组和切片10
2.2.1 数组10
2.2.2 切片11
2.3 字符串13
2.3.1 变量的定义14
2.3.2 内存的分配15
2.3.3 字符串的操作16
2.3.4 类型转换20
2.4 map类型21
2.4.1 创建与初始化21
2.4.2 读取、写入和删除24
2.4.3 元素遍历29
2.5 Channel类型32
2.5.1 创建与初始化32
2.5.2 入队和出队34
2.5.3 select和Channel结合41
2.5.4 for-range和Channel结合44
2.6 接口类型45
2.6.1 变量的定义45
2.6.2 实现原理47
2.6.3 接口nil赋值和判断54
2.7 本章小结55
第3章 Go语言的I/O框架56
3.1 I/O的定义56
3.1.1 基础类型56
3.1.2 组合类型60
3.1.3 进阶类型63
3.2 通用I/O函数68
3.2.1 面向I/O接口的操作68
3.2.2 文件I/O的操作函数70
3.3 文件系统71
3.3.1 FS接口的定义72
3.3.2 FS接口的实现和扩展74
3.4 I/O标准库拓扑78
3.4.1 字节I/O78
3.4.2 字符串I/O79
3.4.3 网络I/O80
3.4.4 文件I/O82
3.4.5 缓冲I/O83
3.5 文件I/O和网络I/O85
3.5.1 文件I/O86
3.5.2 网络I/O89
3.6 本章小结98
第二部分 存储基础
第4章 Linux 存储基础102
4.1 存储架构102
4.1.1 系统调用103
4.1.2 VFS层106
4.1.3 文件系统层122
4.1.4 块层123
4.1.5 设备驱动层123
4.2 文件的定义124
4.2.1 文件的类型124
4.2.2 一切皆文件127
4.2.3 文件句柄130
4.3 文件系统131
4.3.1 文件系统的挂载要素132
4.3.2 文件系统的开发要素132
4.4 文件I/O函数134
4.4.1 打开文件135
4.4.2 写文件137
4.4.3 读文件138
4.4.4 文件偏移操作139
4.4.5 数据刷盘141
4.4.6 关闭文件141
4.5 本章小结142
第5章 存储I/O实践143
5.1 文件的读写143
5.1.1 顺序I/O143
5.1.2 随机I/O146
5.2 数据安全落盘的方式148
5.2.1 Sync刷盘方式148
5.2.2 Direct I/O方式149
5.3 读写优化思路153
5.3.1 写操作的优化154
5.3.2 读操作的优化 159
5.4 本章小结162
第6章 高级I/O模式163
6.1 阻塞和非阻塞I/O163
6.2 同步和异步I/O164
6.3 I/O 接口的模式165
6.3.1 同步阻塞I/O165
6.3.2 同步非阻塞I/O166
6.3.3 异步阻塞I/O167
6.3.4 异步非阻塞I/O167
6.4 Linux的I/O模式实现168
6.4.1 信号驱动I/O168
6.4.2 Linux的异步I/O169
6.4.3 I/O多路复用171
6.5 本章小结172
第7章 并发I/O模型173
7.1 多进程模型173
7.2 多线程模型174
7.3 协程模型175
7.3.1 基本原理175
7.3.2 Go语言的Goroutine178
7.4 I/O多路复用179
7.4.1 select181
7.4.2 poll183
7.4.3 epoll184
7.5 本章小结200
第8章 缓存模式201
8.1 旁路缓存模式202
8.1.1 读操作流程202
8.1.2 写操作流程203
8.2 读写穿透模式205
8.2.1 读穿透模式205
8.2.2 写穿透模式206
8.3 异步回写模式206
8.4 本章小结207
第9章 数据校验技术208
9.1 数据校验的概念与原理208
9.2 数据校验的应用场景209
9.3 常见数据校验技术210
9.3.1 奇偶校验210
9.3.2 循环冗余校验211
9.3.3 摘要算法212
9.4 本章小结215
第三部分 分布式系统基础
第10章 分布式存储理论218
10.1 分布式系统的特征218
10.2 分布式系统的问题220
10.2.1 无全局时钟220
10.2.2 网络异常220
10.2.3 结果的三态221
10.3 数据一致性222
10.3.1 状态一致性222
10.3.2 操作一致性222
10.4 分布式理论225
10.4.1 CAP 理论225
10.4.2 BASE 理论226
10.5 分布式协议227
10.5.1 2PC协议227
10.5.2 3PC协议228
10.5.3 Paxos协议230
10.5.4 Raft协议233
10.6 本章小结236
第11章 高可用系统237
11.1 高可用的概念与原理237
11.2 高可用的关键技术238
11.3 高可用的架构模式240
11.3.1 双机架构的模式240
11.3.2 集群模式242
11.4 本章小结245
第12章 数据策略246
12.1 数据分布设计原则246<
內容試閱 :
Preface 前 言
为什么要写这本书
在这个信息技术飞速发展的时代,数据已成为一种重要的资产。随着互联网技术突飞猛进的发展,海量数据的生成、存储、处理以及分析逐渐成为常态。在这种背景下,分布式存储系统以其高可靠性、可伸缩性和高性能,成为支撑大数据时代的坚固基石。
本书的编写基于我对当代分布式存储技术的深刻理解,以及对Go语言在此领域的潜力的深刻认识。Go语言因其简洁的语法、强大的并发处理能力和优异的性能,成为构建大规模分布式系统的首选语言之一。
存储是底层的技术,涉及的知识广泛而复杂,经常让初学者望而却步。很多存储技术开发的人员都是在实际工作中逐步摸索,积累的知识往往是零散且碎片化的,难以形成系统化的思维框架。当遇到问题时,他们往往难以迅速找到解决方案。因此,目前缺少的不仅是一本能够引导读者入门存储领域的书籍,更是一本能帮助读者构建起存储知识体系,并将理论应用到实践中去的指导书。
本书旨在全面深入地解读分布式存储系统的基础原理,并借助Go语言去实践这些原理。从基础知识到知识体系构建,从代码演示到典型项目分析,再到项目实战,本书将逐步引导读者深入理解并实际运用分布式存储技术,帮助读者构建起完整的存储知识体系,以便快速进入存储开发领域。
本书特色
Go存储编程的技巧:深入浅出地讲解Go语言的基础数据结构、存储I/O框架、并发编程等关键技术点。
Linux存储体系:构建起完整的Linux存储体系,帮助读者从根本上理解存储技术的内在逻辑。
理论与实践相结合:通过丰富的代码示例与测试手段分析关键存储技术的实现过程,并展示如何使用Go语言打造真实运行的分布式存储系统。
经典项目深度解读:详细讲解了Minix、FUSE、LevelDB等经典存储项目,以便读者深刻理解它们的核心原理,并快速掌握存储技术的开发与实践。
分布式存储的项目实践:实现了一个真实的分布式存储项目,以便读者从实践中深入理解分布式存储的原理。
读者对象
本书适合具备一定Go语言开发经验,并对Linux基础知识有了解的读者阅读。具体来说,本书适用于以下读者:
Go语言开发工程师。
分布式存储领域的初学者。
希望通过Go语言优化现有存储解决方案的资深开发者。
如何阅读本书
本书共16章,分为四部分。读者可以按照章节顺序阅读,也可以根据需求挑选感兴趣的章节进行专项学习。
第一部分(第1~3章) Go语言基础,涵盖以下内容。
第1章阐述了存储的重要性,并特别讨论了Go语言在存储领域的重要性。
第2章介绍了Go语言在存储编程中常用的数据结构,以方便读者了解底层的数据存储细节。
第3章深入介绍了Go语言的I/O框架,系统梳理了Go语言存储编程的知识体系。
第二部分(第4~9章) 存储基础,涵盖以下内容。
第4章详细探讨了Linux的存储架构以及文件和文件系统的核心概念。
第5章展示了常见的存储编程案例,探讨了读写优化的策略以及数据安全性的保障方法。
第6章深入剖析了多种I/O模式,以及Linux上的典型I/O模式的实现。
第7章详细介绍了多种I/O并发模型,包括多进程、多线程、协程模型,并深入讨论了I/O多路复用的原理和实现。
第8章解读了多种缓存模式,包括旁路缓存、读写穿透、异步回写模式等。
第9章阐述了数据校验技术及其在实际中的应用场景。
第三部分(第10~12章) 分布式系统基础,涵盖以下内容。
第10章阐释了分布式系统的基础理论,如CAP和BASE等,并分析了2PC、3PC、Paxos、Raft等分布式协议。
第11章讲述了常见的高可用模式和关键技术。
第12章探讨了数据分布策略和数据冗余策略。
第四部分(第13~16章) 存储系统实战,涵盖以下内容。
第13章介绍了Linux上经典磁盘文件系统Minix的原理和实现。
第14章介绍了存储引擎LevelDB的原理和实现。
第15章介绍了用户态文件系统的原理和实现,并演示了一个简易用户态文件系统HelloFS的构建过程。
第16章基于HelloFS,指导读者逐步搭建一个分布式的存储系统。
勘误和支持
由于编写时间仓促,书中难免有疏漏或不够精确之处,恳请读者批评指正。如果读者有更多宝贵意见,欢迎访问微信公众号“奇伢云存储”进行讨论,我会尽力在线上为读者答疑解惑。同时,也可以通过邮箱liqingqiya@163.com联系我。期待得到读者的反馈,让我们在技术之路上互勉共进。
致谢
感谢我的妻子,她的耐心和理解为我提供了一个宁静且充满爱的创作环境。同时,感谢我的家人,他们是我坚实的后盾,给予了我必要的支持和鼓励。
本书也是献给我心爱的女儿的特殊礼物,祝愿她健康成长。
李庆