LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 27427|回复: 0

对象存储oss功能原理

[复制链接]
发表于 2024-1-5 16:22:18 | 显示全部楼层 |阅读模式
本帖最后由 xhz 于 01-05 编辑

功能组件


对象存储OSS是构建在飞天云操作系统上的一种存储解决方案,本文介绍OSS的功能组件。



OSS主要分为以下三大模块:
接入层:包括API、SDK以及用户管理控制台。
应用层:包括存储空间、对象管理、图片处理及安全模块。
基础设施层:盘古、伏羲、女娲等关联系统。

功能特性

对象存储OSS是阿里云提供的海量、安全、低成本、高可靠的云存储服务,本文介绍OSS的功能特性。

Bucket和Object管理

存储空间概览

展示请求者所拥有的所有Bucket,在通过HTTP访问OSS服务地址时将默认展示您所拥有的所有Bucket。

创建Bucket

一个用户默认最多创建100个Bucket。新创建的Bucket 命名要符合Bucket命名规范。

创建Bucket可能存在以下情况:

如果创建的Bucket不存在,系统按照Bucket名称创建Bucket,并返回成功标志。
如果要创建的Bucket已存在,且请求者是Bucket所有者,则保留原来Bucket,并返回成功标志。
如果要创建的Bucket已存在,且请求者不是Bucket所有者,则返回失败标志。

删除Bucket

删除Bucket的操作需要满足以下条件:

Bucket存在。
访问者对Bucket有删除权限。
Bucket为空。

列举Bucket中的所有Object

根据Bucket名称列出此Bucket下的所有Object信息,访问者必须具有对相应Bucket的操作权限,当访问的Bucket不存在时返回错误信息。
OSS支持前缀查询,可以设置一次最大返回的文件数量(最大支持设置1000)。

上传Object

上传Object到指定的 Bucket 空间下。在满足如下条件下 Object 会上传成功:Bucket存在,且访问者拥有对Bucket相应的操作权限。当Bucket中存在同名Object文件时将会覆盖掉原来的Object文件。

删除Object

根据Object名称删除某个特定Object,访问者必须有此Object相应的操作权限。

获取Object

取得Object内容信息或者元信息,访问者需要对Object有相应的操作权限。

访问Object

OSS支持通过URL方式访问某文件。

安全管控

设置并查询Bucket访问权限

用户可以设置和查看Bucket的访问权限。Bucket的访问权限可以为以下任意一种:

Private(私有权限):只有该存储空间的创建者或者授权对象可以对该存储空间内的文件进行读写操作,其他人在未经授权的情况下无法访问该存储空间内的文件。
Public-read(公共读,私有写):只有该存储空间的创建者可以对该存储空间内的文件进行写操作,任何人(包括匿名访问)可以对该存储空间中的文件进行读操作。
Public-read-write(公共读写):任何人(包括匿名访问)都可以对该存储空间中的文件进行读写操作。

日志及监控操作

用户可以选择开启Bucket的日志记录功能,一旦开启,OSS会按照小时粒度推送日志。您可以在ApsaraUni-manager运维控制台OSS首页查询存储空间、流量、请求等信息。

防盗链

为了防止您存储于OSS的数据被其他人盗链,OSS提供了防盗链功能,即设置HTTP header中的Referer字段。您可以通过OSS控制台为您的存储空间设置Referer字段的白名单以及是否允许Referer字段为空的请求访问。例如,对于一个名为oss-example的存储空间,设置其Referer白名单为http://www.aliyun.com。则只有Referer为http://www.aliyun.com的请求才能访问oss-example这个存储空间中的对象。

基本概念

本部分将向您介绍对象存储OSS中涉及的几个基本概念,以便于您更好地理解OSS产品。

对象(Object)

