TOS 对象存储
介绍
对象存储定义
对象存储(Object Storage Service,OSS),也叫基于对象的存储,是一种解决和处理离散单元的方法,可提供基于分布式系统之上的对象形式的数据存储服务。
它提供RESTful API数据读写接口及丰富的SDK接口,并且常以网络服务的形式提供数据的访问。
特点
- 海量:支持>EB的海量存储
- 易用:Restful HTTP 接口,开发简单;云原生,按需申请使用;视频/图片相关生态丰富
- 便宜:使用普通 X86 服务器;冷热数据分级储存,成本更低
使用范围
适用于存储大量的非结构化数据,例如视频、图片等静态不可变数据
结构
Bucket/Object
-
Bucket: 存储对象的桶 , 可类比一个云上的 Map
-
Object: 对象 , 包含如下三个部分
-
Key:对象的名字,可类比 Map 的 Key
是该对象的全局唯一标识符,用于检索对象,而不需要知道数据的物理地址
-
Data:对象的内容,例如视频 / 图片内容
-
Meta Data:对象的一些元信息,如对象大小,对象 Content-Type, 也可以存储自定义元信息
与传统的文件存储不同,这类信息并不和文件一同存储,而是独立出来,这样可以加快对象的排序、分类和查找
-
通过 HTTP 接口快速访问
使用方法
- 申请 Bucket
- 对应逻辑开发(crud)
- 上线测试
Restful 接口
使用 HTTP 自身的能力去表示一些参数
直接通过 HTTP 的方法就可以快速地对对象进行增删改查
MultiUpload 接口
弱网情况下的大对象上传优化
-
InitUpload类似初始化一个会话
- 参数:Bucket, Key
- 返回:UpIoadld
-
UploadPart将每个切片和对应的“会话”联系起来,便于最后的组装
- 参数:UpIoadId, Partld, Part 内容
- 返回:成功/失败
-
CompIeteUpIoad依据
InitUpload返回的UploadId将切片连接起来,组成原对象- 参数: UpIoadId, PartId Array
- 返回:成功/失败
思想就是分而治之,将大对象切分成小对象,然后逐片上传,最后使用 CompleteUpload 将切片连接起来
Listprefix 接口
用于查看桶里面有哪些内容
-
ListPrefix 参数
- prefix:key 前缀
- delimiter:分隔符,默认为
/ - max-keys:本次分页数量
- start-after:分页起始对象 Key
-
LIstPrefix 返回
- common-prefix:共同前缀
- objects:对象 key 列表
- isTruncated:是否已经列举完
工程挑战
在真实的工程环境下,常常需要面对很多极端的业务场景,例如海量容量场景、海量QPS场景以及高可用性场景
海量容量场景: 业务持续产生大量数据,数据规模>>PB级别,存储容量和成本压力极大
海量QPS场景: 业务场景有高QPS读写请求,量级>>100K/s,并且时延要求极高,对底层存储IOPS压力极大
高可用性场景:业务对于SLA要求非常高,要求避免全局性不可用事件发生,但对于一致性要求比较低
这意味着对对象存储系统的可扩展性、持久度、可用性和性价比都有很高的要求
提升可扩展性
利用分片思想分而治之,将数据分片后再散布到分布式系统的不同节点中去存储 / 计算
Partition一般做法:
- Hash Partition:通过hash函数来做Partition的选取
- Range Partition: 通过range方式切分逻辑地址空间
这样做除了可用增加可扩展性,并且可以有效减少爆炸半径
爆炸半径即故障影响业务的范围
提升持久度
Replication 保持多份副本,将数据拷贝多份来存储
Replication一般做法:
- 多副本:将数据拷贝成多个镜像的副本存储
- EC:使用Erasure Coding方法来构建冗余副本
Erasure Code(纠错码)是一种编码技术,它可以将n份原始数据,增加m份数据,并能通过n+m份中的任意n份数据,还原为原始数据。即如果有任意小于等于m份的数据失效,仍然能通过剩下的数据还原出来。
同时也能提升吞吐能力
提高可用性
-
单元化最小化爆炸半径
通过将系统切分为多个垂直独立的单元,使得各单元之间无影响,降低了系统的耦合性
单元化一般做法:
- 去除系统单点依赖:系统中没有强依赖的单点
- 构建流量调度能力:流量可在单元之间灵活调度
提高了可维护性
- 灾备处理,利用同构或异构系统制作数据的镜像备份
提高性价比
-
开源:
使用冷热分离的存储技术,使用配置较低的设备存储冷数据,降低存储成本
-
节流
- 使用更高比例的 EC 减少存储逻辑冗余
- 提高垃圾回收效率,提高硬盘利用率