阿里云存储网关(CSG)软件版与ossfs对比(数据缓存篇)

简介: 本文从文件数据的管理、使用角度,详细对比阿里云存储网关(CSG)软件版与ossfs之间的区别。

1. 前言

ossfs是一款开源的工具,可以将Oss Bucket挂载在本地机器上,以POSIX文件接口对存在Oss Bucket中的文件进行访问。不过,该工具从2019年起,已经不再维护了。

阿里云云存储网关(Cloud Storage Gateway, CSG)软件版(以下简称CSG软件版)。同样是一款可以安装在阿里云用户机器(ECS,或用户自建机房服务器)上的产品,将OSS Bucket挂载到用户机器,以POSIX文件接口进行访问。在实现上,CSG软件版衍生自已经商业化的CSG托管版,与ossfs有较大的不同,并且在使用上引入了监控等多项功能。

元数据的使用管理角度的对比,在《阿里云存储网关(CSG)软件版与ossfs对比(元数据篇)》一文中已经已经有阐述,您可以点击该链接查看详情。

本文则将从数据缓存的使用和管理的角度,比较CSG软件版和ossfs的区别。


2. 原理对比

2.1 CSG软件版缓存实现

CSG软件版的数据缓存原理可以参考下图。

  • 当CSG软件版挂载点收到文件写请求时,数据会先在内存中缓存住。
  • 如果内存缓存达到上限,则内存中数据会写至磁盘上,防止占用内存过多。
  • 文件close时,内存中缓存的数据也会写至磁盘上。同时,本地的db中记录一份操作日志。随即write请求返回。
  • 后台线程异步回放日志,将文件在本地的缓存上传至OSS Bucket。


CSG软件版支持配置缓存的路径、缓存空间大小。当本地磁盘的缓存到达高水位时,此时读写会触发限流。并且会启动线程,回收磁盘空间。

如果本地有数据缓存,读请求可以直接从本地磁盘获取数据,加速读取。


image.png

CSG软件版写数据流程


2.2 ossfs缓存实现

ossfs的文件数据也会首先写入本地的缓存盘,然后上传到OSS Bucket中。当缓存空间足够时,文件的数据会先写入本地的缓存盘,在文件flush时,上传到OSS Bucket,上传成功之后才会返回。当缓存空间不足时,会提前上传文件的part,并将文件的缓存清理。

ossfs支持配置缓存路径和不配置缓存路径(默认模式)两种模式。如果指定缓存路径,文件的数据缓存不会被显示回收,因此一般使用时,均采用默认模式(不指定缓存路径)挂载。因此下文均分析、对比默认模式。


ossfs如果未指定缓存路径,在挂载点收到文件写请求时,数据缓存的使用方式如下图所示。

  • 在create/open阶段,在/tmp路径下创建特殊的tmpfile,作为文件缓存,该文件对文件系统不可见,且在close的时候会自动被清理缓存
  • 文件先写入本地缓存,并且为异步落盘,即先写入page cache即返回。
  • 在flush阶段,将文件上传至Oss Bucket,上传成功之后请求返回。


由于数据缓存是临时本地文件,在close之后就会被清除,因此无需显示回收缓存。

由于本地只会临时缓存,所以读文件时,并不能使用使用本地缓存加速。

image.png


2.3 原理对比


Ossfs与CSG软件版的数据缓存原理对比


ossfs

CSG软件版

存储形式

数据以临时文件的方式存在系统盘/tmp目录下,临时文件对用户不可见,但使用总量不太可控。

数据缓存在本地磁盘中,占用的空间事先分配并统一管理。

缓存文件自动回收,本地一般无缓存,因此每次读需要从云上下载至本地,再从本地缓存读数据。

若本地缓存命中,从磁盘读;否则从云上下载缺失的数据并写入本地磁盘供后续读取,对读更友好。

  • 数据首先写入磁盘,再从磁盘读取文件,同步上云,上云之后才会返回。
  • 文件关闭时,即可在云上看到文件数据。
  • 如果是大文件文件关闭的时候会卡很长一段时间。
  • 数据首先由内存缓存,达到缓存上限或文件close时,写入磁盘后立即返回。
  • 后台线程从磁盘中读取数据,异步回放上云,体验更好。
  • 文件关闭之后,无法及时感知文件是否上云。

数据回收

每次文件close时,文件的缓存自动回收

缓存到达高水位时,后台线程自动回收


3. 测试

测试环境配置为阿里云ECS:

  • CPU:24核
  • 内存:48GB
  • 磁盘:500GB,ESSD PL1,带宽上限为350MB/s


另外,用于对比测试的Ossfs版本为1.80.6版本。下面根据读写的不同情形,分别进行了对比测试,具体结果见下文。


3.1. 写测试

CSG软件版

ossfs

单线程,写小文件

1.88MB/s

0.042MB/s

cp500个本地4K小文件至挂载点。

多线程,写小文件

3.46MB/s

0.051MB/s

64线程。每个线程cp160个本地4K小文件至挂载点。

单线程,写大文件

232.7MB/s

64.7MB/s