Object是OSS存储数据的基本单元,也被称为OSS的文件,由元信息(Object Meta)、用户数据(Data)和文件名(Key)组成。Object由存储空间内部唯一的Key来标识。Object元信息是一个键值对(KeyValue),表示了Object的一些属性,比如最后修改时间、大小等信息,用户也可以在元信息中存储一些自定义的信息。

Object的生命周期是从上传成功到被删除为止。在整个生命周期内,Object信息不可变更。重复上传同名的Object会覆盖之前的Object,因此,OSS不支持修改文件的操作。


存储空间(Bucket)

存储空间是您用于存储Object的容器,所有的Object都必须隶属于某个存储空间。您可以设置和修改存储空间属性用来控制访问权限、生命周期等,这些属性设置直接作用于该存储空间内所有Object,因此您可以通过灵活创建不同的存储空间来完成不同的管理功能。

同一个存储空间的内部是扁平的,没有文件系统的目录等概念,所有的Object都直接隶属于其对应的存储空间。
每个账号可以拥有多个存储空间。
存储空间的名称在OSS范围内必须是全局唯一的,一旦创建之后无法修改名称。
存储空间内部的Object数目没有限制。

强一致性

Object操作在OSS上具有原子性,操作要么成功要么失败,不会存在有中间状态的Object。OSS保证用户在完成上传后读到的Object是完整的,OSS不会返回给用户一个部分上传成功的Object。

Object操作在OSS上同样具有强一致性,用户一旦收到了一个上传(PUT)成功的响应,该上传的Object就已经立即可读,并且数据的三份副本已经写成功。不存在一种上传的中间状态,即read-after-write却无法读取到数据。对于删除操作也是一样的,用户删除指定的Object成功之后,该Object立即变为不存在。

强一致性方便了用户架构设计,可以使用跟传统存储设备同样的逻辑来使用OSS,修改立即可见,无需考虑最终一致性带来的各种问题。

OSS与文件系统的对比

OSS是一个分布式的Object存储服务,提供的是一个Key-Value对形式的Object存储服务。用户可以根据Object的名称唯一地获取该Object的内容。虽然用户可以使用类似test1/test.jpg的名字,但是这并不表示该Object是保存在test1目录下面的。对于OSS来说,test1/test.jpg仅仅只是一个字符串,和a.jpg这种并没有本质的区别。因此不同名称的Object之间的访问消耗的资源是类似的。

文件系统是一种典型的树状索引结构,一个名为test1/test.jpg的文件,访问过程需要先访问到test1这个目录,然后再在该目录下查找名为test.jpg的文件。因此文件系统可以很轻易的支持文件夹的操作,例如重命名目录、删除目录、移动目录等,因为这些操作仅仅只是针对目录节点的操作。这种组织结构也决定了文件系统访问越深的目录消耗的资源也越大,操作拥有很多文件的目录也会非常慢。

对于OSS来说,可以通过一些操作来模拟类似的功能,但是代价非常昂贵。例如重命名目录,希望将test1目录重命名成test2,那么OSS的实际操作是将所有以test1/开头的Object都重新复制成以test2/开头的Object,这是一个非常消耗资源的操作。因此在使用OSS的时候要尽量避免类似的操作。

OSS保存的Object不支持修改(追加写Object需要调用特定的接口,生成的Object也和正常上传的Object类型上有差别)。用户哪怕是仅仅需要修改一个字节也需要重新上传整个Object。而文件系统的文件支持修改,比如修改指定偏移位置的内容、截断文件尾部等,这些特点也使得文件系统拥有广泛的适用性。但另外一方面,OSS能支持海量的用户并发访问,而文件系统会受限于单个设备的性能。

因此,将OSS映射为文件系统是非常低效的,也是不建议的做法。如果一定要挂载成文件系统的话,建议尽量只做新建文件、删除文件、读取文件这几种操作。使用OSS应该充分发挥其优点,即海量数据处理能力,优先用来存储海量的非结构化数据,例如图片、视频、文档等。




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表