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

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

相关文章

Redis存储的列表分页和检索的实现方法

《Redis存储的列表分页和检索的实现方法》在Redis中,列表(List)是一种有序的数据结构,通常用于存储一系列元素,由于列表是有序的,可以通过索引来访问元素,因此可以很方便地实现分页和检索功能,... 目录一、Redis 列表的基本操作二、分页实现三、检索实现3.1 方法 1:客户端过滤3.2 方法

JSON字符串转成java的Map对象详细步骤

《JSON字符串转成java的Map对象详细步骤》:本文主要介绍如何将JSON字符串转换为Java对象的步骤,包括定义Element类、使用Jackson库解析JSON和添加依赖,文中通过代码介绍... 目录步骤 1: 定义 Element 类步骤 2: 使用 Jackson 库解析 jsON步骤 3: 添

C++中使用vector存储并遍历数据的基本步骤

《C++中使用vector存储并遍历数据的基本步骤》C++标准模板库(STL)提供了多种容器类型,包括顺序容器、关联容器、无序关联容器和容器适配器,每种容器都有其特定的用途和特性,:本文主要介绍C... 目录(1)容器及简要描述‌php顺序容器‌‌关联容器‌‌无序关联容器‌(基于哈希表):‌容器适配器‌:(

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

Spring常见错误之Web嵌套对象校验失效解决办法

《Spring常见错误之Web嵌套对象校验失效解决办法》:本文主要介绍Spring常见错误之Web嵌套对象校验失效解决的相关资料,通过在Phone对象上添加@Valid注解,问题得以解决,需要的朋... 目录问题复现案例解析问题修正总结  问题复现当开发一个学籍管理系统时,我们会提供了一个 API 接口去

Java如何通过反射机制获取数据类对象的属性及方法

《Java如何通过反射机制获取数据类对象的属性及方法》文章介绍了如何使用Java反射机制获取类对象的所有属性及其对应的get、set方法,以及如何通过反射机制实现类对象的实例化,感兴趣的朋友跟随小编一... 目录一、通过反射机制获取类对象的所有属性以及相应的get、set方法1.遍历类对象的所有属性2.获取

使用JavaScript操作本地存储

《使用JavaScript操作本地存储》这篇文章主要为大家详细介绍了JavaScript中操作本地存储的相关知识,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下... 目录本地存储:localStorage 和 sessionStorage基本使用方法1. localStorage

java中VO PO DTO POJO BO DO对象的应用场景及使用方式

《java中VOPODTOPOJOBODO对象的应用场景及使用方式》文章介绍了Java开发中常用的几种对象类型及其应用场景,包括VO、PO、DTO、POJO、BO和DO等,并通过示例说明了它... 目录Java中VO PO DTO POJO BO DO对象的应用VO (View Object) - 视图对象

vue如何监听对象或者数组某个属性的变化详解

《vue如何监听对象或者数组某个属性的变化详解》这篇文章主要给大家介绍了关于vue如何监听对象或者数组某个属性的变化,在Vue.js中可以通过watch监听属性变化并动态修改其他属性的值,watch通... 目录前言用watch监听深度监听使用计算属性watch和计算属性的区别在vue 3中使用watchE

Java将时间戳转换为Date对象的方法小结

《Java将时间戳转换为Date对象的方法小结》在Java编程中,处理日期和时间是一个常见需求,特别是在处理网络通信或者数据库操作时,本文主要为大家整理了Java中将时间戳转换为Date对象的方法... 目录1. 理解时间戳2. Date 类的构造函数3. 转换示例4. 处理可能的异常5. 考虑时区问题6.