除参考官网产品文档外,本文其余内容均为原创。本人授权此文内容和图片供阿里云开发者宣传、推广、广告营销及研究中使用和以其他方式开发内容(全部或部分)的权利和许可。

本文仅在阿里云开发者社区个人独立博客发布,禁止无关第三方的爬取和不符合规范的转载。

00 前言

今天收到阿里云 对象存储 OSS 产品评测的邀请,于是乎打算体验一下这个产品顺便水篇博客。(才不是为了赢评测奖品呢

说实话,我之前没有用过 OSS 这种产品,只知道它是一种“云存储服务”,可以用来托管图片、文件等不同类型的静态资源。所以本篇文章是作为一个从未体验过对象存储服务(OSS)的小白用户对全流程使用体验的真实测评,而且本文不只是该产品的测评,而是对阿里云的服务体验(包括控制台的操作难度、产品文档的友好度)做出的整体评价,并全程记录使用过程,整理成的入门笔记,带你由浅入深玩转 OSS 的日常操作。

如果本文表述存在不恰当的地方,还望各位仁兄及时指正。

01 产品认知

何为对象存储

首先我们来了解一下什么是对象存储。顾名思义,对象存储(Object Storage)是一种数据存储架构,它以对象为基本存储单元,将数据作为对象进行管理和存储,每个对象都有一个唯一的访问地址。对象可以是任意大小的文件,包括文本文件、图片、音视频文件等。

在阿里云对象存储服务评测邀请页面,产品介绍如是说:

对象存储 OSS(Object Storage Service)是一种稳定、安全、经济的云存储服务,具有无目录层次结构,无数据格式限制,支持 HTTP/HTTPS 协议访问等特点。适用于企业以及开发者在内容分发、大数据分析、数据备份/归档等多种场景中使用。

在阿里云 OSS 产品文档中如是介绍[1]

阿里云对象存储OSS(Object Storage Service)是一款海量、安全、低成本、高可靠的云存储服务,可提供99.9999999999%(12个9)的数据持久性,99.995%的数据可用性。多种存储类型供选择,全面优化存储成本。

OSS与自建存储相比在易用性、持久性、数据安全等方面具有很多优势

谁适合用对象存储服务

既然如此,那谁适合购买和使用这种服务呢?产品文档中如是说:

OSS适合社区、多媒体分享、电子商务等各类形式规模的网站站长,App应用和软件应用开发者,游戏开发企业以及有大规模数据存储需求的用户使用。

它适合存储论坛网站与软件应用中的附件、高清图片、音视频、备份文件等,以及各种App应用、多终端同步软件、网盘下载站的文件。

OSS 与文件系统的对比

OSS与文件系统相比在数据模型、数据获取、优势以及劣势等方面有很多差异,具体可前往它的产品文档详细了解。但其中需要我们注意的是:

1. 优劣对比

  • 文件系统是一种典型的树状索引结构,它对文件或文件夹的操作,比如修改指定偏移位置的内容、截断文件尾部、重命名目录、删除目录、移动目录等非常容易。
  • OSS提供的是一个分布式的Key-Value对形式的对象存储服务,它保存的Object不支持修改(追加写Object需要调用特定的接口,生成的Object也和正常上传的Object类型上有差别)。用户哪怕是仅仅需要修改一个字节也需要重新上传整个Object。

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

所以不建议将OSS映射为文件系统。如果结合业务场景需要将OSS挂载为文件系统,建议只执行写入文件、删除文件、读取文件操作。使用OSS应该充分发挥其优点,即海量数据处理能力,优先用来存储海量的非结构化数据,比如图片、视频、文档等。

2. 数据获取

在我们常见的树状索引结构文件系统在数据获取时(以 test1/test.jpg 为例),是先通过访问 test 目录,再在该目录下查找 test.jpg 文件。

常见的树状索引结构文件系统包括:

  • Windows NT File System (NTFS):Windows操作系统中的主要文件系统,支持高级功能包括文件和目录权限、加密、压缩等。

  • File Allocation Table (FAT):一种简单的文件系统,早期用于DOS和Windows操作系统。它有多个版本,如FAT12、FAT16和FAT32。

  • Extended File System (ext):Linux操作系统中最早使用的文件系统,有多个版本,如ext2、ext3和ext4。它支持日志记录、文件权限等功能。

  • ReiserFS:一种针对Linux操作系统设计的高性能文件系统,具有快速的搜索和访问速度,支持大文件和大存储设备。

  • Btrfs:一个Linux文件系统,拥有许多先进的功能,如快照、压缩、校验和错误修复等。

  • HFS+:苹果Mac OS X操作系统使用的文件系统,支持元数据的日志记录和索引技术。

这些文件系统都使用了树状索引结构来组织文件和目录,并提供了快速的访问和搜索功能。请注意,Windows和Linux并不是文件系统的具体实现,而是操作系统,它们支持多个文件系统类型。

而 OSS 由于通过Key-Value对形式存储数据(也就是我们常说的键值对),所以它在数据获取时是根据Object的名称(Key 键)唯一的获取该Object的内容(Value 值)。这类似于后端常用的内存数据库 Redis。不过 Redis 适用于高性能键值存储和缓存场景,支持的是基本的键值对和更复杂的数据结构,如哈希、列表、集合和有序集合,以实现更丰富的数据操作;但是 OSS 适用于大规模非结构化数据的存储和分发,例如图片、音频、视频等。

所以虽然用户可以使用类似test1/test.jpg的名字,但是这并不表示用户的Object是保存在test1目录下面的。对于OSS来说,test1/test.jpg仅仅只是一个字符串,也就是含有一个斜杠的键名而已,与直接命名为example.jpg并没有本质的区别。因此不同名称的Object之间的访问消耗的资源是类似的。

3. 概念对应

那既然 OSS 与文件系统有如此多的差异,它们的很多概念肯定也会有所不同:

对象存储 OSS 文件系统
Object 文件
Bucket 主目录
Region
Endpoint
AccessKey
多级目录
GetService 获取主目录列表
GetBucket 获取文件列表
PutObject 写文件
AppendObject 追加写文件
GetObject 读文件
DeleteObject 删除文件
修改文件内容
CopyObject (目标文件和源文件相同) 修改文件属性
CopyObject(目标文件和源文件不同) 复制文件
CopyObject+DeleteObject 重命名文件

这个表的概念对比会对接下来我们快速上手 OSS 有着很重要的作用。

02 快速入门

入门文档中我们可以看到,使用 OSS 有多种方法:

  1. OSS 控制台:通过OSS控制台创建Bucket,并将文件上传至Bucket。上传完成后,将文件(Object)下载至本地或者通过生成签名URL的方式将文件分享给第三方,供其下载或预览。(详见 控制台快速入门
  2. 命令行管理工具 ossutil:它是OSS的命令行工具,支持Windows、Linux、macOS系统。你可以通过ossutil提供的方便、简洁、丰富的Bucket和Object命令管理你的OSS。(详见 命令行工具ossutil快速入门
  3. 图形化管理工具 ossbrowser:它是OSS的图形化工具,支持Windows、Linux、macOS系统。你可以通过ossbrowser的图形化界面方便直观地管理Bucket、上传下载Object和文件夹(目录)、简化Policy授权等操作。但由于ossbrowser是桌面式图形化工具,所以传输速度和性能不如命令行工具ossutil。(详见 图形化管理工具ossbrowser快速入门
  4. SDK:OSS提供Java、Python、PHP、Go等多种语言的SDK包,方便你快速进行二次开发。(详见 SDK快速入门SDK开发参考
  5. REST API:如果你的程序自定义要求较高,你可以直接发起REST API请求。直接发起REST API请求需要手动编写代码计算签名。(详见 OSS API开发参考
  6. 基于 OSS 的文件系统管理:OSS的存储空间内部是扁平的,没有文件系统的目录等概念,所有的对象都直接隶属于其对应的存储空间。如果你想要像使用本地文件夹和磁盘那样来使用OSS存储服务,可以通过配置云存储网关来实现。通过云存储网关提供的NFS、SMB(CIFS)、iSCSI协议,OSS的存储资源会以Bucket为基础映射成本地文件夹或者磁盘。你可以通过文件读写操作访问OSS资源,无缝衔接基于POSIX和块访问协议的应用,降低应用改造和学习成本。(详见 通过云存储网关挂载OSS

本次测评主要使用 OSS 控制台进行文件的管理。通过OSS控制台,可以完成常见的基础操作,例如创建存储空间(Bucket)、上传和下载文件(Object)等。

开通 OSS 服务

开通对象存储 OSS 服务的前提条件是需要注册阿里云账号并完成实名认证。

登录阿里云控制台,在左侧产品列表中选择对象存储 OSS,进入到 OSS 控制台。如果未开通,按照界面指引完成开通操作即可。

开通OSS服务后,默认的计费方式是按量付费。如果想降低OSS使用费用,建议 购买资源包,相比按量付费更划算。OSS资源包可以抵扣存储、流量等费用。如果资源包到期或额度全部抵扣完后,如果仍有超出部分,自动转为按量付费。

本次测评我试用的是阿里云发放的 3 个月的对象存储服务,其中包括三个资源包:

  1. 对象存储OSS标准存储包,总量20GB(总量恒定型)
  2. 对象存储OSS请求包,总量20万次(包月周期型)
  3. 对象存储OSS下行流量包,总量2GB(包月周期型)

2023-114 (2)

资源包的类型和作用在产品文档的 资源包概述 中写的很明确:

  • 存储包:用来抵扣OSS文件ECS快照的存储费用。包括:
    • 标准-本地冗余存储包
    • 低频-本地冗余存储包
    • 归档-本地冗余存储包
    • 标准-同城冗余存储包
    • 低频-同城冗余存储包
  • 流量包:抵扣OSS使用过程中产生的流量费用。包括:
    • 下行流量包: 抵扣数据通过互联网从OSS传输到客户端所产生的流量费用
    • 回源流量包:抵扣数据从OSS传输到CDN边缘节点所产生的回源流量费用
    • 传输加速包:抵扣用户通过传输加速域名访问OSS时所产生的加速流量费用
  • 高防基础包:抵扣预留高防实例资源所产生的费用。

创建存储空间

在本文前面提到,对象存储服务中的 Bucket 这个概念,对应的是文件系统的根目录。

存储空间(Bucket)是用于存储对象(Object)的容器。在上传任意类型的Object前,需要先创建Bucket。

在 OSS 控制台的 Bucket 列表 页面中,单击创建Bucket

2023-114 (3)

创建Bucket面板,可按如下说明配置必要参数。其他参数均可保持默认配置,也可以在Bucket创建完成后单独配置。

参数 描述
Bucket名称 Bucket的名称,一旦创建,无法更改。命名规则如下:
》Bucket名称在 OSS 范围内必须全局唯一。
》只允许小写字母、数字、短横线(-),且不能以短横线开头或结尾。
》长度必须在3~63字符之间。
地域 Bucket的数据中心。Bucket一旦创建,则无法更改其所在地域。
如需通过ECS内网访问OSS,请选择与ECS相同的地域。更多信息,请参见 OSS访问域名使用规则
存储类型 可根据实际需求选择:
标准存储:适用于访问量比较高的文件,存储费用较高。高可靠、高可用、高性能,数据会经常被访问到。
低频访问存储:适用于月均访问频率低于1~2次的文件。存储费用低于标准存储,但最少需要存储30天,且被访问时会产生数据取回费用。
归档存储:适用于基本不被访问的归档文件。存储费用低于低频访问,最少需存储60天,文件被访问前需要先解冻 。
冷归档存储:适用于一些需要超长期存储的备份文件、原始数据等。存储费用最低,最少需存储180天,文件被访问前需要先解冻。
存储冗余类型 Bucket的数据容灾类型。
本地冗余存储采用单可用区(AZ)内的数据冗余存储机制,将用户的数据冗余存储在同一个可用区内多个设施的多个设备上,确保硬件失效时的数据持久性和可用性。
同城冗余存储(推荐)采用多可用区(AZ)内的数据冗余存储机制,将用户的数据冗余存储在同一地域(Region)的多个可用区。当某个可用区不可用时,仍然能够保障数据的正常访问。

如果你的业务系统对于“恢复时间目标(RTO)”以及“恢复点目标(RPO)”有较高要求,建议开启同城冗余存储。Bucket内的数据会冗余存储在同一个区域的3个可用区中,数据可用性更高,但存储费用也会相应提高,仅支持标准存储和低频访问。

[重要] 华南1(深圳)、华北2(北京)、华东1(杭州)、华东2(上海)、中国香港、新加坡以及印度尼西亚(雅加达)地域支持开启同城冗余存储。关于同城冗余存储的更多信息,请参见同城冗余存储
读写权限 用于设置文件的访问权限:
私有:仅授权用户可以访问Bucket内的文件。如非必要,建议选择私有。
公共读:所有用户都可以读取Bucket内的文件,仅授权用户可以向Bucket写文件。
公共读写:所有用户都可以读写Bucket内的文件。
所属资源组 默认即可
版本控制 如果对数据安全有更高的要求,可以开启版本控制。Bucket内被覆盖或删除的文件会转为历史版本,可以随时恢复历史版本文件。
服务端加密方式 如果要加密存储数据,可开启服务器端加密。目前支持:
OSS完全托管加密:支持 AES256SM4 加密算法。
KMS加密:支持 AES256SM4 加密算法;同时需要开通KMS加密服务,若需指定KMS加密秘钥,还需在KMS平台创建一个KMS密钥。
实时日志查询 如果需要实时查询与分析Bucket的访问数据,可以开通实时日志查询。目前可免费查询7天内且每天不超过900GB的日志,超出限额会产生费用。
定期备份 如果希望定期备份Bucket内的文件,可开启定时备份,为 OSS 提供数据处理保护,防止误修改、误删除,可低成本长期保存历史数据。首次开通后 30 天内免费试用。
HDFS服务 HDFS 服务基于统一的元数据管理能力,更好地满足大数据和 AI 等领域的数据湖计算场景。

单击确定,创建成功后进入Bucket即可。

2023-114 (4)

上传文件

Bucket创建完成后,就可以上传文件了。

进入刚创建的Bucket,选择 文件管理 中的 文件列表 菜单,然后点击 上传文件 按钮。

2023-114 (5)

在上传面板中,

  • 可以选择上传到当前目录或者指定目录,若填写的目录不存在,上传时会自动创建。

  • 通过 文件ACL 配置文件上传后的访问权限:

    1. 继承 Bucket:单个文件的读写权限以 Bucket 的读写权限为准。
    2. 私有:仅授权用户可以访问目标文件。
    3. 公共读:所有用户都可以读取目标文件,仅授权用户可以修改目标文件。
    4. 公共读写:所有用户都可以对该存储空间内文件进行读写操作。
  • 点击 扫描文件 可以上传本地指定文件,点击 扫描文件夹 可以上传本地指定目录下的所有文件。也可以将目录或多个文件拖拽到待上传区域进行扫描。

  • 确认待上传列表无误后,点击页面底部 上传文件 按钮,即可全部上传。

2023-114 (6)

后续操作

文件上传至目标Bucket后,回到Bucket的文件管理>文件列表,即可看到刚刚上传的文件或创建的目录。

2023-114 (7)

你可以将存储的文件下载到本地或分享给他人访问。

1. 下载文件

  • 下载单个文件:选择目标文件右侧的三个点,在浮层中选择下载即可。(下载链接有效时间为 300 秒,若需要更长的链接有效时间可点击文件详情进行设置。)

    2023-114 (8)

  • 下载多个文件:选中多个文件,然后单击下方的下载。通过OSS控制台可一次批量下载最多100个文件。

    2023-114 (9)

2. 分享文件

若要将文件通过URL分享给他人访问(下载或预览),可单击目标文件名或其右侧详情

2023-114 (10)

如果您要分享私有文件,在详情面板,需要设置过期时间。如设置3600秒,则访问者可以在1小时内,通过此链接访问该文件。

单击复制文件URL,该链接在有效期内可供任何人访问。分享文件时,请仔细确认分享的数据中是否有敏感内容,避免敏感数据泄露。

2023-114 (11)

可以通过生成签名URL的方式将文件分享给第三方,供其下载或预览,详情请参见分享文件

3. 使用自有域名访问 OSS 资源

如果希望访问URL时可以预览例如图片、网页文件等,需要为存储空间(文件所在的Bucket)绑定一个自定义域名,并通过自定义域名访问这些文件。

更多内容可浏览官方文档:控制台使用自有域名访问OSS资源

03 使用测评

总体来说,阿里云 OSS 的产品体验相当不错,官方文档的内容对新手极其友好,尤其是 快速入门 中的教程视频,非常直观地带用户完整地预览了使用流程。唯一美中不足的是视频中的操作界面应该是之前旧版本控制台的操作流程,目前新版控制台页面在一些按钮的位置和配置项等方面略有差异,但总体不妨碍上手使用。

前端Bug

对了,在使用过程中我发现文件列表有个Bug,就是在点击目录的文件大小统计后,出现的弹窗组件莫名有两个靠的非常近的关闭按钮。

2023-114 (12)

如果点击下面那个叉,弹窗可正常关闭(无动画);但是如果点击上面那个叉,弹窗在动画渐隐到一半时会卡住,控制台无报错。我猜测是关闭函数的问题,前端的同学可以再审一下相关代码。

2023-114 (13)

接下来,我再以下面三个话题聊聊我的测评结果。

1. 传输加速

对象存储OSS利用全球分布的云机房能力,通过传输加速将来自全球各地的用户访问由DNS 路由至就近的OSS接入点,用户请求到达OSS就近节点后,会经过优化过的网络及协议访问Bucket所在的数据中心。通过传输加速、CDN加速实现加速访问OSS资源。(相关文档:加速管理

经过测试与测评,阿里云对象存储(OSS)的传输加速方案带来了显著的改善和提升。

阿里云OSS的传输加速功能通过全球分布的云机房能力、优化的网络和协议,以及与CDN加速的结合,为用户带来了更快速、更高效的访问体验。无论是对于个人用户还是企业用户,在处理大量数据、进行频繁的上传和下载操作时,传输加速都能够有效提升工作效率,并为用户提供更好的云存储服务体验。

2. 数据处理

对象存储OSS具有非常多样的数据处理能力,可以通过简单的REST API口在任何时间、任何地点、任何互联网设备上对存储在OSS中的数据进行分析处理。例如,对象存储OSS与智能媒体管理(IMM)深度结合,支持媒体处理、文档处理等丰富的数据分析处理操作。(相关文档:数据处理概述

经过测试与测评,我对阿里云对象存储(OSS)的数据处理功能给予高度评价。

阿里云OSS的数据处理功能通过与智能媒体管理(IMM)的深度结合,为用户提供了丰富多样的数据分析和处理能力。这种功能的存在使得用户能够灵活地处理存储在OSS中的数据,提高了数据的价值和利用效率。无论是做媒体处理还是文档处理,OSS都能够为用户提供便捷、高效的数据处理体验。

3. 成本管理

存储空间(Bucket)开启版本控制后,针对数据的覆盖和删除操作将会以历史版本的形式保存下来。当Bucket累积了大量的历史版本或者过期删除标记时,您可以结合生命规则删除不必要的历史版本以及过期删除标记,从而减少存储成本并有效提升列举Object的性能。(相关文档:使用生命周期管理文件版本

经过对阿里云对象存储(OSS)的成本管理功能的测试与测评,我得出了积极的评价。

OSS提供了丰富的成本管理功能,其中一个重要的功能是存储空间(Bucket)的版本控制。开启版本控制后,OSS将会以历史版本的形式保存覆盖和删除操作的数据。这意味着即使数据被覆盖或删除,其历史版本仍然可被检索和访问。

基于版本控制,用户可以结合生命周期规则来管理存储空间中的历史版本和过期删除标记。当存储空间中积累了大量的历史版本或者过期删除标记时,用户可以根据需要制定相应的规则来删除不必要的历史版本,从而减少存储成本。这有效地提升了列举Object的性能,并为用户节省了不必要的存储费用。

通过这种成本管理功能,用户能够精确掌控存储空间中的数据,并根据需求进行合理的版本和删除管理。这在大规模存储和长期数据保留的场景下尤为重要。OSS提供的成本管理功能为用户提供了成本控制和性能优化的灵活选择,使得数据管理更加高效和经济。

所以,阿里云OSS的成本管理功能,特别是存储空间的版本控制和生命周期规则,为用户降低存储成本和优化性能提供了有效的手段。这一功能的存在帮助用户精确管理存储空间中的历史版本和过期删除标记,从而实现更好的成本管理和数据存储效率。

04 写在最后

总之,非常感谢阿里云这次给予的 OSS 测评邀请和免费试用资源包,带我迈出了对象资源存储服务的第一步。

在接下来的试用时间中,我可能会通过基于 Node.js 或者 Java 的 SDK 来开发图床或者文件托管系统,从而更全面地探索阿里云 OSS 的可能性和便捷性,而不是仅仅通过每次登录控制台来手动上传文件。


【参考内容】

[1] 阿里云对象存储服务 OSS 产品文档