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

2020-11-22 09:45:44 +08:00
 cpstar

首先对象存储是个好东西,自己的环境可能需要一套私有系统,目前有基于 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 高什么的,从何谈起?都是访问到某个文件,除了检索以外,真正的文件传输,模型并没有变化。我曾经以为对象存储会做内存缓存什么的。

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

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

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

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/727977

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX