云存储网关软件版是一款可以安装在阿里云用户ECS上或者用户本地数据中心客户端的产品,提供类似ossfs的功能,使用云存储网关软件版可以将OSS桶挂载到客户端本地以POSIX文件接口进行访问,从而您可以像操作本地文件一样操作OSS里面的文件。

云存储网关软件版具体操作,请参见通过命令行工具快速使用云存储网关软件版

云存储网关托管版和软件版对比

和云存储网关托管版相比,云存储网关软件版更加的轻量,在某些场景更加适合。比如云存储网关托管版有不同的规格,每个规格对应具体的网络带宽,多客户端会共享固定带宽。如果客户端数目比较多,存储网关的网络带宽就可能会成为瓶颈,无法匹配所有客户端带宽的总能力。但是使用云存储网关软件版则可以突破这个限制,它安装于客户端内部,可以发挥出每个客户端带宽的完整能力。

下面分别列出了云存储网关托管版和云存储网关软件版的适用场景。

云存储网关托管版
  • 云存储网关托管版支持NFS、SMB和iSCSI标准协议,对这些协议的某些特性有强需求,比如需要访问SMB共享并使用AD服务来鉴权、通过NFS服务指定某些客户端只读功能等。
  • 多个客户端想看到统一的目录结构视图并保证操作互斥性,需要使用托管版本来保持唯一的视图,否则各个客户端看到的视图可能会有所不同,操作也可能会有冲突,比如多个客户端同时修改同一个文件时需要保证顺序性。
  • 如果需要在Windows下访问OSS Bucket,建议使用SMB共享以及托管版本的云存储网关,不推荐在Windows访问NFS共享。
  • 云存储网关托管版作为一个整体,阿里云可以提供更为完备的监控和运维能力,比如和云监控的集成。
云存储网关软件版
  • 可以接受使用POSIX的文件接口来对OSS Bucket进行访问,主要诉求是读写文件,对于权限之类功能要求不高。
  • 允许不同客户端同一时间看到的视图偏差(客户端是异步将操作回放到OSS,所以不同客户端会有偏差),多客户端基本可以认为互不干扰的独立存在。
  • 客户端数目比较多,远大于单网关的处理能力,或者总体的带宽需求比较高,在满足前一条件的情况下,可以使用云存储网关软件版,并且可以使用批量挂载功能迅速部署。
  • 客户端数目比较少,比如只有一两个客户端需要挂载使用OSS的情况,并且客户端之间的操作没有冲突,推荐使用云存储网关软件版这种轻量的方案。

云存储网关软件版和ossfs对比

和ossfs相比,云存储网关软件版稳定性更好并且功能也更丰富,在元数据管理和数据同步机制等多方面均有所优化。
  • 以KV数据库缓存目录结构等元数据信息,使您执行ls命令等元数据操作更为高效。
  • 以切片的方式高效组织并缓存文件数据,按需自动下载和淘汰。
  • 以持久化日志的方式记录用户的每次写入、删除等操作,并以异步的方式有序回放这些日志,用户操作延迟更低,体验更好。
  • 写入数据以Sync IO的方式落盘,如果客户端意外重启,数据也不会丢失。
  • 用户重命名操作保证原子性,在异步回放时,实际是调用copy + delete object的API组合。
下面将从功能特性、使用性能等不同的方面对云存储网关软件版和ossfs进行对比。

