现代科学技术的进步,为人们带来切实可见的幸福感,银行金融业务办理无纸化,智能柜台让排队越来越少;医生在线阅片;就医不用再拎着大大的塑料袋和胶片;智能工厂利用AOI质检技术;提高生产效率和产品良品率……
而这一切便捷的背后,往往伴随着巨量数据的产生。举个例子,一家中型银行的影像平台,每年会增加数千万的文件数量,存储空间也会相应增长数百TB;一家大型三甲医院的医学影像文件每月新增数量可能达到千万级,每年增长量达到上亿,存储空间高达PB级;一条智能质检的生产线每月生成数PB的质检图片数据。
这些数据中,非结构化数据(图片、视频、音频、文档等)占据主流,除了呈现数量多、容量大的特点,往往还以KB级别的小文件为主。
海量小文件,存储大难题
常规存储系统,如果需要访问一份真实的数据就需要先访问到该数据的元数据,inode(索引节点)记录着文件的元信息。在存储文件时,除了文件大小会受磁盘空间限制外,文件个数还会受到inode的制约,在海量小文件的情况下,必然会产生更大数量级的元数据,如果文件过小,但数量却达到了inode上限,就会造成磁盘还没满,但inode已用尽的情况,造成存储空间浪费,这也进一步放大了文件系统扩展性差、检索效率低的问题。例如,传统NAS文件系统在文件数量达到数千万级时,会出现性能瓶颈,严重影响业务效率。由于在元数据管理、存储性能、访问效率等方面面临巨大的挑战,海量小文件存储成为了业界公认的难题。
基于此,面对亿级数量的KB级小文件,IT技术人员不得不重新考虑存储的效率以及架构问题。
虽然分布式对象存储系统可以承载更大的文件数量,但如果不对大文件和小文件分开处理,在海量小文件场景下,存储系统可能会随着容量增加性能迅速下降或者空间浪费严重。面对数以亿计的海量小文件,杉岩MOS海量对象存储如何保持高效的读写能力,并增加存储空间利用率?
小文件在线合并——千亿小文件,读写性能依旧平稳
为了解决上述难题,杉岩MOS采用在线合并技术解决海量小文件场景下的存储性能和空间占用问题。即在写入小文件的过程中,不断地对大文件进行追加写,成功后写入元数据,这样多个文件写入后就自动合并成了一个大文件。但此时,需要考虑的是写入大文件时选择副本模式,还是纠删码模式?
副本“快”,纠删码“省”,二者不可兼得?
为提升数据存储可靠性,存储系统通过副本冗余技术和纠删码冗余技术进行数据的保护,在三副本存储策略下,空间利用率只有33.3%,而纠删码模式,例如EC 8+2,空间利用率可以达到80%。因此,在小文件在线合并写入大文件时,通常倾向于选择纠删码模式。
但是,纠删码模式也有它的缺点,追加写会有IO放大,并且还会伴随存储空间浪费。此外,实测在非条带对齐追加写的情况下,性能会急剧下降。
副本“快”,可以节省服务器处理器性能,但空间利用率低;纠删码“省”,但读写性能差。
如何做到“鱼和熊掌兼得”?
副本合并转EC+条带对齐,破解存储难题
杉岩MOS海量对象存储创新研发副本合并转EC+条带对齐写,破解海量小文件存储难题。所谓副本合并转EC,是指在“小文件即时合并为大文件”的基础上,引入中间副本池,业务RGW先把小文件通过即时合并的方式吸入到中间副本池,然后通过后台线程扫出已经写满(状态为full)的大文件,以及尚未写满(状态为not_full)但已超过一定时间没有新写入小文件的大文件,将大文件写入到后端的EC池中。
写入EC池时采用免网关数据复制卸载技术,避免副本数据先拷贝到对象网关侧,再由对象网关写入EC池。同时,写EC池时将对象进行合并对齐条带刷到EC池,减少IO放大。
经过测试,在配置了中间副本池的模式下,性能有了很大的提升:
总结
对于非结构化数据存储来说,攻破海量小文件存储难题,代表该存储系统能适用于大部分非结构化数据存储场景。杉岩MOS海量对象存储自主研发的小文件合并副本转EC技术,既保证了业务端的读写性能,又提高了存储空间利用率,为用户应对千亿级海量小文件存储难题提供了可靠的解题思路。