前言
从最初的文件系统雏形到现在,文件系统已经发展了六七十年了。文件系统的特性变得越来越丰富,适用的场景也越来越多。目前,传统文件系统除个别互联网业务外,基本上能满足现有各种类型业务的需求。同时,很多应用也都直接构建在文件系统之上。特别是非结构化的数据,通常都是以文件的形式存储在文件系统中的,如音频、视频和日志等。
随着互联网技术的发展,互联网应用对传统文件系统提出了更高的要求,传统文件系统很难满足互联网业务的需求。很多互联网公司基于自身业务特性构建了自己的存储系统。互联网存储系统更多的是基于自己业务特点简化存储系统的某些方面,而增强另外一些方面的。比如,对文件系统附加特性进行弱化,而对性能和扩展性进行增强等。虽然互联网公司的存储系统都是一些私有化的存储系统,但核心技术并没有太大变化。
互联网领域有很多典型的存储系统,其中比较著名的有谷歌的GFS、开源产品HDFS、Facebook的Haystack及淘宝的TFS等。每一种存储系统都是针对其应用进行了特殊的优化,通常只能应用在某种特定的业务模式中。
以Haystack存储系统为例,其主要应用在Facebook社交软件的照片应用中。照片应用有一个非常典型的特征是一次写入、多次读取、不会修改。而该应用对文件系统的其他特性则没有要求,如扩展属性和快照等。
虽然文件系统具有非常广泛的应用,但是目前国内并没有一本系统介绍文件系统的书籍。作者在学习文件系统时曾经阅读了很多计算机书籍,发现它们大多只是对文件系统进行了比较简要的介绍。比如,一些操作系统类的书籍,其中某些章节对文件系统的概念和原理进行了介绍,但距离实践还有一些差距,特别是与现在互联网相关的技术相差甚远。
通过学习本书内容,希望读者能够对文件系统技术有一个全面深入的了解,并结合源代码进行实例解析。同时,本书对文件系统在互联网和云计算等领域的应用进行了进一步的介绍和原理分析,让读者对文件系统技术在最前沿的应用有所了解。
主要内容
本书分为7章,第1章和第2章主要介绍文件系统的概念、原理和基本使用,希望读者能够对文件系统有整体、感性的认识。第3章和第4章主要对本地文件系统的关键技术、原理进行介绍,并且结合实例进行代码分析。本地文件系统是学习其他文件系统的基础,因此这两章对其进行了详细的介绍。第5章主要对传统网络文件系统进行介绍,并结合NFS的代码介绍了实现细节。第6章主要对分布式网络文件系统进行介绍,并结合目前常用的分布式文件系统CephFS和GlusterFS介绍了具体实现。第7章主要介绍了文件系统的其他形态,对目前互联网应用最广的对象存储进行了深入的介绍。
读者对象
虽然本书是介绍文件系统知识的专业书籍,但是并非只针对存储系统开发人员。软件开发人员、运维人员和系统架构师等都可以从本书获得有用的知识。
• 软件开发人员:理解文件系统的原理对软件开发人员如何合理使用文件系统的相关API会非常有帮助。比如,软件开发人员不清楚文件系统缓存的存在,那么在使用API时可能就不知道如何保证掉电时数据不丢失。
• 运维人员:有一些系统参数是与文件系统相关的,如当进程打开时最大文件的数量。如果能够对文件系统的原理有所了解,相信可以帮助运维人员合理地设置系统参数。
• 系统架构师:文件系统中的很多技术是通用技术,了解这些技术可以帮助系统架构师进行其他系统的设计,还可以帮助系统架构师将文件系统中的一些技术迁移到其他软件设计中。
软件及代码版本
本书涉及的软件比较多,分别是Linux内核、Ceph、GlusterFS和NFS-Ganesha等。本书涉及的Linux内核代码为5.8版本,涉及的Ceph相关代码为13.2(Mimic)版本,涉及的GlusterFS相关代码为release-8版本,涉及的NFS-Ganesha的代码为2.8.3版本。
本书介绍了从本地文件系统到分布式文件系统等众多技术,涉及的技术点比较多。作者在阐述时尽量结合源代码和图示将相关内容解释清楚。由于作者水平有限,书中难免存在一些疏漏和不足,希望同行专家和广大读者给予批评与指正。
特别要感谢电子工业出版社的林瑞和编辑,没有他的鼓励和指导,就没有本书的问世。在撰写本书的过程中,林瑞和编辑给予了很多非常专业的建议。还要感谢我的好友刘占宁,他对整本书稿进行了很认真的阅读,无论是遣词造句,还是技术内容的准确性方面都提出了很多建议,使得本书的内容更加精准。
我在撰写本书时得到了家人,特别是我的妻子路欢欢的很大支持,她承担了很多的家务,让我有更多的时间专注写作。另外,还有很多其他朋友和同事对本书提了建议,在此一并表示感谢!
张书宁
2021年11月于北京
读者服务
微信扫码回复:42478
• 加入本书读者交流群,与作者互动
• 获取【百场业界大咖直播合集】(持续更新),仅需1元