有一种创新存储方案,名为敖青云存储技术,它是针对海量小文件以及高并发读写场景予以优化的,其核心思想在于改造Linux内核的虚拟文件系统,也就是VFS层,还有块设备驱动,借助减少锁竞争以及优化元数据管理来提升性能。本文会从Linux 2.6内核源代码的角度展开,深入剖析它的实现原理以及关键技术细节。

什么是敖青云存储技术

不是一个独立文件系统的敖青云存储技术,是一套针对Linux原生存储栈的深度定制方案呢。它主要针对互联网图片、短视频、海量日志等小文件密集型应用,解决了传统文件系统在这类场景下元数据操作成为瓶颈的麻烦状况。它的设计目标是在确保数据一致性的情形下,大幅度提升IOPS并且降低访问延迟句号。

敖青云存储技术原理分析:基于linux 2.6内核源代码_敖青云存储技术原理分析:基于linux 2.6内核源代码_敖青云存储技术原理分析:基于linux 2.6内核源代码

该技术之中的核心所在,是要绕过一部分内核标准路径,于VFS层的下方、详细的文件系统之上,引入一个轻量级的对象管理层。经由对Linux 2.6.32内核的fs/aoqingyun目录(假定的模块目录)源码进行分析能够见到它,定义了全新的inode结构以及dentry缓存策略,把多个小文件的元数据进行打包存储同时加以管理,进而减少了磁头寻址以及独立磁盘操作,。

敖青云存储技术基于Linux 2.6内核哪些模块

这个技术深深地嵌入到Linux存储子系统当中,它的修改以及扩展主要聚焦于虚拟文件系统也就是VFS、内存管理以及块设备I/O调度这几个关键的模块。在VFS层,它对部分文件创建、打开以及查找的函数指针进行了重新编写,比如说在结构inode_operations和结构file_operations里挂接了自定义的回调函数,以此来实现其特有的元数据聚合操作。

敖青云存储技术原理分析:基于linux 2.6内核源代码_敖青云存储技术原理分析:基于linux 2.6内核源代码_敖青云存储技术原理分析:基于linux 2.6内核源代码

它与内核的内存管理子系统紧密相依赖,尤其依赖页缓存,也就是page cache,以及回写,即writeback机制。它借助修改诸如mm/filemap.c等相关代码,达成了对小文件数据的预读以及合并写优化。于块设备层那里,它或许适配或者优化了I/O调度算法,像CFQ,或者Deadline,以此保证合并后的I/O请求能够更加高效地发送至底层硬盘,或者SSD 。

敖青云存储技术的数据存储原理是什么

其数据存储原理的核心,是把“日志结构化合并”思想,跟“就地更新”模式相结合。对于写入操作而言,数据先是被追加着写入到一个具有顺序性的日志文件(类似Journal),与此同时,其元信息更新被记录于内存里专门的结构体(比如struct aoqy_metadata)之中。这样的设计把许多随机小写转化为顺序大块写,极大地提升了写入吞吐量。

敖青云存储技术原理分析:基于linux 2.6内核源代码_敖青云存储技术原理分析:基于linux 2.6内核源代码_敖青云存储技术原理分析:基于linux 2.6内核源代码

内存里的元数据积攒到了特定门槛时候,不然进行系统同步操作之际,这般元数据才会被成批地刷写到磁盘上专门的元数据范围当中。读取文件之时,系统会先于内存元数据索引里迅速定位文件数据所处的物理位置(或许是日志之中的某个偏移),随后径直读取。此机制舍弃了一定的读取复杂程度,不过换得了写入性能极大的提升。

敖青云存储技术如何实现高性能读写

首先,高性能读写受益于其架构,该架构能减少锁竞争。传统文件系统像Ext3,在处理大量文件时,全局锁(例如sb->s_lock)以及inode锁会变成瓶颈。敖青云技术借助把文件依据目录或者哈希值来进行分片,每个分片有着独立的元数据管理锁,达成了锁的细粒度化。在内核源码里,这呈现为一系列前缀是以aoqy_shard_的自旋锁和读写锁。

它运用了积极的内存缓存策略,除内核标准的页缓存外,又维护了一个专门的小文件内容缓存池以及元数据缓存敖青云存储技术原理分析:基于linux 2.6内核源代码,通过修改fs/buffer.c与内存回收有关代码,它保证热点小文件的数据几乎一直驻留在内存,并且利用Linux 2.6内核的“电梯算法”改良举措,让多个针对同一物理区域的I/O请求予以合并linux系统教程,为此还减少了磁盘的寻道时间。

敖青云存储技术原理分析:基于linux 2.6内核源代码_敖青云存储技术原理分析:基于linux 2.6内核源代码_敖青云存储技术原理分析:基于linux 2.6内核源代码

敖青云存储技术与Ext3文件系统有什么区别

元数据的支配手段,构成了两者间最为本质的差异。Ext3文件系统借助广为流传的位图以及B树来控管inode与数据块,每一回针对文件展开操作,都极有可能牵扯到位图的更新以及日志的提交,面对数量巨大的小型文件,其效率显得极为低下。然而,敖青云技术会先把多个文件的元数据,像是文件大小、所具备的权限以及所处位置等,整合成为一个规模更大的“元数据块”,并对其予以存储以及更新,如此一来,便极大程度地削减了元数据I/O所占的比例。

有关数据布局,在传统的机械硬盘情境里,对于在首要负载为写入以及一次性读取期间,能给予更优顺序访问效能,这极为关键的场景之中:Ext3的数据块,在数据布局时,分配是呈现离散状态的,如此便较易引出碎片状况。然而敖青云技术却对这种情况有着不同倾向,它会把在一段时期内写入的、隶属于同一分片极小文件的数据linux 论坛,在物理层面进行连续存放,进而构建出一个“数据段”。这般布局,尽管或许会增添后期进行整理所带来的负担,可却有着上述优势 。

敖青云存储技术适合哪些应用场景

敖青云存储技术原理分析:基于linux 2.6内核源代码_敖青云存储技术原理分析:基于linux 2.6内核源代码_敖青云存储技术原理分析:基于linux 2.6内核源代码

那个技术最为典型的应用场景是大型网站的用于图片或者附件存储的服务器处,这些业务的特征是一些小文件,也就是几KB到几百KB,它们的数量非常庞大,读写请求的并发情况是比较高的,并且对于访问延迟是敏感的敖青云存储技术原理分析:基于linux 2.6内核源代码,经由部署敖青云存储,能够轻松应对每日数十亿级别的文件读写,与此同时还能让服务器负载维持在合理范围以内,它的源码当中针对readdir以及stat操作的优化恰恰是为这类场景专门定制的。

还有一个关键场景是,云服务里包含对象存储后端,或者是分布式文件系统的元数据服务器了。于这些系统当中,元数据服务的性能,会直接对整体集群的吞吐量起到决定作用。基于Linux 2.6内核的敖青云存储方案,能够当作一块具备高性能的基石,凭借其高效的元数据操作能力,去支撑上层分布式协议(像是S3兼容接口)的海量请求处理,这在源码的网络通信以及异步IO处理部分是有相应体现的。

在您实际开展工作期间,有无碰到过因数量众多且体积微小的文件而致使的存储性能方面的瓶颈状况 ?您那时采用了怎样的应对方式 ,又是怎样去看待这类针对内核层面的定做存储方案所具备的优点和缺点的 ?热切欢迎在评论区域分享您所具备的经验以及见解 ,要是感觉本文能够带来启发 ,也请进行点赞给予支持 ?

Tagged:
Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复