一.TOS背后的存储
当前正处于短视频火热阶段,就以抖音为例,接下来我们来看一下抖音短视频的一个架构。首先,抖音客户端我们肯定需要有一个,然后也要有账号,也要有评论服务,但核心的来说,向抖音这类APP都是UGC,就是用户生产内容的平台,所以重中之重我们的内容生产到推荐这条链路: 这一条链路上,会有片源,也就是承接用户上传的内容,然后还有个审该服务,对这些内容进行合规的审核,最后这些内容会根据机器学习打标签,通过各位同学的历史观看兴趣通过准荐服务推荐到各位同学的手机上。
小明发布一条抖音,首先肯定是上传视频到片源服务,这里片源服务将用户上传视频存储起来,作为源视频;接下来需要对源视频进行转码,因为需要保证不同客户端都能适配自己的分辨率,转码之后也需要存储起来,以便后续客户端拉取;然后转码的同时下面有一条抽帧服务,将视频抽成不一样的帧,用于审核服务做审核,这里也需要调用存储将视频存放起来;最后就是抖音的推荐服务,将视频推荐出去,其他人也都可以使用客户端观看了。
随着时间的推移,抖音客户量日益增多,越来越多人参与抖音短视频拍摄,这会发现存储量越来越大,存储需求量需要量化。这个时候就需要一个易用、海量、便宜的存储。
二.为什么使用对象存储
我们都知道存储系统分为单机存储、单机数据库、分布式数据库、分布式存储。单机存储包含文件系统和Key-Value存储,单机数据库、分布式数据库都包含关系型数据库和非关系型数据库,分布式存储包含分布式文件系统和对象存储。小明对这四类存储根据是否支持海量存储和适合数据类型,发现只有分布式存储适合。
对象存储TOS在海量层面支持>EB海量存储,对象数量无限制;在易用层面采用Restful HTTP接口,开发极简单,云原生视频和图片相关生态丰富;在便宜层面使用普通X86服务器,具备冷热数据分级存储能力成本更低。
易用性:接口对比
Bucket:存储对象的桶,可类比一个云上的Map
Object: 对象,包含如下三个部分
Key: 对象的名字,可类比Map的Key
Data: 对象的内容,例如视频/图片内容
MetaData: 对象的一些元信息,如对象大小,对象Content-Type,也可以存储自定义元信息
HTTP接口 任何时间、任何地点、任何互联网设备上传和下载数 据 支持HTTP协议的各种客户端都可访问
接口速览 GET:下载对象
HEAD: 查看对象元信息
PUT: 上传对象 DELETE: 删除对象
三.对象存储这么用
首先,申请Bucket。接着业务逻辑开发,涉及视频上传、视频下载、视频删除、视频查看。最后,上线测试,拍一条视频,给自己视频点赞。