何为OSS(对象存储服务)

何为OSS(对象存储服务)

笔者最近在项目开发时使用到了OSS,认为这是一门非常好的技术,于是想好好了解学习下。以下全部文字都只是阿里云OSS官方文档的摘录。

数据以对象(Object)的形式存储在OSS的存储空间(Bucket )中。如果要使用OSS存储数据,您需要先创建Bucket,并指定Bucket的地域、访问权限、存储类型等属性。创建Bucket后,您可以将数据以Object的形式上传到Bucket,并指定Object的文件名(Key)作为其唯一标识。OSS具有与平台无关的RESTful API接口,您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。

RESTful是Web API规范的一种,类似的,还有SOAP(简单对象访问协议),但是SOAP是一项协议,内有施加一些强制性的规则,为API的开发增加了复杂性,表现在页面上,加载时间也会更长。

OSS以HTTP RESTful API的形式对外提供服务,访问不同地域需要不同的访问域名(Endpoint)。当您请求访问OSS时,OSS通过使用访问密钥(AccessKey ID和AccessKey Secret)对称加密的方法来验证某个请求的发送者身份。

对称加密:请求方和响应方共用一套密钥。

关于OSS,有存储空间、对象、对象名称、地域、访问域名和访问密钥等一系列属性。这里由于篇幅,也限于笔者的知识水平,便暂且只介绍存储空间、对象和访问密钥这三个概念,其他的概念留到以后讨论。

  • 存储空间

存储空间是用户用于存储对象(Object)的容器,所有的对象都必须隶属于某个存储空间。存储空间具有各种配置属性,包括地域、访问权限、存储类型等。用户可以根据实际需求,创建不同类型的存储空间来存储不同的数据。

  • 对象

对象(Object)是存储数据的基本单元,也被称为OSS的文件。和传统的文件系统不同,对象没有文件目录层级结构的关系。对象由元信息(Object Meta)、用户数据(Data)和文件名(Key)组成,并且由存储空间内部唯一的Key来标识。对象元信息是一组键值对,表示了对象的一些属性,例如文件类型、编码方式等信息,同时用户也可以在元信息中存储一些自定义的信息。

  • 访问密钥

AccessKey简称AK,指的是访问身份验证中用到的AccessKey ID和AccessKey Secret。OSS通过使用AccessKey ID和AccessKey Secret对称加密的方法来验证某个请求的发送者身份。AccessKey ID用于标识用户;AccessKey Secret是用户用于加密签名字符串和OSS用来验证签名字符串的密钥,必须保密。

Object操作在OSS上具有原子性和强一致性:

  1. 原子性:Object操作在OSS上具有原子性,操作要么成功要么失败,不存在中间状态的Object。当Object上传完成时,OSS即可保证读到的Object是完整的,OSS不会返回给用户一个部分上传成功的Object。
  2. 一致性:Object操作在OSS同样具有强一致性,当用户收到了上传(PUT)成功的响应时,该上传的Object进入立即可读状态,并且Object的冗余数据已经写入成功。不存在上传的中间状态,对于删除操作,用户删除指定的Object成功之后,该Object立即不存在

OSS重要特性

  • 版本控制:版本控制是针对存储空间(Bucket)级别的数据保护功能。开启版本控制后,针对数据的覆盖和删除操作将会以历史版本的形式保存下来。您在错误覆盖或者删除文件(Object)后,能够将Bucket中存储的Object恢复到任意时刻的历史版本。
  • Bucket Policy:Bucket拥有者可通过Bucket Policy授权不同用户以何种权限访问指定的OSS资源。例如您需要进行跨账号或对匿名用户授权访问或管理整个Bucket或Bucket内的部分资源,或者需要对同账号下的不同RAM用户授予访问或管理Bucket资源的不同权限,例如只读、读写或完全控制的权限等。
  • 跨区域复制:跨区域复制(Cross-Region Replication)是跨不同OSS数据中心(地域)的Bucket自动、异步(近实时)复制Object,它会将Object的创建、更新和删除等操作从源存储空间复制到不同区域的目标存储空间。跨区域复制功能满足Bucket跨区域容灾或用户数据复制的需求。
  • 数据加密服务器端加密:上传文件时,OSS对收到的文件进行加密,再将得到的加密文件持久化保存;下载文件时,OSS自动将加密文件解密后返回给用户,并在返回的HTTP请求Header中,声明该文件进行了服务器端加密。客户端加密:将文件上传到OSS之前在本地进行加密。
  • 数据永久保存除以下情况以外,OSS默认永久保存上传到Bucket的数据:
    • 通过OSS控制台、API、SDK、ossutil或者ossbrowser等工具手动删除数据。更多信息,
    • 通过生命周期规则在指定时间内自动删除数据。
    • OSS停服后15天内未补足欠款。

OSS使用方式

OSS主要通过以下几种方式来使用:控制台、API或SDK、图形化管理工具、存储网关等

OSS计费模式

对象存储服务OSS支持以下几种付费模式,模式之间并不完全独立,可以交叉、同时使用。出于笔者的阅读需求,这里只只摘出了各个模式是如何计算费用的,具体的细节可以参考原文

按量计费:先使用,后付款,适用于业务用量经常有变化的场景。

资源包:先购买,后抵扣,适用于业务用量相对稳定的场景。

预留空间:预先购买预留空间,在费用结算时,优先从预留空间抵扣用量,先购买,后抵扣。

无地域属性预留空间:预先购买无地域属性的预留空间,在费用结算时,优先从无地域属性预留空间抵扣用量,先购买,后抵扣。

存储容量单位包SCU:除了用于抵扣OSS的存储费用,还可用于抵扣多种云存储产品存储容量费用。

OSS提供的其他服务

就笔者而言,之前在做自己的团队项目时就在思考该如何上传和存取图片这一类媒体文件,之前的解决方案是直接存储在服务器上,但是这样一来,本就只是负责处理业务动作的服务器负担可能比较大。

本就应该把需要存储的文件保存在数据库中对吧?于是笔者想到的另一个方案是存储到MySQL数据库当中,但是通常这类数据库也不直接存放比较大的图片类文件,而是存放图片的URL——于是这个方法也不行。

而OSS可以非常好地解决图片存取这个问题,只需要使用相应的SDK,正确调用API就可以了,相关的图片编码、文件加密等细节问题不需要我们去考虑。同时,阿里云提供的OSS不光可以解决图片存取,还可以自动地对OSS上的图片进行格式转换、缩放、添加水印等操作。

阿里云OSS提供的其他服务还有许多,由于这后面的知识点不再是OSS的共性了,便不再摘录了。

Comments

No comments yet. Why don’t you start the discussion?

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注