块存储vs文件存储vs对象存储
- 块存储:数据拆分成块,单独存储各个块。让用户请求数据,底层存储组装块
- 文件存储:数据以单条信息的形式存储在文件夹中。需要知道文件路径来访问。
-
对象存储:数据被拆分成"对象"离散单元,存储在单个库中。
-
块存储的结构是==数组==
- 文件存储的结构是==二叉树==
- 对象存储的结构是==哈希表==
块存储 (Block Storage) -- "买一块毛坯地"
- 形象比喻: 就像你租了一个没有任何装修的空仓库或者一块空地。
- 怎么用: 它是最底层的。你不能直接把衣服(文件)扔进去,你得先在里面打隔断、装架子(格式化文件系统),才能开始放东西。
- 特点:
- 极快: 因为没有中间商赚差价,直接对接硬盘,读写速度最快。
- 独享: 通常这块地只能给一个人(一台服务器)用,别人进不来。
- 典型场景: 它是地基。用来装操作系统(C盘)、运行数据库(如MySQL)。
文件存储 (File Storage) -- "租一个档案柜"
- 形象比喻: 就像你在办公室里用文件夹和档案柜。
- 怎么用: 有明确的层级结构(楼层 -> 房间 -> 柜子 -> 文件夹 -> 纸)。你很清楚东西放在哪个目录下。
- 特点:
- 共享方便: 大家都可以打开柜子拿文件,适合多个人一起用。
- 人类友好: 也就是我们电脑上看到的文件夹形式,容易理解和浏览。
- 有上限: 如果柜子太多、层级太深,找东西会变慢。
- 典型场景: 公司内部共享文件(NAS)、视频剪辑素材共享、日常办公。
对象存储 (Object Storage) -- "交给代客泊车(或极度扁平的超大仓库)"
- 形象比喻: 就像你去餐厅把车交给代客泊车,或者去大剧院存包。
- 怎么用:
- 你把东西(数据)交给管理员。
- 管理员给你一个凭证(URL链接/ID)。
- 当你取东西时,你只需出示凭证。你不需要知道车具体停在地下几层几号位,也不需要知道包放在哪个柜子里。
- 特点:
- 没有层级: 所有东西都是平铺的,没有复杂的"文件夹套文件夹"。
- 自带标签: 每个包裹上可以贴很多便利贴(元数据),写着"这是红色的"、"这是张三的"。
- 典型场景: 存照片(手机云相册)、存视频(Netflix/B站的视频库)、海量日志备份。
三种存储对比
| 特性 | 块存储 (Block) | 文件存储 (File) | 对象存储 (Object) |
|---|---|---|---|
| 操作单位 | 块 (Block) | 文件 (File) | 对象 (Object) |
| 访问方式 | 像硬盘一样挂载 | 像文件夹一样打开 | 通过网页链接 (HTTP API) |
| 修改数据 | 强项:可只修改文件的一小部分 | 中等:打开文件修改保存 | 弱项:必须整体覆盖,不能改一点点 |
| 速度/性能 | 极快(跑车) | 中等(轿车) | 吞吐量大但延迟略高(大货车) |
| 典型应用 | 数据库、系统盘 | 办公文档共享 | 互联网图片、视频、备份 |
对象存储的独特特点与优势
为什么现在互联网巨头(如亚马逊AWS S3、阿里云OSS)都疯狂推崇对象存储?因为它解决了传统存储解决不了的=="海量"==问题。
1. 独特的"扁平化"结构(Key-Value)
- 解释: 文件存储像一棵树,树大了很难找叶子。对象存储像一个巨大的广场,所有数据都平铺在上面,每个数据都有唯一的身份证号。
- 优势: 无论存1个文件还是存==100亿个==文件,查找速度一样快。永远不会因为文件太多而卡顿。
2. 强大的"元数据" (Metadata)
- 解释: 在文件存储里,你只能看到文件名、大小、日期。但在对象存储里,你可以给数据贴无数个"标签"。
- 例子: 存一张照片,你可以附带标签:
{拍摄地: "北京", 拍摄者: "老王", 内容: "风景"}。 - 优势: 检索能力极强,不需要打开文件就能知道里面是什么。
3. 无限的扩展性 (Infinite Scalability)
- 解释: 传统的硬盘满了要买新硬盘、做阵列,很麻烦。对象存储就像"液体"一样,只要给钱,空间近乎无限大。
- 优势: 企业不需要担心"硬盘满了怎么办",它可以从几GB轻松扩容到几PB(1PB=1024TB)。
4. 天生支持互联网访问 (HTTP/REST API)
- 解释: 块存储必须连服务器,文件存储必须在局域网。而对象存储的数据,天生就有一个网址(URL)。
- 优势: 你上传一张图片,直接把生成的链接发给全世界,大家都能看到(配合 CDN)。这也是为什么它最适合做网站的图床和视频库。
5. 成本极其低廉
- 解释: 它通常使用廉价的商用硬件,通过软件算法保证数据不丢失(比如自动把你的数据复制三份存在不同机器上)。
- 优势: 存海量冷数据(比如监控录像、备份档案)最便宜。
OSS vs 文件系统
| 对比项 | OSS | 文件系统 |
|---|---|---|
| 数据模型 | OSS是一个分布式的对象存储服务,提供的是一个==Key-Value==对形式的对象存储服务。 | 文件系统是一种典型的树状索引结构。 |
| 数据获取 | 根据Object的名称(Key值)唯一的获取该Object的内容(Value值)。 虽然用户可以使用类似test1/test2/test3/test.jpg的名字,但是这并不表示用户的Object是保存在test1目录下面的。对于OSS来说,test1/test2/test3/test.jpg仅仅只是一个字符串,与test.jpg并没有本质的区别。因此不同名称的Object之间的访问消耗的资源是类似的。 |
一个名为test1/test2/test3/test.jpg的文件,访问过程需要先访问到test1这个目录,再访问到test2这个目录,再访问到test3这个目录,然后在该目录下查找名为test.jpg的文件。 |
| 优势 | 支持==海量的用户并发访问==。 | 支持文件的修改,比如修改指定偏移位置的内容、截断文件尾部等。也支持文件夹的操作,比如重命名目录、删除目录、移动目录等非常容易。 |
| 劣势 | OSS保存的Object不支持修改(追加写Object需要调用特定的接口,生成的Object也和正常上传的Object类型上有差别)。用户哪怕是仅仅需要修改一个字节也需要重新上传整个Object。 OSS可以通过一些操作来模拟类似文件夹的功能,但是代价非常昂贵。比如重命名目录,希望将test1目录重命名成test2,那么OSS的实际操作是将所有以test1/开头的Object都重新复制成以test2/开头的Object,这是一个非常消耗资源的操作。因此在使用OSS的时候要尽量避免类似的操作。 |
受限于单个设备的性能。访问越深的目录消耗的资源也越大,操作拥有很多文件的目录也会非常慢。 |
不建议将OSS映射为文件系统ossfs
从上述表格得知,不建议将OSS映射为文件系统ossfs。如果结合您的业务场景需要将OSS挂载为文件系统,建议只执行写入文件、删除文件、读取文件操作。使用OSS应该充分发挥其优点,即==海量数据处理能力==,优先用来存储海量的非结构化数据,比如图片、视频、文档等。
什么时候用ossfs
- 很多客户认为ossfs就是可以直接将oss当成文件存储使用,这并没有问题,但是oss变成文件系统进行大量的增删改查操作,会造成非常消耗资源的操作。
- 因此,除非将ossfs作为简单上传和下载等备份操作,可以建议使用。
- 如某客户将ossfs当成普通文件系统进行高并发的使用,就很容易出现==i/o error==等错误,因此在推荐用户使用或者指导用户使用ossfs的时候,要充分了解客户的具体需求及云上环境,推荐合适的产品给到匹配的解决方案。
- 若要使得oss既要有挂载文件系统,又要有强大的增删改查能力,应该推荐用户使用==云存储网关==,相当于在 ECS 和OSS之间加了一层缓存层,适合高并发读写。
OSS功能特性
存储空间管理
- 创建存储空间bucket
- 使用自有域名访问OSS:将自定义域名绑定到OSS,https证书也可以托管在OSS
- 传输加速:优化远距离传输的速度
- 请求者付费:请求者支持访问bucket数据产生的费用,bucket拥有者仅支付存储费。
文件管理
- 上传、下载、拷贝、列举、删除
- 重命名:不支持直接重命名,用CopyObject+DeleteObject实现
- 分享:分享URL给别人下载
- 管理文件metadata:可以自定义元数据,可以设置文件HTTP header来自定义请求策略
- 单链接限速
- 数据索引
- 云存储网关挂载OSS:实现像使用本地文件夹和磁盘一样使用OSS。相当于在OSS和 ECS 之间建立一个中间缓存层。
权限控制
- Bucket ACL:public-read-write、public-read、private
- Object ACL:default(继承bucket)、public-read-write、public-read、private
- Bucket Policy:支持向RAM User授予权限,向匿名用户授予带特定IP条件限制的权限
- RAM Policy
数据安全
- 恢复误删数据:需要开启版本控制,对文件的覆盖和删除会以历史版本的形式保存下来,可供恢复
- 限制访问来源:设置访问白名单
- 跨域资源共享:CORS 允许在一个域名中加载的客户端Web app与另一个域中的资源进行交互
- 保护敏感数据:阿里云提供的原生服务,自动识别、保护敏感数据
- 数据合规保留:WORM(Write Once Read Many)特性,用户以"不可删除、不可篡改"方式保存数据
- 加密数据:支持客户端和服务器端加密。
- OSS沙箱:bucket遭受攻击或者通过bucket分享违法内容,oss就自动将bucket切到沙箱,可以正常响应请求,但是SLA降级
- 防护DDoS攻击:OSS 高防,受到保护的OSS遭受大流量攻击,会将攻击流量牵引至高防集群进行清洗,正常流量再回源到OSS
- 同城容灾:数据冗余存储在一个Region的多个AZ
数据管理
- 跨区域复制:将一个Region中文件的变更,复制到另一个Region。实现跨Region容灾
- 定时备份:文件可以定时备份到云备份服务 Cloud Backup中
- 自动转储及删除:配置生命周期规则,定期转换文件到冷存储、归档存储等,并删除过期数据
- 托管静态网站:可以将bucket配置为静态网站托管模式,通过bucket域名访问该静态网站
- 镜像回源:配置镜像回源规则,当请求了一个bucket中不存在的object,oss向回源规则的源站去获取这个文件,获取到目标文件后返回给请求者并存进bucket。
日志管理
- OSS访问日志
数据处理
- 图片处理:对OSS中的图片执行不同操作,例如格式转换、裁剪、缩放、旋转、水印等
- zip包解压:配置解压规则,上传到oss的zip文件会被自动解压
数据湖管理
- 接入数据湖:OSS-HDFS(JindoFS)云原生数据湖产品,兼容 HDFS 文件系统接口,提供POSIX能力支持。满足大数据和AI场景
OSS ON云盒
- 把软件+硬件部署到客户本地机房,获得和公有云OSS一样的API、SDK
典型应用场景
三层网络架构搭配OSS
通用Web应用:
- CDN 提供内容分发
- 内容缓存在OSS中:无限容量,低成本、高可靠
- 前后端服务部署在 ECS 上
- SLB处理HTTP请求
- 后端RDS数据库
图片音视频海量存储
OSS可用于图片、音视频、日志等海量文件的存储。各种终端设备、Web网站程序、移动应用可以直接向OSS写入或读取数据。OSS支持==流式写入==和==文件写入==两种方式。
网页或移动应用的静态动态资源分离
海量数据的互联网并发下载,利用OSS原生的传输加速,提升跨国、越洋数据上传、下载体验。结合 CDN,提供静态内容存储、分发到CDN边缘节点,提升同一文件被同一地区客户大量重复并发下载的体验。
云端数据处理
上传文件到OSS后,可以配合媒体处理服务和图片处理服务进行云端数据处理。
数据湖
- 把"OSS对象存储"变成一个巨大的"数据仓库",让企业可以把所有类型的数据都丢进去,然后再用各种计算工具去分析这些数据。
- 能够存储任意规模的结构化数据(如数据库表)、半结构化数据(如CSV, JSON, 日志)和非结构化数据(如图片、视频、音频)。
- 列出了几种阿里云的计算服务,它们直接读取OSS里的数据进行处理:
- E-MapReduce: 基于开源Hadoop/Spark的大数据处理。
- MaxCompute: 阿里云自研的大数据计算服务(处理超大规模数据)。
- Function Compute (函数计算): 事件驱动的轻量级计算。
- Data Lake Analytics (数据湖分析): 专门针对 数据湖 的Serverless查询服务(可以直接写SQL查询OSS里的文件)。
数据湖建设建议
阿里云建议企业不要把数据分散存储,而是全部汇聚到 OSS 这个低成本、高弹性的"湖"里,然后根据业务需求,灵活选择上面的计算引擎(无论是做报表、做AI训练还是做日志分析)来使用这些数据。
对象存储基本概念
Region
- bucket name和Region一旦创建==不可修改==
- bucket可以创建无地域属性:
- 存储在某个Region,但是用户不知道在哪里。
- 只能通过公网Endpoint访问(一般都是内网访问,所以根本不适合生产使用)
- 更便宜一些
Endpoint
- OSS的文件link,浏览器点击是默认下载的,这是阿里云的策略;想要在浏览器显示,需要绑定一个自定义域名才行。
- Endpoint对外服务的访问域名:
- 组成:
http://<bucket-name>.<数据中心域名>/<object-name> - 例如:
http://oss-example.oss-cn-hanghzou.aliyuncs.com/aliyun-logo.png - 查看各个Region对应的Endpoint: https://help.aliyun.com/zh/oss/user-guide/regions-and-endpoints#concept-zt4-cvy-5db
- 测试到不同Region的网络延迟: https://help.aliyun.com/zh/oss/user-guide/regions-and-endpoints#concept-zt4-cvy-5db
- 组成:
AccessKey
AK指的是访问身份验证用到的==AccessKeyID==和==AccessKeySecret==。
对于私有的ACL,是需要带AKSK来访问object的;public ACL是不需要AKSK的,不做身份验证和鉴权。
存储层级
| 对比项 | 标准存储 (Standard) | 低频访问 (Infrequent Access) | 归档存储 (Archive) | 冷归档存储 (Cold Archive) |
|---|---|---|---|---|
| 核心定位 | 高性能、高可靠、高可用 | 高持久性、较低成本 平均每月1-2次 |
高持久性、极低成本 平均每年1-2次 |
成本最低、适合极冷数据 |
| 适用场景 | 频繁访问的数据 社交图片、音视频、大型网站、大数据分析 |
较低访问频率 平均每月访问 1-2 次 |
档案数据、医疗影像、科学资料、影视素材 | 需要超长时间存放、几乎不访问的极冷数据 |
| 数据访问实时性 | 实时访问 | 实时访问 | 需解冻 解冻耗时约 1 分钟 |
需解冻 解冻耗时较长(视优先级而定) |
| 最低存储时间 | 无限制 | 30 天 | 60 天 | 180 天 |
| 最小计量单位 | 按实际大小 | 64 KB | 64 KB | 64 KB |
| 额外费用点 | 主要是存储费+流量费 | 可能会有数据取回费 | 解冻产生数据取回费用 | 产生数据取回费用 |
| 冗余方式 | 本地冗余 (LRS) 同城冗余 (ZRS) |
本地冗余 (LRS) 同城冗余 (ZRS) |
本地冗余 (LRS) | 本地冗余 (LRS) |
避坑指南
1. 64KB 计费陷阱(小文件地狱)
- 注意:低频、归档、冷归档都有 64KB 的最小计量单位。
- 场景:如果你有 1 亿个 1 KB 的日志文件,为了省钱转存到"低频访问"。
- 后果:系统会按 1亿 x 64 KB 计费,而不是 1亿 x 1KB。存储费用反而膨胀了 64 倍!
- 建议:小文件请打包(tar/zip)后再转存低频/归档。
2. 提前删除违约金
- 注意:关注"最低存储时间"。
- 场景:文件上传到"冷归档"(要求存180天),结果第 10 天你就把它删了。
- 后果:阿里云会把剩下 ==170 天==的存储费一次性扣除。
- 建议:生命周期规则(Lifecycle)设置要谨慎,不要对短期临时文件设置归档策略。
3. 解冻时间与 RTO
如果业务要求 Disaster Recovery (DR) 必须在 ==10 分钟==内恢复,千万别把核心备份放到冷归档,因为解冻可能需要数小时,会直接导致 RTO 达不到 KPI。
Object
在各语言SDK中,ObjectKey、Key以及ObjectName是同一概念,均表示对Object执行相关操作时需要填写的Object名称。
例如向某一存储空间上传Object时,ObjectKey表示上传的Object所在存储空间的完整名称,即包含文件后缀在内的完整路径,如填写为abc/efg/123.jpg。
类型
Object包含以下三种类型:
- Normal:通过简单上传生成的Object。上传结束之后内容是固定的,只能读取,不能修改。如果Object内容发生了改变,只能重新上传同名的Object来覆盖之前的内容。简单上传适用于上传小于 5 GB 的单个文件(Object)、一次HTTP请求交互即可完成上传的场景。大于5G用Multipart类型上传。
- Multipart:通过分片上传生成的Object。上传结束之后内容是固定的,只能读取,不能修改。如果Object内容发生了改变,只能重新上传同名的Object来覆盖之前的内容。分片上传适用于大文件加速上传、网络环境较差、文件大小不确定的场景。
- Appendable:通过追加上传生成的Object。追加上传可在视频数据产生之后即时将数据上传至同一个Object。追加上传适用于视频监控、视频直播等领域生成的实时视频流场景。
类型不可转换
不支持在不同类型的Object之间相互转换。例如,Normal类型的Object无法转换为Multipart或者Appendable类型。
原子性和强一致性
Object操作在OSS上具有==原子性==,操作要么成功要么失败,不会存在有中间状态的Object。OSS保证用户一旦上传完成之后读到的Object是完整的,OSS不会返回给用户一个部分上传成功的Object。
Object操作在OSS同样具有==强一致性==,用户一旦收到了一个上传(PUT)成功的响应,该上传的Object就已经立即可读,并且Object的冗余数据已经写成功。不存在一种上传的中间状态,即read-after-write(写后读一致性)却无法读取到数据。
对于删除操作也是一样的,用户删除指定的Object成功之后,该Object立即变为不存在。
加密选项
- 服务器端加密:上传文件时,OSS对收到的文件进行加密,再将得到的加密文件持久化保存;下载文件时,OSS自动将加密文件解密后返回给用户,并在返回的HTTP请求Header中,声明该文件进行了服务器端加密。可选OSS托管加密、KMS托管加密
- 客户端加密:object发送到oss之前在本地进行加密
数据冗余机制
OSS使用基于==纠删码、多副本==的数据冗余存储机制,将每个对象的不同冗余存储在同一个区域内多个设施的多个设备上。
版本控制
Bucket包含三种版本控制状态,分别为未开启、开启或者暂停。
- 默认情况下,Bucket版本控制状态为"未开启"。一旦Bucket处于"开启"版本状态,将==无法返回至"未开启"状态==。但是,您可以暂停Bucket的版本控制状态。
- 当Bucket版本控制处于"开启"状态时,OSS将为新上传的Object生成全局唯一的随机字符串版本ID。(还没开版本控制的时候的文件的版本ID就是null)
- 当Bucket版本控制处于"暂停"状态时,OSS将为新上传的Object生成特殊字符串为"null"的版本ID。
版本控制费用
当Bucket版本控制处于"开启"状态时,由于Object的每个版本都被保存下来,每个版本都会占用存储空间,OSS会对Object的==所有版本收取存储费用==。
跨区域复制与版本控制
开了跨区域复制,源端和目的端版本控制要保持一致,要开都开,要关都关。
互斥配置
同一Bucket中,版本控制与合规保留策略无法同时配置。
生命周期管理
生命周期规则,通过最后一次修改时间、最后一次访问时间,指定不同的转换操作:
- 转换存储类型:从标准存储转到低频访问存储、归档存储、冷存储等
- 迁移至其他存储区域:从国内迁移到国外
- 过期和删除:超过过期时间之后,自动删除object
- 碎片规则:文件碎片自动删除
多条规则冲突时,oss自动按照==最低开销原则==排优先级
生命周期策略限制
生命周期策略是通过XML配置的,同一个prefix规则中的transition策略==不能超过三个==,否则会报invalid XML。
参考文档:https://help.aliyun.com/zh/oss/user-guide/configuration-examples
静态网站托管
静态网站是指所有的网页内容都是静态内容,包括客户端执行的JavaScript脚本。可以将静态内容都托管到OSS中,通过oss的域名访问静态网站。
配置静态网站托管时,您需要指定网站的默认首页和默认404页:
- 默认首页是您通过浏览器访问静态网站域名时,OSS返回的网站首页。您为默认首页指定的文件必须是Bucket根目录下允许被匿名访问的文件。如果您还开通了子目录首页,则子目录下也应存在此文件。
- 默认404页是您通过浏览器访问Bucket内文件出现404错误时,OSS返回的错误页面。您为默认404页指定的文件必须是Bucket根目录下允许被匿名访问的文件。
- 默认页面为空,那就表示不开启静态网站托管
费用
访问一次就收一次费,性价比高。
自定义域名
参考文档:https://help.aliyun.com/zh/oss/user-guide/access-buckets-via-custom-domain-names
自定义域名绑定至OSS Bucket的实现机制基于DNS的==CNAME(Canonical Name)==记录。通过将域名指向OSS为Bucket提供的访问地址,当用户访问自定义域名时,DNS系统将其解析到对应的OSS Bucket域名,从而实现对OSS资源的直接访问。
为什么需要自定义域名
OSS Bucket域名访问HTML、图片等文件时,浏览器会==强制下载而非在线预览==,影响用户体验。通过将自定义域名绑定至Bucket,可以使用自定义域名替代OSS Bucket域名直接访问文件,实现在线预览,并获得更灵活的访问控制能力。
预览或下载行为
文件的预览或下载行为由HTTP响应头Content-Disposition决定。核心机制在于:使用OSS Bucket域名访问时,OSS会为安全起见强制添加Content-Disposition: attachment下载头;而通过自定义域名访问时,OSS则不会添加此头,从而使行为变得可控。
HTTPS证书托管
也可以给静态网页开启HTTPS。参考链接:
https://help.aliyun.com/zh/oss/user-guide/access-oss-by-https-protocol
操作步骤:
1. oss绑定自定义域名
2. 购买证书
3. 证书托管至OSS
可参考 DNS-CDN-SSL 了解更多证书管理细节。
数据处理
参考文档:https://help.aliyun.com/zh/oss/user-guide/img-implementation-modes
可以通过API接口,对OSS中的数据进行处理:
- 图片处理:缩放、裁剪、定义样式、加水印等
- 媒体处理:与智能媒体处理IMM结合,可以转码、转动图、拼接等
- 视频截帧
- zip包解压
- 事件通知
优势
使用了对象存储中的数据处理模块后,我们可以把业务处理模块功能"转嫁"给OSS,也就是说,让云厂商来承受这部分的算力。我们的服务器可以腾出资源运行更多的服务,或者可以减小服务器的配置,节省企业的成本。
加速管理
| 加速方式 | 核心原理 | 适用场景 | 架构/节点特点 | 性能与限制说明 |
|---|---|---|---|---|
| CDN 加速 | 由 CDN 全球广泛分布的边缘节点缓存 OSS 存储的静态数据,实现客户端从边缘节点直接获取缓存数据的方式来实现访问的加速。 | - 静态热点文件的下载加速 - 音视频点播 - 网站或应用中小文件 |
- CDN 边缘节点全球分布,数量较多。 - CDN 节点提供的服务带宽较大。 |
- 对于访问量大的资源命中率高,访问量小的资源命中率低。在节点未缓存的情况下,需要回源访问,回源依赖实时的公网回源链路。 - 对于上传、删除等动态请求加速效果不明显。 |
| 传输加速 | 利用全球分布的云机房,将全球各地用户对您的 Bucket 资源的访问,经过智能路由解析至就近的接入点,使用优化后的网络及协议,为云存储互联网的上传、下载提供端到端的加速方案。 | - 远距离数据传输加速 - GB、TB 级大文件上传和下载 - 动态、非热点数据下载加速 |
- OSS 存储节点分布在全球主要区域。 - 远距离以及大文件的上传和下载加速。 |
- 所有的访问都是回源到 OSS,占用 OSS 的服务带宽。 - 同一区域大量用户集中访问资源的情况下,传输加速没有 CDN 加速效果好。 |
| OSS 加速器 | 通过将数据存储在更高性能的介质上,提供高性能、高吞吐量的数据访问服务。 | - 低时延数据共享 - 大数据分析 - 模拟训练 - 多级加速 |
- 有效降低数据访问延迟 - 数据与 OSS 保持强一致性,无需关心缓存淘汰问题 |
- 对数据写入没有加速效果,写入量过大会降低加速效果 - 加速器容量起配额度较大,且仅支持部分地域通过申请白名单的方式使用 |
三种加速方式速记
- CDN 加速:关键词 -- 缓存、静态、边缘。场景:给最终用户看图、看视频、加载网页(解决"最后一公里"慢)。
- 传输加速:关键词 -- 链路优化、上传、远距离。场景:跨国传输、运维传大包、数据迁移(解决"公网链路质量差/丢包")。
- OSS 加速器:关键词 -- 内网、高性能介质、大数据。场景:服务器内部的高频计算、ETL、AI 训练(解决"后端读取 IOPS 瓶颈")。
CDN
将热点的静态文件缓存到 CDN 边缘节点,用户访问就不用去访问源站了。
对于下载效果好,对于上传、删除等加速不明显。
架构图:
- 将动态资源如Web程序、数据库等存放在云服务器 ECS 上。
- 将静态资源如图片、音视频、静态脚本等存放在对象存储OSS上。
- 将OSS作为CDN的源站,通过CDN加速分发,使用户通过CDN节点就近获得文件。
CDN + OSS 优势
- CDN降低了Web服务器负载,缩短网络传输距离,加快了用户调用速度
- OSS无限容量,不用考虑扩容
- OSS存储费用仅为ECS云盘的一半,CDN流量费用仅为OSS外网流量单价的 30-40%
创建步骤:
创建CDN选择oss加速 - 需要有一个备案好的域名作为加速域名 - 设置CNAME:主机记录是自己的域名,CNAME记录填阿里云提供的缓存站域名(xxx.w.kunlunaq.com)- OSS Object的域名选择开了CDN加速的自有域名 - 访问object url就可以在x-cache的header上看到==HIT==,说明命中cdn缓存
传输加速
开启传输加速功能后,OSS提供的其他Endpoint仍可正常使用。在不需要传输加速的场景中,您可以使用默认Endpoint以减少传输加速的费用。
开启传输加速后,Bucket会在保留默认Endpoint的基础上,新增以下两种传输加速Endpoint:
- 全球加速Endpoint:地址为 oss-accelerate.aliyuncs.com。传输加速接入点分布在全球各地,全球各地的Bucket均可以使用该域名进行传输加速。
- 非中国内地加速Endpoint:地址为 oss-accelerate-overseas.aliyuncs.com。传输加速接入点分布在除中国内地以外的各地域,仅在中国香港及海外各地域Bucket绑定未备案的域名做CNAME指向时使用。
OSS计费规则
容量计费
- 按量付费
- 资源包
- 预留空间:针对有地域属性的bucket产生的标准存储容量费用(本地冗余)以及ECS快照存储费用。
- 存储容量单位包SCU
抵扣顺序
地域资源包 - SCU - 按量付费
其他计费
- OSS费用 = 存储容量费用 + 外网流量费 + 请求次数费用
- 图片处理、传输加速、DDoS防护、CDN回源、跨区域复制等功能也都有对应的费用产生
镜像回源和重定向
当请求者向您的对象存储OSS请求的数据不存在时,本应返回404错误。
如果您设置了回源规则,填写了数据的正确地址,请求者即可通过回源规则从OSS获取到正确的数据。
回源分为==镜像回源==和==重定向==两种,可以满足您对于数据热迁移、特定请求的重定向等需求。
- 镜像回源:配置了镜像回源规则后,当请求者访问Bucket中一个不存在的文件(Object)时,OSS会向回源规则指定的源站获取这个文件。在获取到目标文件后,OSS会将文件返回给请求者并存入Bucket。镜像回源主要用于==数据无缝迁移到OSS==的场景。
- 重定向:配置了重定向规则后,当请求者访问Bucket发生指定错误时,OSS会将请求重定向至回源规则指定的源站。您可以利用这种跳转的功能对文件做重定向以及在此基础之上的各种业务。
镜像回源
例如某服务已经在自己建立的源站或者在其他云产品上运行。现因业务发展,需要将数据迁移到OSS上,但是又不能停止服务,此时可以在迁移数据的同时,使用镜像回源功能保证业务的正常进行。
- 回源规则触发条件:只有当GetObject本应该返回==404==的情况下,OSS才会执行镜像回源,向源站请求文件。
- 回源文件命名规则:
- OSS向源站请求的URL为
http(s)://MirrorURL/ObjectName,回源到OSS的文件名为ObjectName。 - 例如某Bucket设置的回源地址为
https://aliyun.com,某用户请求的文件example.jpg不在该Bucket中。则OSS会通过https://aliyun.com/example.jpg获取文件,存储到OSS的文件名为example.jpg。
- OSS向源站请求的URL为
- 回源请求失败返回规则:
- 如果镜像源也不存在此文件,即镜像源返回给OSS的HTTP状态码为404,那么OSS也会返回404给用户。
- 如果是其他非200的状态码(包括因为网络原因获取不到文件的错误情况),OSS将返回MirrorFailed给用户。
- 回源文件更新规则:若某个文件已经通过镜像回源到OSS,源站的源文件发生了变化,OSS==不会更新该文件==。
重定向
- 其他数据源向OSS的无缝迁移:当您将客户端的数据源异步地迁移至OSS,在此过程中未迁移到OSS的数据通过URL重写的方式返回给用户一个302重定向请求,您的客户端根据302中的Location从数据源读取数据。
- 配置页面跳转功能:例如您希望隐藏某些前缀开头的Object,给请求者返回一个特殊的页面。
- 配置发生404或500错误时的跳转页面:发生以上错误时,请求者可以看到一个预先设定的页面,不在系统发生错误的时候向请求者完全暴露OSS错误。
常用OSS工具
OSS提供多种灵活的上传、下载和管理方式。
- 通过控制台管理OSS,OSS提供了Web服务页面,您可以登录OSS控制台管理您的OSS资源。
- 通过API或SDK管理OSS,OSS提供RESTful API和各种语言的SDK开发包,方便您快速进行二次开发。https://next.api.aliyun.com/home
- 通过工具管理OSS,OSS提供图形化管理工具ossbrowser、命令行管理工具ossutil、FTP管理工具ossftp等各种类型的管理工具。
- 通过云存储网关管理OSS,OSS的存储空间内部是扁平的,没有文件系统的目录等概念,所有的对象都直接隶属于其对应的存储空间。如果您想要像使用本地文件夹和磁盘那样来使用OSS存储服务,可以通过配置云存储网关来实现。
ossutil
Object和Bucket的命令行管理工具。
- 提供方便、简洁、丰富的Object和Bucket管理命令,操作性能好。
- 支持文件==并发上传、断点续传==。
- 支持文件目录(文件夹)的上传下载。
ossbrowser
图形化的管理工具。
- 提供类似Windows资源管理器的功能。
- 支持直接浏览文件。
- 支持文件目录(文件夹)的上传下载。
- 支持文件并发上传、断点续传。
- 支持RAM 用户的图形化Policy授权操作。
- 支持Windows、Linux、Mac平台。
使用限制
- ossbrowser是图形化工具,传输速度和性能不如ossutil。
- 只支持 5 GB 以下的文件移动或复制。
- 单文件上传最大不能超过 48.8 TB。
签名工具
OSS控制台提供以下签名工具。
- Header签名:通过Header签名工具填入指定参数后,会自动生成请求签名,并校验请求签名的正确性。
- PostObject Policy签名:通过PostObject Policy签名工具填入指定参数后,会自动生成用于通过HTML进行表单上传的请求签名,并校验请求签名的正确性。
- URL签名:通过URL签名工具可以生成供访客进行临时访问的Object签名URL。生成Object签名URL时,您可以通过自定义URL的过期时间来限制访客的访问时长。
ossftp
管理Object的FTP工具。
- 使用FileZilla、WinSCP、FlashFXP等FTP客户端操作OSS。
- 本质是FTP Server,用于接收FTP请求,会将文件、文件夹的操作映射为对OSS的操作。
- 基于Python2.7及以上版本。
- 支持Windows、Linux、Mac平台。
ossfs
Bucket挂载工具。ossfs用于将OSS的Bucket挂载到Linux系统的本地文件系统中,挂载后可通过本地文件系统操作OSS上的Object,实现数据的访问和共享。
- 支持POSIX文件系统的大部分功能,包括文件读写、目录、链接操作、权限、UID、GID、以及扩展属性(Extended Attributes)。
- 支持使用OSS的Multipart功能上传大文件。
- 支持MD5校验,保证数据完整性。
使用限制
- 不支持挂载归档存储、冷归档存储或者深度冷归档存储类型Bucket。
- 编辑已上传文件会导致文件被重新上传。
- 元数据操作,例如list directory,因为需要远程访问OSS服务器,所以性能较差。
- 重命名文件或文件夹可能会出错。若操作失败,可能会导致数据不一致。
- 不适合高并发读写的场景。
- 多个客户端挂载同一个OSS Bucket时,数据一致性由您自行维护。建议您合理规划文件使用时间,避免出现多个客户端写同一个文件的情况。
- 不支持Hard Link。
- 如果您因意外中断了文件上传的过程,且未继续完成该文件的上传,则已上传的部分会以碎片(Part)的形式存储在OSS的存储空间(Bucket)中。如果您不再需要这些Part,建议您通过手动删除Part或者通过生命周期规则自动删除Part。
推荐替代方案
建议您优先使用==云存储网关==进行Bucket挂载。具体操作,请参见通过云存储网关挂载OSS。
ossimport
OSS数据同步工具。
- 可将各类第三方数据源文件同步到OSS上。
- 支持分布式部署,可使用多台服务器批量迁移数据。
- 支持==TB级以上==数据迁移。
- 支持Windows、Linux平台。
- 适用于Java 7。
说明
- 您也可以使用阿里云在线迁移服务,无需部署迁移工具。
- 对于迁移小于 30 TB 的数据,推荐使用ossutil,简单方便,通过
-u,--update和--snapshot-path选项还可以实现文件的增量迁移。
迁移速度问题
- 取决于源端的读取带宽、本地网络带宽、文件大小等因素
- 大量小文件(小于200KB),IOPS会比较高,也会导致迁移较慢
在线迁移服务
可以将第三方数据源、阿里云OSS、阿里云NAS的数据迁移到阿里云OSS。阿里云NAS之间互迁也可以。
Portal地址: https://mgwnext.console.aliyun.com/ (Portal上要搜"闪电立方",里面有在线迁移服务)
OSS零感知不停服在线热迁移
案例1:简单全量迁移
- 假设有两个bucket,旧bucket有100G数据,需要迁移到新bucket中,迁移速度0.01G/s,迁移完100G数据需要==2.7小时==。
操作:
- 全量迁移模式,bucket服务不停服不中断,迁移过程中用户可以正常访问数据。
- 但是访问的还是旧bucket的域名,同时数据会进行复制,达到100%进度的时候就进行割切,域名转移到新bucket上,旧bucket可以彻底删除
案例2:全量+增量迁移
- 旧bucket每小时都有5G数据写入
操作:
- 此时需要==全量+增量迁移==模式。
- 在线迁移服务中设置:每1小时进行增量部分的迁移
- 迁移速度快于数据增长速度,是可以完全迁移的。新旧bucket中的文件不存在不重叠。
- 只要在恰当的时刻割切到新bucket中,就可以无感知正常使用bucket
案例3:增量速度超过迁移速度
- 旧bucket每小时写入50G,迁移速度还是36G/h
操作:
镜像回源兜底方案
还是全量+增量模式的话,新bucket的数据永远不可能和旧bucket完全一致。此时可以:
1. 先开启全量同步,同步存量数据,然后启用新bucket的==镜像回源==。
2. 然后切换客户访问地址到新bucket,此时增量数据开始在新bucket上产生。
3. 在新bucket中404的object,去旧bucket回源,同时保存一份到新bucket。
4. 最后再把旧bucket中的未同步的增量数据同步到新bucket。
参考文档: https://help.aliyun.com/zh/data-online-migration/user-guide/seamless-business-migration-to-alibaba-cloud-oss#concept-orz-jyc-3gb