引入对象存储
streaming对象存储要求
- 易用
- 海量
- 便宜
如何兼容三大要求呢?
存储系统分类
(回顾存储系统)
- 单机存储(不支持海量存储)
- 文件系统
- KV存储
- 单机数据库(不支持海量存储)
- 关系型数据库
- 非关系型数据库
- 分布式数据库(支持大量(半)结构化存储)
- 关系型数据库
- 非关系型数据库
- 分布式存储(支持大量图片/视频存储)
- 分布式文件系统(HDFS)
- 对象存储(TOS)
分布式文件系统HDFS VS. 对象存储
HDFS:HDFS文件数量受Name Node影响,开发略麻烦,非云原生,搭建维护较麻烦,视频图片相关生态介入略复杂,使用普通X86服务器,成本低
TOS:对象数量无限制,Restful HTTP接口,开发极简单,视频图片相关生态丰富,使用X86服务器,具备冷热数据分级存储能力,成本更低
TOS接口
Bucket存所有obj
每个obj包括key, Meta Data, Data:
- Key:对象的名字,可类比Map的Key
- Data:对象的内容,例如视频/图片内容
- MetaData:对象的一些元信息,如对象大小,对象Content-Type, 也可以存储自定义元信息
适用场景
✅Immutable object:视频,图片,文本,安装包等等
❎Mutable: 关系型数据,KV,在线编辑文件,更新频繁数据
对象存储怎么用
- 申请Bucket
- 业务逻辑开发(增删改查):
- 视频上传(PUT)
- 视频下载(GET)
- 视频删除(DELETE)
- 视频查看(HEAD)
- 上线测试
MultiUpload接口
上传N个GB的大视频网络不好容易上传失败,可以使用MultiUpload接口 概念:把文件分成不同小部分(part),分别上传
-
InitUpload:
- 参数:Bucket, Key
- 返回:UploadId
-
UploadPart:
- 参数:UploadId,PartId, Part内容
- 返回:成功/失败
-
CompleteUpload:
- 参数:UploadId, PartId Array
- 返回:成功/失败
Listprefix接口
想看桶里有哪些对象,可以使用分页列举接口:ListPrefix
-
ListPrefix参数:
-
prefix: key前缀
-
delimiter: 分隔符,默认为/max-kevs:本次分页数量
-
start-after:分页起始对象Key
-
-
ListPrefix返回:
-
common-prefix: 共同前缀
-
objects:对象key列表
-
isTruncated:是否已经列举完
-
延长数据持久度:Replication
数据复制多份,存在多个副本
高持久度:不丢数据
强吞吐能力:多个副本可以提供服务
未来展望
- 容量治理
- 成本优化
- 大数据生态
- 稳定性提升