阿里云存储网关(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软件版有一定优势。
目录
相关文章
|
16天前
|
运维 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 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
|
4月前
|
人工智能 缓存 Cloud Native
用 Higress AI 网关降低 AI 调用成本 - 阿里云天池云原生编程挑战赛参赛攻略
《Higress AI 网关挑战赛》正在火热进行中,Higress 社区邀请了目前位于排行榜 top5 的选手杨贝宁同学分享他的心得。本文是他整理的参赛攻略。
549 73
|
1月前
|
运维 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 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
|
2月前
|
运维 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 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
|
3月前
|
Cloud Native 关系型数据库 Serverless
基于阿里云函数计算(FC)x 云原生 API 网关构建生产级别 LLM Chat 应用方案最佳实践
本文带大家了解一下如何使用阿里云Serverless计算产品函数计算构建生产级别的LLM Chat应用。该最佳实践会指导大家基于开源WebChat组件LobeChat和阿里云函数计算(FC)构建企业生产级别LLM Chat应用。实现同一个WebChat中既可以支持自定义的Agent,也支持基于Ollama部署的开源模型场景。
685 28
|
2月前
|
数据采集 传感器 监控
.NET 工控网关 轻量级组态软件
【10月更文挑战第10天】.NET 工控网关是一种基于 .NET 平台开发的设备,用于连接工业控制系统中的不同网络和设备,实现数据传输和协议转换。它能统一处理多种协议(如 Modbus、Profibus)的数据,便于后续系统处理。.NET 平台的优势包括开发效率高、跨平台能力强及安全性高,适用于工业物联网环境。此外,轻量级组态软件具备体积小、资源占用少的特点,可在资源受限的设备上运行,提供数据采集、监控、报警及数据分析等功能,简化工业自动化过程。
|
4月前
|
人工智能 Cloud Native 安全
统一多层网关好处多,阿里云云原生 API 网关打造全能型网关
本文分享了作为一款全能型网关【云原生 API 网关】是如何帮助企业落地统一网关架构的。
8061 12
|
4月前
|
API
阿里云微服务引擎及 API 网关 2024 年 7 月产品动态
阿里云微服务引擎及 API 网关 2024 年 7 月产品动态。
189 18
|
3月前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 云原生 API 网关 2024 年 08 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
|
4月前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 API 网关 2024 年 07 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要。

热门文章

最新文章