多云对象管理
背景
随着云计算技术的成熟,越来越多的中小型企业(特别是暂无自建:小文件存储体系的公司)采用多云(Multi-Cloud)或混合云(Hybrid-Cloud)战略,以避免被某个供应商锁定,与此同时,也能利用不同云厂商的优势技术。而图片
or 视频数据作为企业核心资产之一,常常分散存储在AWS
S3、Google Cloud Storage、Azure Blob Storage、阿里云OSS、华为云OBS、火山云tos等多个对象存储服务中。在这种背景下,跨云、跨账号的数据流动和管理变得日益频繁和复杂。
愿景
本文旨在打造一个统一、高效、安全的跨云存储管理平台。
1、提供统一前端管理界面,让用户无需关心底层云厂商的API差异,即可通过一个统一的api、界面、播放器、下载器,直观地在不同云存储桶之间浏览、管理和传输文件,实现数据的自由流动,大幅提升数据运维效率。
2、公司若决策从A云迁移到B云时,让上层业务,尽可能的少感知:底层小文件存储的迁移变化,基于此系统,只需简单几步,即可方便地:按照bucket维度实现:数据同步(增量 +
存量)、数据回源、数据验证、数据切换上线,数据割接。
3、需设计一套:权限认证体系,确保:不分发:ak/sk等永久权限配置信息,只分发:临时token。
模块分类
模块 | 功能说明 | 备注 |
---|---|---|
上传 | 将对象上传到指定的桶 | |
上传回调 | ||
预计算 | ||
对象meta信息查询 | ||
转存 | 从A桶转移到B桶 | |
云端同步处理 | ||
云端异步处理 | ||
下载 | form表单下载 or 分片下载 | |
播放 | 多码率播放、多cdn选择、边下载边播放 |
概要设计
1、基于安全考虑,永久ak/sk,只存放在:服务端STS中,其他所有业务系统都只有临时ak/sk,并且不能配置到配置文件中。
2、通过:accessCode + type,屏蔽掉:多云 +bucket的概念,业务方无需关心:多云的概念。
上传
1、客户端按照:accessCode + type,向服务端(STS)申请:上传token等信息。
2、客户端获取上传token等信息后,调用上传sdk将对象上传到小文件存储系统中。
大体过程,如下图所示:
界面设计:todo
阿里云 OSS 的 STS 临时授权机制 与 AWS 几乎完全一致:
项目 | 阿里云 OSS | AWS S3 |
---|---|---|
服务名称 | STS(Security Token Service) | STS(Security Token Service) |
Token 组成 | AccessKeyId, AccessKeySecret, SecurityToken, Expiration | AccessKeyId, SecretAccessKey, SessionToken, Expiration |
调用方式 | AssumeRole | AssumeRole |
颁发者 | RAM 角色授权 | IAM 角色授权 |
典型用法 | 客户端直传、跨账号授权、短期访问 | 同上 |
兼容性 | 与 S3 STS 语义一致 | 原生实现 |
SDK 支持 | OSS SDK 内置支持 | S3 SDK 内置支持 |
对比项 | AWS S3 | 阿里云 OSS | 说明 |
---|---|---|---|
临时凭证命名 | SessionToken | SecurityToken | 字段名不同 |
授权角色体系 | IAM Role | RAM Role | 概念等价 |
签名算法 | AWS4-HMAC-SHA256 | HMAC-SHA1/HMAC-SHA256 | 都为标准加密签名 |
失效时间 | 默认15min,可配最长36h | 默认15min,可配最长1h | 有限期一致 |
SDK 支持 | S3 SDK 原生 | OSS SDK 原生 | 均无缝支持 |
兼容性 | 标准 S3 协议 | 兼容 S3 语义,但非完全 API 兼容 | 字段差异小 |
使用场景 | 客户端直传、跨云迁移 | 同上 | 完全一致 |
上传回调
上传回调分为:客户端回调+小文件存储系统回调。之所以如此设计,是因为各个小文件存储系统对上传回调的支持情况不一致,具体如下:
存储系统 | 上传回调(Callback) | 事件通知(Event Notification) | 典型触发目标 | 适用场景 |
---|---|---|---|---|
阿里云 OSS | ✅ 支持(x-oss-callback ) |
✅ 支持(事件到 MNS/Kafka/函数计算) | HTTP/HTTPS 回调地址 / 消息队列 / 函数 | 上传后写库、触发转码、预处理 |
腾讯云 COS/TOS | ✅ 支持(SDK/API 配置 Callback) | ✅ 支持(COS 事件 → CMQ/SCF/Kafka) | 应用回调 / 消息队列 / 云函数 | 上传完成后业务通知、异步计算 |
AWS S3 | ❌ 不支持直接回调 | ✅ 支持(Event Notifications) | SQS / SNS / Lambda | 触发无服务器函数、事件驱动架构 |
Google Cloud Storage (GCS) | ❌ 不支持直接回调 | ✅ 支持(Pub/Sub 通知) | Pub/Sub → 消费者服务 | 上传后触发大规模分布式处理 |
MinIO / Ceph RGW | ❌ 不支持直接回调 | ✅ 支持(S3 Event → Kafka/NATS/AMQP) | 消息队列 / 流处理系统 | 本地化或私有云事件流处理 |
备注:
1、后台服务,根据配置可以选择:由客户端回调,还是:小文件存储系统回调。
对象meta信息查询
获取对象的meta信息,主要包括以下信息:
1、获取:视频的宽、高、大小、文件类型、时长、显示宽、显示高等
2、获取:图片的宽、高、大小、图片类型、色域等信息
以上动作是:常态化、频繁的查询动作,
预计算
正如上一章节所说,获取对象的meta信息,是常态化、频繁的查询动作,而计算对象meta信息的平均耗时:300ms左右(视图片、视频大小而又有变化),对于在线业务而言,确实有点慢。因此,为了减轻业务方的耗时瓶颈,最好触发预计算,也就是说:
当上传sdk将对象上传到:小文件存储系统后,根据配置,会触发相对应的计算,例如:计算对象的meta信息 + 社区上传视频相关时,全量触发:x264转码等。
转存
在纷繁复杂的实际业务场景中,考虑到:
1、成本隔离
2、不同的业务场景,文件生命周期不一致
3、国内与海外情况不一致,
转存,在很多场景下,是必须的,其大体过程,如下图所示: