OSS(Object Storage Service)是一种云服务,它为用户提供了一种大规模、扁平化、键值对形式的非结构化数据存储解决方案。
1. OSS的结构
- 租户:OSS是云服务厂商提供的存储服务,在这里租户对应的就是主账号的概念。
- bucket:bucket是OSS中组织和管理对象的容器,类似于文件系统的目录或者云存储中的“存储桶”。每个Bucket都有一个全局唯一的名称,并且归属于一个特定的区域(Region)。用户可以通过创建不同的Bucket来分类存放不同类型的对象或者按照业务需求进行隔离。
- object:对象是OSS中基本的数据单元,它由元数据(Metadata)、数据内容(Data Payload)和唯一标识符(Object Key或ObjectName)组成。
-
- 元数据包含了与对象相关的非内容属性,如创建时间、最后修改时间、大小、存储类、自定义标签等。
- 数据内容是实际存储的二进制数据,可以是任何类型的文件,如文本、图片、视频、音频等。
- 对象键是对象在存储空间(Bucket)中的唯一标识,类似于文件系统中的文件路径,用于定位和访问特定对象。
租户就是我们的账号,对像就是我们要存储的数据,这两个概念都很好理解,那么问什么要引入bucket的概念呢?其核心目的是为了进行“隔离”:
- 逻辑隔离: 每个存储桶可以看作是一个独立的命名空间,用户可以在其中存放特定类型或关联度高的数据,实现对不同项目、应用、业务线或部门的数据进行分类和归档。
- 权限隔离: 分配不同的存储桶给不同的业务或团队,可以实施细粒度的访问控制策略。
- 地域隔离: 用户可以选择将数据存储在OSS支持的不同地域(如中国内地、香港、新加坡等),以满足数据主权、法规遵从或低延迟访问的需求。
- 费用隔离: 存储桶作为计费的基本单位,使得成本核算更加清晰。
2. OSS的访问与权限控制
- 通过Access Key ID和Secret Access Key进行身份验证
服务端可以通过Access Key ID和Secret Access Key进行身份验证的方式直连OSS。但是,很多业务场景下,需要移动端或者web端能够直连OSS(例如用户上传文件的场景,如果是从服务端将文件上传到OSS,那么就需要端侧先将文件发送给服务端,服务端再上传到OSS)。
服务端可以请求OSS生成身份验证的Token,将其下发给端侧,来赋予端侧访问OSS的权限,服务端在申请权限时,可以细粒度的制定下发的权限范围(例如只下发某个bucket的上传权限)。
- 服务端申请生成访问url
如果仅仅是想要客户端实现文件的访问(例如云盘系统,想让用户能看到图片),服务端可以请求OSS生成一个带有过期时间的url,用于用户访问。
3. 成本管理
云产品的使用虽然方便,但是费用也是我们需要关注的一环,OSS产品的费用主要由存储费用+访问流量费用组成。
- 存储费用与生命周期管理
以阿里云OSS为例,其提供了四种存储类型,其费用依次递减:
其中,标准存储与低频存储的数据是可以直接访问的,归档存储冷归档文件需要先解冻才能访问,但是后者费用比前者低得多(只有十分之一)。
- 流量费用与缓存策略
OSS文件的每次访问都会产生流量费用,业务增长很快的话,往往流量费用会成为支出的大头,这时就需要我们在业务层面进行缓存,减少对OSS得直接访问。