对象存储 Bucket 究竟是什么?

452次阅读  |  发布于3年以前

大纲

Bucket 是什么?

对象存储系列文章,从 Bucket 谈起。对象存储里面只有两个跟资源相关的名词:Bucket,Object。Bucket 中文直译为”桶“,Object 显而易见就是”对象“。所有 Object 都必须属于某个 Bucket,无一例外。Bucket 通常也是计费、权限控制、生命周期等高级功能的管理实体。

一般来讲,公有云厂商会确保 Bucket 名称在全球地域服务具有全局唯一性,且不能修改。比如说,你使用 AWS 的 S3 服务,在北美地域有个叫做 Test 的 Bucket,在其他地域就不允许有同名的 Bucket 了。其实国内的公有云厂商个别做差异化的时候,在这个地方会有不一样,比如允许不同地域可以有同名的 Bucket。这个带来的好处就是用户方便了,因为不同地域可以设置相同 Bucket 了,不好的地方就是对象存储系统本身的实现可能会相对复杂。

一般来讲,Bucket 作为一个抽象的容器概念,空间是无限的,也就是说,用户存放的 Object 的数量和大小总量没有限制,空间大小只依赖于实际的物理资源,公有云厂商也是希望你存储进来的数据越多越好,他们才有赚头呀(机器不够他们随时可以扩容,这个用户是不感知的)。

Bucket 命名规范

公有云厂商一般都会有这个限制,这个和 S3 限制的一致:

  1. 只能包括小写字母,数字,短横线(-)
  2. 必须以小写字母或者数字开头
  3. 长度必须在 3-63 字节之间

Bucket 权限类别

Bucket默认提供三种访问权限:私有读写、公有读私有写和公有读写。其访问权限可通过对象存储控制台上Bucket的权限管理进行修改。

私有读写

只有 Bucket 的创建者或者被授权的账号才对该 Bucket 中的 Object 有读写权限,其他人对该 Bucket 中的 Object 都没有读写权限。Bucket 访问权限默认就是私有读写,也就是要 AK/Sk 来访问。

公有读私有写

任何人(包括匿名访问者)都对该 Bucket 中 Object 有读权限,但只有 Bucket 创建者及被授权的账号才对该 Bucket 中 Object 有写权限。

公有读写

任何人(包括匿名访问者)都对该 Bucket 中对象有读权限和写权限。这种方式用起来要慎重点,方便是方便了,但是安全系数最低。

Bucket 的创建

一般可以使用 3 种方式来创建一个 Bucket,这三种方式也是操作对象的三种方式(本质上都是一种啦,发送正确的 S3 协议包给到对象存储服务系统):

方式一:使用公有云的用户 Portal 系统

这个是新手最早接触到,也是容易接受的一种方式。一般用来体验对象存储简单的上传下载。

方式二:使用 SDK

按照自己的技术栈,选定特定语言的 SDK 版本。比如你可以选择 S3 的 golang 版本的 SDK。

方式三:使用第三方工具

Bucket 的删除

S3 的实现中,必须要是空 Bucket 才能被删除。(但其实这个也是一个有差异化的功能,公有云厂商有些场景是允许非空 Bucket 的删除的)

思考问题

问题一:Bucket 到底是什么,有没有一个实体?

我们知道 Object 的概念很容易理解,因为 Object 就是用户实实在在上传的数据。Bucket 呢?有没有一个实体?

其实 Bucket 就是一个命名空间而已。对象存储系统内部实现的方式也是各式各样。比如开源的 Minio 举例,Bucket 就是实现成了目录,对象就是目录下的文件。

或者,你自己实现的对象存储可以实现成字符串,这个 Bucket 里的对象只需要前缀加上这个 Bucket 前缀,等等。

问题二:对象存储有没有目录的概念?

首先明确一点,对象存储中只有 Bucket,Object 的两层关系。没有目录概念!!!

那有些小伙伴可能质疑了,我明明用 S3Browser ,ossbrowser 这样的工具就看到了目录,比如你上传一个 key 名为:"/root/dir1/test.txt" 到 Bucket 里面,rootdir1 这个明明就是给我显示成了目录关系。

其实不是的。对于对象存储后端来讲,你只是上传了一个 key = “/root/dir1/test.txt” 的对象,还是只有 Bucket/Object 两层关系。目录只是 s3Browser, ossbrowser 这样的客户端工具为了好看做出来的效果,客户端工具识别到 key 里面包含了斜线 “/” 之后,就用最经典的目录层次效果给你呈现了。(旁白:客户端工具给你看的友好界面,其实服务端只认最原始的 key)

Bucket 是对象存储非常重要的概念。此文概述,后面会慢慢说起和 Bucket 关联的一系列功能。

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8