元数据

  • 元数据存储管理

    ossfs和云存储网关软件版的元数据请求处理流程如下图所示:

    元数据缓存流程图

    从上图中可以看出,对于ossfs而言,元数据请求过于频繁,对于文件数量多的情形,会影响性能。此外,ossfs元数据缓存数量有上限,对于文件数量多的情形需要遍历淘汰,影响性能。对于云存储网关软件版而言,元数据全量缓存,无需遍历淘汰。此外,元数据操作均基于本地缓存,无需频繁请求,降低一定的实时一致性,大幅度提升了元数据性能。下表详细列举了ossfs与云存储网关软件版元数据相关的原理对比:
    对比项云存储网关软件版ossfs
    元数据缓存云存储网关软件版采用KV数据库存储数据,它会将元数据全量缓存到缓存盘里,能够处理大规模的文件数目。ossfs会将元数据存储在内存中,可以缓存少量的文件元数据信息。
    元数据淘汰云存储网关软件版暂时不支持元数据淘汰,但支持元数据扩容。文件元数据超过缓存数目上限时,ossfs会淘汰最早缓存的一个文件的元数据。
    元数据一致性保证本地元数据信息和云上元数据信息不一致时,云存储网关软件版会将云上文件元数据信息同步到本地缓存。在一定时间间隔(支持动态配置,最低15s)内只会同步一次,同步的频率更低,因此性能更好,但是实时性相比于ossfs较低。Open、缓存的ETag和云上元数据信息不一致时,ossfs会向OSS发送更新元数据信息的请求,从而保证本地元数据信息和云上元数据信息的强一致性,因此ossfs需要频繁更新元数据信息,极大地影响性能,但是实时性相比于云存储网关软件版较高。
  • 元数据相关测试
    • 一般测试

      下表列举了一些情形下的文件系统操作,对云存储网关软件版与ossfs的元数据性能进行直观测试。

      测试项目云存储网关软件版ossfs
      创建1000个4 KB小文件

      创建文件所花费时间:3.13s

      从开始创建文件到文件全部上云所花费时间:20.07s

      从开始创建文件到文件全部上云所花费时间:81s
      对上述1000个小文件进行chmod操作

      chmod所花费时间:1.49s

      从开始进行chmod操作到文件全部上云所花费时间:21s

      从开始创建文件到文件全部上云所花费时间:81s
      在客户端无元数据缓存的前提下,执行ls <1000个文件所属文件夹>花费时间:0.24s花费时间:3.36s
      创建10万个4 KB小文件

      创建文件所花费时间:384s

      从开始创建文件到文件全部上云所花费时间:402s

      从开始创建文件到文件全部上云所花费时间:8286s
      对上述10万个小文件进行chmod操作

      chmod所花费时间:207s

      从开始进行chmod操作到文件全部上云所花费时间:240s

      从开始进行chmod操作到文件全部上云所花费时间:8218s
      在客户端无元数据缓存的前提下,执行ls <10万个文件所属文件夹>花费时间:49s花费时间:526s
    • 标准元数据mdtest测试

      mdtest是文件系统元数据的一项基准测试,下表列举了标准mdtest中,ossfs和云存储网关软件版的各项文件系统操作的性能。

      mdtest云存储网关软件版ossfs
      dir stat4928544
      dir create2597315
      dir remove3127322
      file stat4593458
      file create2347191
      file read2018122
      file remove2284140
      tree create92
      tree remove130
    从上面的结果可以看出,元数据操作的时间对读写性能的影响极大。
    • 默认情况下,ossfs在本地只缓存1000份元数据信息,由于ossfs频繁地向Bucket发送获取元数据信息的请求,因此需要频繁地遍历本地缓存的元数据信息,并且将缓存时间最早的本地元数据信息淘汰,极大地降低了元数据操作的性能。
    • 相较于ossfs,云存储网关软件版以全量缓存元数据的方式,使得元数据信息的获取只需要访问本地磁盘,极大地提升了元数据操作的性能。

数据缓存

  • 数据缓存管理

    ossfs与云存储网关软件版的数据缓存流程如下图所示。

    数据缓存流程图

    从上图可以看出,ossfs会自动清理本地缓存,因此无法缓存热点数据,数据都需要从云上下载,此外,请求在数据上云之后才会返回,极大的影响了性能。而云存储网关软件版的数据会异步上云,极大的提升了IO性能,同时数据落盘为同步写模式,保证请求在数据落盘之后才会返回。下表详细列举了ossfs和云存储网关软件版的数据缓存原理对比:
    对比项云存储网关软件版ossfs
    存储形式数据缓存在本地磁盘中,占用的空间预先分配并统一管理。数据以临时文件的方式存在系统盘/tmp目录下,临时文件对用户不可见,但使用总量是不可控的。
    若本地缓存命中,从磁盘读;否则从云上下载缺失的数据并写入本地磁盘供后续读取,对读更友好。缓存文件自动回收,本地一般无缓存,因此需要从云上下载至本地,再从本地缓存读数据。
    • 数据首先由内存缓存,达到缓存上限或文件close时,写入磁盘后立即返回。
    • 后台线程从磁盘中读取数据,异步回放上云,体验更好。
    • 文件关闭之后,无法及时感知文件是否上云。
    • 数据首先写入磁盘,再从磁盘读取文件,同步上云,上云之后才会返回。
    • 文件关闭时,即可在云上看到文件数据。
    • 如果文件比较大,在关闭的时候会卡顿很长一段时间。
  • 数据相关测试

    下面根据读写的不同情形,分别对ossfs和云存储网关软件版进行测试,具体结果如下:

    • 写测试
      测试项目云存储网关软件版ossfs
      拷贝500个4 KB文件至挂载点1.88 MB/s0.042 MB/s
      64个线程同时拷贝文件至挂载点(每个线程160个4 KB文件)3.46 MB/s0.051 MB/s
      拷贝1个5 GB文件至挂载点232.7 MB/s64.7 MB/s
      32个线程同时拷贝文件至挂载点(每个线程1个1 GB文件)340.3 MB/s95.8 MB/s
    • 读测试
      测试项目云存储网关软件版(本地无缓存)云存储网关软件版(本地有缓存)ossfs
      从挂载点拷贝500个4 KB文件至本地0.25 MB/s3.30 MB/s0.16 MB/s
      64个线程同时从挂载点拷贝文件至本地(每个线程160个4 KB文件)9.67 MB/s20.86 MB/s0.29 MB/s
      从挂载点拷贝1个5 GB文件至本地53.3 MB/s222.5 MB/s35.0 MB/s
      32个线程同时从挂载点拷贝文件至本地(每个线程1个5 GB文件)346.9 MB/s349.8 MB/s248.2 MB/s
    从上面的结果可以得出结论:
    • 数据写入的场景下,云存储网关软件版由于是异步上传,数据落盘之后即返回。而ossfs是同步上传,数据上传到OSS Bucket之后才能返回。因此在写大文件时或者网络较差时,云存储网关软件版优势更大。
    • 读写文件数目较多时,元数据的性能也在其中扮演了很重要的作用,因而云存储网关软件版表现更好。
    • 云存储网关软件版支持缓存数据到本地磁盘。数据重复读取的场景下,云存储网关软件版无需重复从云上下载数据,而是直接从本地缓存读取,所以云存储网关软件版在这一方面体验更优。
    • 读文件本地无缓存时,云存储网关软件版通过后台线程池,异步进行预取,而ossfs则是等待预取完成之后返回,因此云存储网关软件版在这方面更具优势。

POSIX语义兼容性对比

采用标准的POSIX语义测试集pjdfstest,分别对云存储网关软件版和ossfs进行POSIX语义兼容性测试,该测试集包含8832个测试用例,测试结果如下:

pjdfstest云存储网关软件版ossfs
通过率96.21%88.77%
从上表中可以看到,云存储网关软件版相比于ossfs,对标准POSIX语义的兼容性更高。其中云存储网关软件版失败的测试用例主要包含如下两个方面:
  • 文件名称长度超过限制(OSS Bucket文件名称长度必须在1~1023个字节之间)。
  • 云存储网关软件版不支持硬链接。

资源占用对比测试

