对象存储 Bucket 究竟是什么?

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。

方式三:使用第三方工具

  • 可以用公有云厂商自己提供的工具。比如,阿里 OSS 提供了 ossutil 命令行工具和 ossbrowser 图形化工具。腾讯 COSCMD 命令行工具,七牛提供了 qshell 工具;
  • 也可以用开源免费的第三方工具,比如 S3Browser、S3Cmd 等第三方工具;

Bucket 的删除

S3 的实现中,必须要是空 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 里面包含了斜线 “/” 之后,就用最经典的目录层次效果给你呈现了。


坚持思考,方向比努力更重要。关注公众号:奇伢云存储,获取更多干货。 关注我公众号, 获取更多干货