最近和同事一起整了本书《Linux开源存储全栈详解:从Ceph到容器存储》,把Linux开源存储相关的项目做了个梳理,对于想了解或参与存储相关项目开发的人来说,应该会是个不错的参考。这里把当时写的序放上来:

======================

自1991年Linux诞生,时间已经走过了接近三个十年。即将而立之年的Linux早已没有了初生时的稚气,正在各个领域展示自己成熟的魅力。

以Linux为基础,也衍生出了各种开源生态,比如网络,比如存储。而生态离不开形形色色的开源项目,在人人谈开源的今天,一个又一个知名的开源项目正在全球野蛮生长。当然,本书的主题仅限于Linux开源存储生态,面对其中一个又一个扑面而来而又快速更迭的新项目新名词,我们会有一定的紧迫感想去了解这些他们背后的故事,也会有一定的动力去踏上Linux开源存储世界之旅。而无论是否强迫,面对这样的一段旅途,我们心底浮现的最为愉悦的开场白或许应该是“说实话,我学习的热情从来都没有低落过。Just for Fun.” ,正如 Linus 在自己的自传《Just for Fun》中所希望的那样。

面对Linux开源存储这么一个庞大而又杂乱的世界,让人最为惴惴不安的问题或许便是:我该如何更快更好的适应这个全新的世界?人工智能与机器学习领域里研究的一个很重要的问题是“为什么我们小时候有人牵一匹马告诉我们那是马,于是之后我们看到其他的马就知道那是马了?”。针对这个问题的一个结论是:我们头脑里形成了一个生物关系的拓扑,我们所认知的各种生物都会放进这个拓扑的结构里,而我们随着年纪不断成长的过程就是形成并完善各种各样或树形或环形等拓扑的过程,并以此来认知我们所面对的各种新事物。

由此可见,或许我们认知Linux开源存储世界最快也最为自然的方式就是努力在脑海里形成它的拓扑,并不断的进行细化。比如这个生态里包括了什么样的层次,每个层次里又有什么样的项目去实现,各个项目又实现了哪些服务以及功能,这些功能又是以什么样的方式实现的,等等,对于我们感兴趣的项目又可以更为细致的去勾勒它其中的脉络。就好似我们头脑里形成的有关一个城市的地图,它有哪些区,区里又有哪些标志建筑以及街道,对于我们熟悉的地方可以将它的周围进行放大细化,甚至于一个微不足道的角落。

本书的组织形式

本书的内容组织正是为了尽一切能力帮助读者能够形成有关Linux开源存储世界比较细致的拓扑。

第1章主要对Linux开源存储的生态进行整体的描述,包括开源存储领域研究的热点方向、相关的开源基金会等。

第2章从存储硬件的角度介绍了存储技术的发展的历史,包括存储介质的进化、存储协议的更新等。

第3章作为整个Linux开源存储世界的基础,描述了Linux存储堆栈(Linux Storage Stack),对I/O在Linux内核里的处理流程以及所涉及到的主要模块进行介绍。

然后第4~9章的内容从存储加速、存储安全、存储管理、分布式存储、云存储等各个角度与层次对处于主导地位的、较为流行的项目进行介绍。这些章节的内容也是希望能够尽量帮助读者形成对相应项目的比较细致的拓扑,并不求对所有实现细节的详尽分析。

第4章讨论存储领域的加速技术,包括了FPGA、QAT、NVIDIMM等硬件加速技术,以及ISA-L、SPDK等开源的软件加速方案。

第5章从可用性、可靠性、数据完整性、访问控制、加解密等几个方面讨论了存储的安全问题。

第6章介绍存储管理与软件定义存储方面的主要开源项目,包括OpenSDS、Libvirt等。

第7章讨论分布式存储并详细介绍了目前最流行的开源分布式存储项目Ceph的设计与实现。

第8章与第9章分别对OpenStack与Kubernetes两种主要云平台中的存储支持进行讨论。