采用IO测试工具FIO进行测试,通过top命令或者ps命令对进程的资源占用进行统计,并且记录最大值。

资源占用云存储网关软件版ossfs
内存最高占用635.7 MB43.1 MB
CPU最高占用365.0%680.7%
从上面的结果可以得出结论:
  • 内存使用方面,ossfs相对轻量。相比之下,云存储网关软件版在内存维护了一部分写的缓存用于IO加速,并且维护了结构更加复杂、占用了更多内存的变量,因此对内存要求更高。
  • CPU占用方面,云存储网关软件版的CPU使用更加轻量稳定。ossfs的CPU使用率会在文件集中上传时爆发增长。而云存储网关软件版因为有大量的异步线程,因而占用比较平稳。

监控运维能力对比

云存储网关软件版被激活之后,在主机侧和控制台侧均可监控、运维,而ossfs的运维途径更少,且成本更高。下表从主机侧(客户端侧)和控制台侧,分别对ossfs和云存储网关软件版的监控运维能力进行了对比。

监控运维能力对比云存储网关软件版ossfs
主机侧云存储网关软件版支持客户通过cli命令实时获取挂载点的状态。可查询信息包括:剩余元数据空间、数据缓存使用量、当前上传队列大小等等。上述监控信息,同样可以用于集成客户自身的监控运维系统。ossfs不支持实时获取挂载点信息,运维能力有限。
云存储网关软件版支持客户通过cli实时修改挂载点的部分配置,如客户的endpoint变更时,可以实时通过cli命令进行更新,提升客户运维效率。ossfs不支持实时更新挂载点配置。更新配置需要重新挂载,运维成本较高。
云存储网关软件版创建了守护进程,会定期检查挂载点状态,并尝试一些基本的错误恢复,如进程被意外中断后的恢复等等,降低客户运维成本。ossfs挂载点进程被意外中断后,无法自动恢复,需要人工介入,增加运维压力。
控制台侧网络联通时,云存储网关软件版会定期上报各挂载点的信息至控制台,控制台统一监控运维。上报的信息包括:挂载点上传队列大小、剩余元数据空间、数据缓存使用量、读、写性能数据、数据上传、下载量等等。ossfs并未集成相应的控制台,运维途径较少。
控制台监控信息后续可以接入云监控,用户可以自主制定一些告警策略,提升运维能力。

其它功能对比

这里介绍云存储网关软件版相比于ossfs,具备的一些特有的高级特性与稳定性能力。

  • windows平台支持

    云存储网关软件版同时支持Windows平台,可以将OSS Bucket挂载至一个本地路径(如D:\mp),或是挂载为一个新的磁盘符(如Z:\)。

  • 高级特性
    • 限流支持:支持对用户写入的带宽以及和OSS之间的同步带宽进行限流,方便协调多个客户端之间的网络带宽使用。
    • 忽略删除:云存储网关软件版支持忽略删除,可以选择不同步删除操作到OSS Bucket,避免用户的数据被误删除。
    • 其他高级特性:云存储网关软件版支持通过命令行工具,实时获取、设置直读OSS、只读模式等其它多个高级选项。
  • 稳定性相关特性
    • 意外处理:云存储网关软件版有守护进程,机器重启或挂载点进程被意外终止时会自动拉起所有的挂载点。db中存储操作日志,如果文件上传中断,会重新继续上传。无需用户自己维护启动脚本。
    • 失败重传:云存储网关软件版是异步上传,网络失败的情况下会自动重试失败的部分,而不是像ossfs直接返回失败。
    • 超大文件写入支持:ossfs数据缓存落在系统盘/tmp目录下,同时读写的文件大小超过系统盘大小时,会将系统盘占满(默认预留50 M空间)。缓存盘占满时,强制提前上传,此时IO会暂时中断。云存储网关软件版有完备的缓存空间管理,已使用缓存空间到达一定水位时,会自动触发回收。