V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
cpstar
V2EX  ›  问与答

对象存储的一些疑惑(以 MinIO 为例)

  •  
  •   cpstar · 2020-11-22 09:45:44 +08:00 · 3901 次点击
    这是一个创建于 1460 天前的主题,其中的信息可能已经有所发展或是发生改变。

    首先对象存储是个好东西,自己的环境可能需要一套私有系统,目前有基于 FC 和 SAN 、超融合等传统方式以及 NAS 方式提供给虚机共享使用的存储,然后这几天学习研究了一下 MinIO 的相关内容。于是有点糊涂了。

    1 对象存储还是要基于 OS 的文件系统的,所以文件系统的效率还是根本上决定着 MinIO 的效率,这个结论应当是对的?然后两个具体分支疑惑:

    1.1 根据搭建的测试环境,假设桶内不组织目录,那桶内存储了 100w 个文件,那在 OS 看来,就是桶目录下有 100w 个子目录,每个子目录有对象本身和其描述文件,或者就直接是文件本身(不使用那个 ER 码的话)。于是 OS 的文件系统组织这个目录不就很费劲了?

    1.2 如果这个文件系统不是本机,比如虚机+NFS,那性能就更没办法保障了,这就不说了。回到 MinIO 的基本模型,什么 Drive 、Set,如果是 Drive,还是不能绕开文件系统,比如一台实体机有 12+2 块盘,额外 2 块用于系统了,剩下 12 块,不组阵列,直接裸盘挂载,然后分区指定文件系统类型,然后给 MinIO 使用,我就想问一下,相较于组阵列,就算是最不节省的 RAID10 (都是有效空间砍半),吞吐感觉没啥变化甚至还不如 RAID10 吧。于是何必呢?如果挂阵列,那对于 MinIO 能看到的就是一个 drive

    2 所谓的对象存储,实际上是在 HTTP 层提供了一系列协议来访问具体文件,而传统的 SAN 、FC 、NFS 则完全是操作系统以下层面的协议,或者说是操作系统层(或 SHELL 层)已经实现的协议,对象存储协议则相对高层一些。那么,抛开标准协议( S3 )这个事情,如果这么做,好像原则上也是对象存储?

    2.1 通过某种方式存储到文件系统中(包括计算摘要等信息),以目录形式进行有效组织,在 http 容器中做某种插件,能够识别来 GET 的文件摘要及其对应存储位置,然后 response 回去相应文件(对象)。那么从 IO 角度,发送文件还是 磁盘 IO<=>网络 IO 。

    2.2 如果磁盘对象脱离不了 磁盘 IO<=>网络 IO,有些报告提到对象存储的效率要比 NAS 高什么的,从何谈起?都是访问到某个文件,除了检索以外,真正的文件传输,模型并没有变化。我曾经以为对象存储会做内存缓存什么的。

    除了能够查到的说什么对象存储的优势、意义以外,好像没搞明白对象存储背后一些机理到底是什么,于是意义何在?给我答疑解惑一下。

    第 1 条附言  ·  2020-11-23 08:45:40 +08:00

    截至14#,稍微总结一下

    1 MinIO这种对象存储的实现,只是一种实现方法,其解决的不是下层存储问题而是上层接口访问技术

    2 对象存储有很多具备原生下层存储的实现方法,比如一些厂商提供的集成了Ceph之类的存储方案

    3 对象存储的根本意义还是存在的:对上层海量能力、访问效率等,对下层分布式存储、安全可靠等

    14 条回复    2020-11-22 17:21:13 +08:00
    lhx2008
        1
    lhx2008  
       2020-11-22 09:55:13 +08:00 via Android
    对象存储显然不等于文件存储,现在你把对象存储当文件存储用,读写还得转成 http,性能高不了
    cpstar
        2
    cpstar  
    OP
       2020-11-22 10:01:02 +08:00
    @lhx2008 所以我对这个很疑惑,当然不等于文件存储,但是对象存储的(至少这个 MinIO )的下层是什么,不还是文件存储么?有一些厂商的集成方案可能另当别论,毕竟还是高度集成的。
    lhx2008
        3
    lhx2008  
       2020-11-22 10:08:08 +08:00 via Android
    @cpstar 分布式的块存储 对象存储 文件存储 都可以要把数据切分成一小块一小块的,因此性能是通过并行写入多块盘或者多台机来提高的
    AndyAO
        4
    AndyAO  
       2020-11-22 10:14:16 +08:00
    "对象存储还是要基于 OS 的文件系统的"可能是错误的,因为"Object storage can be implemented at multiple levels, including the device level (object-storage device), the system level, and the interface level. "
    yzbythesea
        5
    yzbythesea  
       2020-11-22 10:16:32 +08:00
    粗浅得看了一下,貌似 MiniIO 是基于 S3 的。对象存储不基于 OS 的文件系统,S3 的架构是商业机密,但是谣传是依赖 DynamoDB 的。对象存储可以更底层的操作物理存储介质,他本身就区别于一般我们看到的 NFS 或者 AFS 这种文件存储架构。
    lhx2008
        6
    lhx2008  
       2020-11-22 10:19:05 +08:00 via Android
    对象存储的优点可能是成本控制吧,云上对象存储的底层甚至可以选择磁带
    0TSH60F7J2rVkg8t
        7
    0TSH60F7J2rVkg8t  
       2020-11-22 10:21:43 +08:00
    我感觉对象存储和磁盘存储文件的模式是一样的,你可以把系统 api 当作对象存储的 http api,至于底层如何存的,高层并不需要知道。就好像,你用机械硬盘、固态硬盘,它们存储方式不一样,寻址方式也不一样,每个数据块的读取都是由 api 来完成,对上层来看,就是要了个文件,底层就从存储介质里把文件取出来了。你甚至可以理解成,系统 api 就是将二进制的数据以文件这个对象存储和读取的就行了。

    只不过现在的对象存储依然是抽象出了这一层,把底层存储文件(可能是文件块,可能是一个存储器存储,也可能是一群存储器存储,同时还有容灾备份等)封装成了一个 http 接口,并通过网络传输而已。
    opengps
        8
    opengps  
       2020-11-22 10:36:43 +08:00 via Android
    对象存储
    为了解耦合,共享,多副本,等一系列优势的组合,最终还得用一个单独的服务来实现的,再好的方案也脱离不了硬件底层
    hcx0
        9
    hcx0  
       2020-11-22 10:37:45 +08:00
    先看 Google File System 这篇文章,对分布式存储有了基础的概念就不会有这俩问题了
    polythene
        10
    polythene  
       2020-11-22 11:23:50 +08:00   ❤️ 1
    MinIO 的优势从来不是它对单个文件系统的性能优势,它的优势在于分布式:
    1. EC 编码保证提供数据冗余性的同时,极大的降低了存储成本(对比 RAID1 )
    2. 数据分片后存在不同的 host 上,提供了自动容灾能力(对比 RAID0 的容灾能力是磁盘级别的,但如果物理机挂了,那它什么也做不了,另外对 RAID0 的运维操作是需要人工介入的)
    zhoudaiyu
        11
    zhoudaiyu  
       2020-11-22 12:07:17 +08:00 via iPhone
    @polythene 我看了 Minio 分布式部署文档 总磁盘数好像得是 4-16 的偶数倍个?不太懂
    AndyAO
        12
    AndyAO  
       2020-11-22 12:14:23 +08:00
    如果是我想了解这些问题的话,会先找出并阅读和学习可靠资料.
    这些资料可能是书和技术文档.
    然后提出疑问并测试,并去官方和专业论坛寻求支持.
    twl007
        13
    twl007  
       2020-11-22 17:20:22 +08:00   ❤️ 1
    1. 对象存储只是一个协议或者概念 至于你底层用什么其实根本不关心的 底下是你的 fs 也好 是你的 NFS 也好 其实对对象存储来说都可以 具体看你自己的实现了 一般架构上都会有一个 gateway 存在来处理你的请求 至于 gateway 要如何帮你把文件落盘存储那就是你自己的实现了

    你现在这么以为只是你以 Minio 做例子罢了 如果是 Ceph 的话其实 Index 和 Data 是在不同的 Pool 上面的 而这个 Pool 又建立在 RADOS 上面 RADOS 自己是直接使用 Bluestore 去管理裸设备的 跟你的 Minio 实现并不一样 现在新的一个叫 ozone 如果你去看 ozone 的话 ozone 的管理模式又变了 虽说是基于你自己的 fs 但是人家是通过 Container 实现了对不同的 Block 的管理 然后利用 Ratis 去管理 Replication 在此之上人家实现了 S3 Protocol 或者是 o3fs 甚至是一个兼容 HDFS 的文件系统

    2. 对象存储的重点不在性能上 需要性能的话请选择 NVMeOF 你要区分不同存储的特点 对象存储的好处是可以存储海量数目的文件 并且可以横向扩展 对于一些传统的存储来说 横向扩展还是有很多限制的 而且在存储海量文件的时候也会有管理上的麻烦 就像你自己举例的那样 Minio 就是你说的那么做的

    各个存储类型都有自己使用的范围 建议多看看不同的文件系统之间实现的差别和局限性再来讨论这个问题 另外就是要结合你自己的需求来选择合适的存储
    VHacker1989
        14
    VHacker1989  
       2020-11-22 17:21:13 +08:00
    minio 虽然用了操作系统的文件系统,但自己维护了文件分片在各个节点的索引
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2395 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 16:08 · PVG 00:08 · LAX 08:08 · JFK 11:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.