cp1个本地5G大文件至挂载点。

多线程,写大文件

340.3MB/s

95.8MB/s

32线程,每个线程cp1个本地1G大文件至挂载点。

注:由于CSG软件版异步进行文件上传,因此统计CSG软件版的写带宽时,不包含文件上云时间。


3.2. 读测试

CSG软件版

Ossfs

本地无缓存

本地有缓存

单线程,读小文件

0.25MB/s

3.30MB/s

0.16MB/s

cp500个挂载点4K小文件至本地。

多线程,读小文件

9.67MB/s

20.86MB/s

0.29MB/s

64线程。每个线程cp160个挂载点4K小文件至本地。

单线程,读大文件

53.3MB/s

222.5MB/s

35.0MB/s

cp1个挂载点5G大文件至本地。

多线程,读大文件

346.9MB/s

349.8MB/s

248.2MB/s

32线程,每个线程cp1个挂载点1G大文件至本地。CSG软件版达到磁盘带宽上限。


3.3 结果分析

从上面的结果可以看出:

  • 数据写入的场景下,CSG软件版由于是异步上传,数据落盘之后即返回。而Ossfs是同步上传,数据上传到OSS Bucket之后才能返回。因此在写大文件时,以及网络较差的情形下,CSG软件版优势较大。
  • 读写文件数目较多时,元数据的性能也在其中扮演了很重要的作用,因而CSG软件版表现更好。
  • CSG软件版支持缓存数据到本地磁盘。数据重复读取的场景下,无需重复从云上下载,直接从本地缓存读取即可,优势巨大。
  • 读文件本地无缓存时,CSG软件版通过后台线程池,异步进行预取,而Ossfs则是等待预取完成之后返回,因此CSG软件版有一定优势。
目录
相关文章
|
3天前
|
负载均衡 容灾 Cloud Native
云原生应用网关进阶:阿里云网络ALB Ingress 全能增强
在过去半年,ALB Ingress Controller推出了多项高级特性,包括支持AScript自定义脚本、慢启动、连接优雅中断等功能,增强了产品的灵活性和用户体验。此外,还推出了ingress2Albconfig工具,方便用户从Nginx Ingress迁移到ALB Ingress,以及通过Webhook服务实现更智能的配置校验,减少错误配置带来的影响。在容灾部署方面,支持了多集群网关,提高了系统的高可用性和容灾能力。这些改进旨在为用户提供更强大、更安全的云原生网关解决方案。
36 4
|
28天前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 云原生 API 网关 2024 年 11 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
|
2月前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 云原生 API 网关 2024 年 10 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
|
3月前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 云原生 API 网关 2024 年 09 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
|
存储 缓存 对象存储
利用云存储网关在Windows上挂载OSS
概述 阿里云OSS提供了海量低成本高可靠的对象存储,非常适合于存储文件,图像,视频等非结构化数据,同时也提供了丰富的SDK生态给开发者集成使用。但是对于开发资源有限的小企业或者个人用户而言,直接使用OSS存储还是存在诸多不便。
9691 0
|
存储 Linux API
如何经济高效使用云存储网关对接OSS存储
存储网关是一款可以为OSS存储提供文件访问接口的产品,从而用户可以像使用NAS一样在Windows/Linux操作系统里面直接挂载OSS进行使用。众所周知,OSS存储具有多种存储类型。那么对于所有的存储类型,云存储网关是否都适用呢?本文将围绕这一话题,展开一些探讨。
263 0
|
存储 Kubernetes 文件存储
使用阿里云容器ACK通过云存储网关(CSG)挂载OSS
本文将详细介绍如何使用阿里云容器服务ACK通过云存储网关挂载OSS。
1462 1
使用阿里云容器ACK通过云存储网关(CSG)挂载OSS
|
消息中间件 存储 Linux
如何同步OSS Bucket数据到云存储网关SMB/NFS共享
云存储网关主要提供了反向同步和极速同步两种方法来同步OSS Bucket里面的数据到网关侧的共享里。本文将对这两种数据同步的方法均做下介绍,给出它们的实现原理以及分别适用的场景。反向同步是基于对文件夹进行全量扫描比对的方式来发现OSS Bucket里面的数据变化,极速同步则是基于OSS Bucket数据变化增量的方式来实现的。
3561 0
如何同步OSS Bucket数据到云存储网关SMB/NFS共享
|
存储 缓存 API
云存储网关共享透明读写OSS归档文件
本文通过具体的例子展示了云存储网关NFS共享所支持的对OSS Bucket里面归档文件的透明读写功能。对于SMB共享虽然不能完全支持透明读写功能,但是也能够帮助用户自动执行解冻过程。
3263 0
云存储网关共享透明读写OSS归档文件
|
存储 Linux 对象存储
如何利用用云存储网关作为Windows docker存储访问OSS
本文像用户介绍在windows的容器环境中,如果利用阿里云云存储网关的smb共享作为后端存储,实现docker容器内的数据上云,在docker中直接访问对象存储OSS中的数据。
2757 0
如何利用用云存储网关作为Windows docker存储访问OSS