阿里云文件存储(Network Attached Storage,简称NAS)是面向阿里云ECS实例、HPC和Docker的文件存储服务,提供标准的文件访问协议,用户无需对现有应用做任何修改,即可使用具备无限容量及性能扩展、单一命名空间、多共享、高可靠和高可用等特性的分布式文件系统。
NAS的吞吐性能和存储容量/存储包大小相关,在大多数情况下,客户数据量不到1TB,单一容量型NAS文件系统所能达到的吞吐大约为120MB/s左右,具体数据如下图:
在有些场景下面,客户需要将数据从本地存储阵列/云存储阵列/云OSS上迁移到NAS,并对这些数据进行读写和后续计算。那么如何在不花费更多钱(购买更大存储包)的情况下,获取更高的数据上传速度和读写性能呢?本文将介绍其中一种方法:将源数据迁移到多个NAS,并用软链接组装上传后的文件目录,以让多个NAS从逻辑上形成和源数据一致的结构。经测试,在4个NAS上的数据上传吞吐能力达到440MB/s。
第一部分,如何将本地存储阵列(或其他高吞吐设备)中目录/data/下的所有数据上传到NAS?
使用NAS分布式上传工具nasimport2.0(目前尚未发布到公有云页面,如有需要请钉钉联系王俊俏)。下面对工具作简要介绍:
前提条件:一台(或若干台)服务器,可以同时访问源数据和NAS文件系统,打通ssh通道。创建若干个nas(比如4个)挂载上, 目录为/nas/mnt1,/nas/mnt2,/nas/mnt3/,/nas/mnt4/。
工具原理:工具采用master-slave模式,一台机器上master启动后在本机(或者配置好的其他机器上)启动若干个slave,然后扫描源数据目录下面所有的文件,在文件级别将若干文件作为一个批次,每个批次作为一个job分发给slave分别上传。所有job完成之后,源目录/data/下的所有文件,都分布在了4个nas上,也就是/nas/mnt1,/nas/mnt2,/nas/mnt3/,/nas/mnt4/上面。之后把这四个目录下面的所有文件软链接到/nas/mnt1/下面,使得从/nas/mnt1/入口可以访问到所有的原始文件。
链接前的目录结构比如是这样:
链接后:
第二部分:数据上传到NAS之后的读写。在一些场景下,上传后的数据直接作为原始数据,会被计算程序多次读取,这样的话,直接把/nas/mnt1/作为目录的入口就可以了。多线程并发读的情况,吞吐可以充分发挥4个NAS的优势,理论上也可以达到400MB/s的吞吐。在写的情况下,如果创建新的目录会创建在父目录所在的NAS上,写入速度取决于数据目录的形式,但至少会比单个NAS性能要好。
以上就是利用多个NAS聚合产生更高IO性能的一种方式。分布式上传工具和rebuild 目录的工具目前均在内测阶段,如有需要,请联系钉钉(王俊俏)。