这是我参与「第五届青训营」伴学笔记创作活动的第 15 天
本节课主要介绍:
一、抖音背后的存储
短视频架构初探:
片源系统 |—送审—> 审核系统 |—放出—> 推荐系统--短视频生产/消费
(客户端、账号系统、评论系统)
这一条链路上,会有片源,也就是承接用户上传的内容,然后还有个审核服务,对这些内容进行合规的审核,最后这些内容会根据机器学习打上标签,通过历史观看兴趣通过推荐服务推荐到手机上
存储需求:
把短视频生产消费链路做更细粒度分解,发现到处都有视频/图片的公共存储需求,并要求易用、海量、便宜
二、为什么对象存储
但分布式存储也有分布式文件系统和对象存储,应该选择哪个呢?
分布式文件系统HDFS:
支持PB->EB海量存储; 文件数量受Name Node限制;
伪Posix文件接口,开发略复杂; 非云原生,搭建维护较麻烦; 视频/图片相关生态接入略复杂;
使用普通X86服务器,成本低
对象存储TOS:
支持>EB海量存储; 对象数量无限制;
Restful HTTP接口,开发极简单; 云原生,按需申请使用; 视频/图片相关生态丰富;
使用普通X86服务器; 具备冷热数据分级存储能力,成本更低
接口对比可知其易用性;适用场景也更为丰富
三、对象存储怎么用
Restful接口:
申请完Bucket后,要开启开发,对象存储对外提供的一般都是Restful风格的接口。
PUT:
参数:Bucket,.Key,对象内容
返回:成功/失败
GET:
参数:Bucket,Key
返回:对象内容
HEAD:Lite版GET
参数:Bucket,Key
返回:对象元信息,如大小/Content-Type等
DELETE:
参数:Bucket,Key
返回:成功/失败
MultiUpload接口:
随着开发的深入,发现自己上传数GB的大视频时,由于网络不好,总是上传到99%就网络卡住了,就有了一个解决此场景的闪电三连鞭:MultiUpload
Listprefix接口:
把上传/下载/删除对象存储等基本场景搞定后,想看看桶里面有哪些对象,可以用到一个分页列举接口:ListPrefix