
小文件的备份速度极慢,而备份海量小文件将会耗费大量的时间和系统资源,是灾备系统头疼的问题。如何解决是众说风云,也许是说采用某种设备或者软件,其性能多少强大,又是“实时备份”、“瞬间可用”又是“连续数据保护”什么的。部署后才发现实际情况不是像预期的那样,备份系统在海量小文件的压力之下,其具备“先进武器”毫无用武之地,只能望洋兴叹,恨自己少了几双手。

什么原因使得海量小文件迁移速度慢?
1、网络延迟
网络延迟相比于带宽对于性能影响更大,对于TCP连接来说,数据包发送和接收的延迟并不随着消息的大小有明显的增大。所以在发送较小文件时,每个文件的发送和接收都会有一个网络延迟,导致发送效率很低。
为了解决这个问题,通常业界的做法是把一堆小文件打成一个tar包或者压缩包,传送到目的地后再解压缩。这样可以大幅度提高同步效率,但是这样做的缺点也很明显,需要消耗大量额外空间,有时候是不现实的,而且这样操作也麻烦。
2、单进程工作模式
现有的一些同步产品是单进程工作模式。那么在发送一个小文件后,在等待远端服务响应时,或者在从磁盘上读写文件数据时,自身不能做任何其他事情,所有的操作都是串行化的,白白浪费时间导致性能差。
应对做法:
1、采用小文件自动组包技术,把多个小文件合并成一个较大的网络请求,这样可以有效的利用网络的带宽,降低网络延迟对于性能的影响。同时在打包过程中自动进行压缩和属性合并等操作,提高单个网络请求的效率。这种方法也完全不消耗任何多余空间。
2、采用多个线程和流水线并发技术,使得对文件的IO延迟、网络延迟等操作全部可以在多个线程并发进行,提高CPU、网络和磁盘资源的利用率。
海量小文件采用上述机制进行备份迁移,可比普通备份过程的效率提高10倍以上。


