把对象存储转为文件存储,到底香不香?

2024-05-10 17:48

本文主要是介绍把对象存储转为文件存储,到底香不香?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目前开源的文件存储有很多,譬如NFS、GlusterFS、CephFS等,但实话实话这些文件存储都存在一定的问题,譬如NFS的多集群要折腾、GlusterFS的小文件存储性能差、CephFS的运维复杂度和稳定性不高。结合公司的业务场景:图片、pdf、文档 存储的特性,在公司内部主推的是对象存储。
但在推广对象存储的时候,也面临一些老系统的改造压力,这些老系统之前都是使用商业NAS,如果迁移到对象存储需要改造的点有很多,而且还需要考虑历史数据的读取。如果对象存储能够保持和之前商业NAS一样的有个文件系统,通过目录和文件的方式读写那就可以快速的帮助业务迁移到对象存储。
我们都知道Fuse文件系统,它是linux提供的用户态文件系统,曾帮助我们解决docker的proc文件系统问题,这次我第一个想到的也是它。能不能通过Fuse对接到S3对象存储上面呢?搜索了一下,还真有很多相关的实现,happy。赶紧拿来测试一下。

首先打包一个s3fs的Docker镜像

FROM  xx.xx.xx/basic/centos:7.5.1804 
RUN  yum install epel-release -y && yum install s3fs-fuse -y

如果是Docker直接启动

# docker run -it   --privileged  

然后在容器内执行挂载前需要将s3的秘钥写入passwd-s3fs

#  echo ACCESS_KEY:SECRET_KEY > ${HOME}/.passwd-s3fs&&chmod 600 ${HOME}/.passwd-s3fs
# s3fs   bucketname /abc/   -o url=http://s3.xx.xx/ -o use_path_request_style  -o endpoint=default

挂载成功后便可以像操作本地文件系统一样的读写数据了。

sh-4.2# cd /abc
sh-4.2# ls
aa  abc.txt  bb  cc  kk

可以看到和我们对象存储里面的内容是保持一致的(截图来着我们team自研的对象存储管理页面)
在这里插入图片描述
是不是很香,如果是在kubernetes的环境中,需要先开启策略

      containers:- name: my-containersecurityContext:privileged: truecapabilities:add:- SYS_ADMIN

这种使用方式相对于常规的容器挂载文件系统的好处有两点:
第一是避免业务改造代码
第二是可以避免主机挂载,如果是主机挂载NAS,当NAS出现故障后,会导致容器无法删除、Docker hang住等问题。
但这种方式也不是万能的,毕竟的它的后端还是一个对象存储,对象存储的最佳实践就是一次写入,后续都是读请求。如果有个业务的研发误用,将s3挂载的目录用于记录日志,那么无疑是打开了潘多拉的魔盒,一直PUT对象。所以我们需要监控每个bucket的读写次数并设置告警,避免误用。所以这样看来它又并不是那么香了。
所有的技术都是有适用场景的,没有银弹,没有银弹,没有银弹,重要的事情说三遍。

补充说明:

  • 如果上面s3挂载没有成功,也不会报错,可以通过mount命令查看是否挂载成功
    可以通过追加“-o dbglevel=info -f -o curldbg”查看debug信息。

  • 如果是window或则mac也支持挂载,不过看了几款都是收费(可以试用30天)。

这篇关于把对象存储转为文件存储,到底香不香?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/977131

相关文章

SpringBoot3.X 整合 MinIO 存储原生方案

《SpringBoot3.X整合MinIO存储原生方案》本文详细介绍了SpringBoot3.X整合MinIO的原生方案,从环境搭建到核心功能实现,涵盖了文件上传、下载、删除等常用操作,并补充了... 目录SpringBoot3.X整合MinIO存储原生方案:从环境搭建到实战开发一、前言:为什么选择MinI

Python实现对阿里云OSS对象存储的操作详解

《Python实现对阿里云OSS对象存储的操作详解》这篇文章主要为大家详细介绍了Python实现对阿里云OSS对象存储的操作相关知识,包括连接,上传,下载,列举等功能,感兴趣的小伙伴可以了解下... 目录一、直接使用代码二、详细使用1. 环境准备2. 初始化配置3. bucket配置创建4. 文件上传到os

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

MySQL之InnoDB存储引擎中的索引用法及说明

《MySQL之InnoDB存储引擎中的索引用法及说明》:本文主要介绍MySQL之InnoDB存储引擎中的索引用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录1、背景2、准备3、正篇【1】存储用户记录的数据页【2】存储目录项记录的数据页【3】聚簇索引【4】二

MySQL之InnoDB存储页的独立表空间解读

《MySQL之InnoDB存储页的独立表空间解读》:本文主要介绍MySQL之InnoDB存储页的独立表空间,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、独立表空间【1】表空间大小【2】区【3】组【4】段【5】区的类型【6】XDES Entry区结构【

SQLite3 在嵌入式C环境中存储音频/视频文件的最优方案

《SQLite3在嵌入式C环境中存储音频/视频文件的最优方案》本文探讨了SQLite3在嵌入式C环境中存储音视频文件的优化方案,推荐采用文件路径存储结合元数据管理,兼顾效率与资源限制,小文件可使用B... 目录SQLite3 在嵌入式C环境中存储音频/视频文件的专业方案一、存储策略选择1. 直接存储 vs

SpringMVC高效获取JavaBean对象指南

《SpringMVC高效获取JavaBean对象指南》SpringMVC通过数据绑定自动将请求参数映射到JavaBean,支持表单、URL及JSON数据,需用@ModelAttribute、@Requ... 目录Spring MVC 获取 JavaBean 对象指南核心机制:数据绑定实现步骤1. 定义 Ja

Python打印对象所有属性和值的方法小结

《Python打印对象所有属性和值的方法小结》在Python开发过程中,调试代码时经常需要查看对象的当前状态,也就是对象的所有属性和对应的值,然而,Python并没有像PHP的print_r那样直接提... 目录python中打印对象所有属性和值的方法实现步骤1. 使用vars()和pprint()2. 使

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

Springboot3+将ID转为JSON字符串的详细配置方案

《Springboot3+将ID转为JSON字符串的详细配置方案》:本文主要介绍纯后端实现Long/BigIntegerID转为JSON字符串的详细配置方案,s基于SpringBoot3+和Spr... 目录1. 添加依赖2. 全局 Jackson 配置3. 精准控制(可选)4. OpenAPI (Spri