有些朋友是已经深耕存储多年,有的朋友是刚刚入门、或者说有兴趣但是迟迟不得入门。以下从笔者的经验出发,向大家推荐几本书,可以比较系统的补充一些编程的内功和存储的基础知识,向你展示一条存储通关之路。
语言是第一个要度过的关,就跟你学习语文一样,你要学习优美的文章,首先你得认字,以下就简要推荐几部语言入门的书籍,推荐两本 C 的入门书籍,两本 Go 的书籍。(市面上的好书非常之多,各有长短,大家可以自己斟酌,各取所需)
为什么选择 C 和 Go 各推荐两部?
C 语言无论是做哪个方面的,只要是你想和操作系统的一些底层原理打交道,这个 C 语言是逃不过的(比如想像看 Linux 源码,那么就要能读懂 C );
得益于云原生的火爆,Go 水涨船高,K8S,minio,etcd 等众多 Go 优秀的项目。且笔者当前也是使用 Go 技术栈在做存储;
C 语言的语法本身非常简单,所以入门者走马观花的读完语法,会感觉自己啥都懂,一写代码啥都错。这本书除了详尽的语法内容,还搭配大量的代码示例和代码讲解,这对入门者来说,是非常重要的。
往往入门的时候,就是进门最难,无从下手的感觉最难受。所以,入门一项新技术的时候,最好的办法是先把姿势用起来,然后逐步配合理解,这样学习更容易理解。
如果你感觉自己入门了,但是理解还不深刻,特别是对 C 语言的指针,内存分配还一知半解,经常忘记(因为只知其然,不知其所以然),那么这本书可能可以帮助到你。
这本书能把 C 语言的概念讲透,某些特性可能你想破脑袋也想不出来原因,这部书可能一下就跟你讲明白了,因为这些特性可能是有历史原因的。本书从 C 的历史、语言特性、循序渐进的把问题给你讲明白,非常值得推荐。
Go语言编程(图灵出品)
市面上 Go 的书籍还挺多的,也是非常优秀的,在此推荐两部可以用来入门的。第一部就是许世伟大佬撰写的《Go 语言编程》,这本书是国内最早一批 Go 的书籍,非常值得推荐。
本书从 Go 语言的诞生和发展历程开始,介绍 Go 语言的基础用法,再介绍面向对象编程特性和并发编程姿势,最后还介绍了 Go 语言标准库和配套工具的用法,包括安全编程、网络编程、工程管理工具等。
总体来说,本书是一本适合入门,且实用性很强的书。
该书是难得的佳作,众所周知 Go 以并发见长,但并发也常常是最难使用的,这本书就是详细的阐述了 Go 并发的特点,包括 Go 的并发设计哲学,是难得的佳作。这本书能教会你 Go 并发的十八般姿势。
好,到这里,现在你已经会一两门基础语言了,能够看懂源码了,是时候做点跟存储相关的啥了。首先要补充的是一些基础知识,Linux 基础,系统 IO 接口使用等。
如果连 Linux 都不知道是啥?那就太尴尬了,做服务端开发的小伙伴 Linux 是你绕不过的坎,但也不要怕,有很好的入门书籍,赶紧了解起来。
推荐:《鸟哥的Linux私房菜 基础学习篇 第四版》
这本书可以说是入门 Linux 的最好书籍,入门最重要的就是让学生保持兴趣,并且逐步掌握姿势,这本书做到了这点。
想当初,学完 C 语言之后,感觉自己掌握了倚天屠龙宝剑,后来发现连个文件的概念(属性、权限)都理解不了,尴尬。
笔者也是从这本书逐步入门 Linux 的,轻松的学习过程中才发现,哦,原来这就是 Linux 呀,这就是文件呀,原来文件要执行权限才能执行,软链是这样创建的,原来文件的格式跟后缀没啥关系呀(跟 Windows 不同)。
那么下面重点推荐几个章节:第二部分 Linux文件、目录与磁盘格式
第5章 Linux的文件权限与目录配置
第6章 Linux文件与目录管理
第7章 Linux磁盘与文件系统管理
第8章 文件与文件系统的压缩
学习完这部分,你至少知道文件系统是个啥东西,文件是个啥东西,咋用这东西。
再次称赞这部书,真的是入门宝典。
现在你可能知道文件是啥了,但是你的程序怎么才能读写这个文件呢?
推荐:《Unix 环境高级编程》
说实话,这本书再怎么推荐都不为过(这是一本要流传后世的书籍),这本书是推荐作为存储后端开发的入门书的。云存储本质上也是由一个个本地存储节点通过网络连接起来的,所以你必须得了解本地存储的一个使用形式和形态。
《UNIX 环境高级编程》自然不是只讲解存储的书,但是这本书是存储入门的必修课。
推荐几个必读章节:
第三章 文件 I/O :系统的介绍了最核心的文件相关的系统 I/O 调用接口;
第四章 文件和目录 :介绍了文件和目录的相关接口,通过这样你会系统的了解文件和目录究竟有哪些操作;
第五章 标准 I/O 库 :讲解了封装的带 buffer 的标准库使用姿势,通过这个章节,你能了解系统调用和标准库 I/O 的区别;
其他的章节也是非常有用的,比如和网络 I/O 相关的章节。我挑选出来以上的章节,你读完至少对文件的操作不再陌生。
到这,你可能掌握了文件 IO 的方法,但是对于存储的各种形态可能还不知所云。比如,什么是 Raid?什么是 DAS,NAS,SAN?什么块存储、对象存储、文件存储?
国内阐述存储的书籍很少,很少有一本书能系统的介绍存储的各种形态和知识,初学者很难理解各种各样的存储的到底是个啥?
大话存储系列从比较高的层次来拆解传统存储到云存储的原理,是一个比较好的入门系列,这本书可以当作存储科普书来学习,里面基本涵盖了所有存储相关的知识点、术语,和常用的套路(注意,本书没有什么源码分析,里面主要是理论和存储形态,主要是加深你的存储理解)。
所以,我认为这本书的风格很适合入门、自学存储知识,作者是站在比较高的一个层次,用很通俗的话来解释各种存储的,笔者第一本存储的书就是《大话存储》。
全名《程序员的自我修养:链接、装载与库》,是博文视点出品。这是一本国内大牛写的书,为什么推荐这本书?
程序员写出代码,编译成二进制,运行在操作系统之上。如果你对二进制程序都不了解,都不知道二进制居然还有格式(ELF),那就太尴尬了。这本书能补足你的程序员的内功,对编译、链接、运行 的过程不再陌生。
这本书能够给你新的视角,读了这本书,你应该能知道代码如果变成二进制在系统中运行的。系统软件底层的组成机制是什么?可执行文件(二进制)竟然还有格式?
举个例子,你是否有思考过一下问题:
为什么程序从 main 开始执行?
二进制文件里面竟然还有格式?
目标文件是什么,静态链接,动态链接又是怎么回事?
编译阶段总报错,链接阶段总报错,你能快速定位吗?
句柄是什么?
这本书能解答上面的问题,如果说你一直对进程运行和库装载、编译链接等问题一知半解,那么这本书可能对你是有用的。该书的风格我也很喜欢,明明你之前觉得很复杂的概念,作者能以非常通俗简单的方式让你理解,这个需要很高的功底。
书本太厚,读起来非常费时间,有没有更快速的入门与进阶方式,当然是有的,来看看零声教育这套存储开发架构体系课程,绝对能打破你对培训的认知,从底层原理到实战技巧,快速掌握存储开发所需要的技术。
试听内容
最新C/C++存储开发实战教程,分布式存储,linux内核文件系统,分布式文件系统,TiDB,RocksDB,SPDK,fuse,ceph,NVMehttps://www.bilibili.com/video/BV1gZ4y1n7F6/存储开发完整的学习知识图谱:
自下而上-存储全栈(TiDB/RockDB/SPDK/fuse/ceph/NVMe/ext4) v1.4
你已经对怎么使用存储有了初步了解,这个时候你可能会产生更多的疑问,你想了解计算机内部存储层次的正金字塔和倒金字塔的区别,你想了解操作系统内部文件的实现形式,那么下面的书籍可能可以解答你的问题。
哇,这本书我只能用哇来形容了,是一本修炼内功的书,是一本枕头书,这本书为什么是最值得推荐的?
知识框架!!!零碎的知识最可怕,我们前期学习的时候,东一下西一下,学到了很多,但是总感觉遇到问题的时候不能举一反三,或者总感觉对自己学的有一层模糊的感觉。
这个很大的原因是因为知识体系不系统。程序员无非就是和计算机打交道,所以深入的理解计算机无比重要。编程语言只是你和计算机打交道的一个工具而已,语言是最简单的一部分,举个例子,你会写字,你就能写出文章吗?文章是有结构的,是有套路的,是有体系的。
《深入理解计算机系统》这本书最重要的就是帮你构建计算机系统的知识体系。
第一部分:程序结构和执行:告诉你程序的静态结构,存储分层的原理,让你对计算机系统的静态结构有个认识;第二部分:在系统上运行程序:告诉你程序是怎么编译和链接的,程序是怎么加载的,程序运行的时候是怎么分配内存的,让你对程序的动态运行有个认识;第三部分:程序的交互和通信:这部分介绍了 IO 的接口和基础知识,包括存储 IO 和网络 IO,多路 IO 复用等并发知识;
这本书内容其实并没有特别难,但这本书是真的厚,需要你大量的时间,这个时间很值得。
《UNIX 环境高级编程》你学完之后,至少是大概知道了 IO 是怎么一回事,这个时候你会对操作系统,文件系统这些核心的逻辑感兴趣,你可能会想知道 VFS 是什么东西, Linux 里面一切皆文件是什么意思?文件系统,块设备,驱动有都是什么作用?
那么你可以看这本书,敖青云的存储技术原理分析。该书按照三大块讲述:
存储技术概论
设备驱动
存储 I/O
读完这本书,你肯定能知道 VFS 是什么,块设备是什么,文件系统是什么。书比较厚,啃起来可能比较费劲,但是还是推荐把第一章概述,第八章文件系统读完。你会对 系统调用,vfs,ext具体文件系统有个质的变化。
这本书是一本源码级别的书,是一本真正对你工程编码有直接帮助的书。
这本书比较简单,但是也非常值得学习。本书首先从一个最简单的对象存储服务原型开始,讨论在原型中存在的问题并介绍对象存储服务中一些常见的概念以及设计理念,然后通过改变架构或添加功能的方式解决这些问题。这一迭代步骤将发生多次,最终我们会收获一个足够完善的对象存储服务。
如果你想自己用 Go 编写一个对象存储,那么这本书可以帮助到你。
最后推荐一个了解云存储的非常好的方式:公有云文档。以对象存储来讲,公有云会有非常详尽的文档解释,包括对象存储是什么?快速入门,SDK 使用示例,各种接口示例等等。
对于一个新的领域,笔者认为学习的路径应该是从使用姿势开始,先用起来,先知其然。保持兴趣,保持自己的信心最重要;
等你各种姿势使用都体验了个遍,不出意外你肯定对其内部原理会很感兴趣,这个时候可以从一个很小的点切入,把这个点分析个透彻,会给你带来不一样的感受,这个时候知其所以然也;