这是我参与「第五届青训营 」笔记创作活动的第9天
Tos对象存储实战
1.抖音背后的存储
短视频生产/消费:片源系统>>(送审)>>审核系统>>(放出)>>推荐系统
公共系统:客户端、账号系统、评论系统
视频上传流程:
- 手机上传视频到片源服务,片源服务将视频存储。
- 片源服务将视频发送抽帧服务和转码服务。
- 抽帧服务将视频抽帧采样并存储。
- 转码服务将原视频转换为不同清晰度、不同码率的视频并存储。
- 抽帧后的图片被送往审核服务。
- 机器或人工审核过后视频被传给推荐服务。
- 用户可以获取推荐列表或下载推荐视频/图片。
存储要求:易用、海量、便宜。
2.为什么需要对象存储
单机存储:文件系统。key-value存储。
单机数据库:关系型数据库。非关系型数据库。
分布式数据库:关系型数据库。非关系型数据库。
分布式存储:分布式文件系统。对象存储。
| 存储备选 | 海量数据 | 适合数据类型 | 是否入选 |
|---|---|---|---|
| 单机存储 | No | 单机文件/KV | No |
| 单机数据库 | No | 少量(半)结构化数据 | No |
| 分布式数据库 | Yes | 大量(半)结构化数据(数量多、容量不大。存大量小文件) | No |
| 分布式存储 | Yes | 大数据计算中检结果/视频/图片等 | Yes |
为什么是分布式对象存储
| 海量 | 易用 | 便宜 | |
|---|---|---|---|
| 分布式文件系统HDFS | 支持PB->EB海量存储。文件数量受NameNode限制。 | 伪Posix文件接口,开发略复杂。非云原生,搭建维护较麻烦。视频/图片相关生态接入略复杂。 | 使用普通x86服务器,成本低。 |
| 对象存储TOS | 支持>EB海量数据。对象数量无限制 | Restful HTTP接口,开发极简单。云原生,按需申请使用。视频/图片相关生态丰富。 | 使用x86服务器。具备冷热数据分级存储能力,成本更低。 |
易用性:接口对比
HDFS客户端与服务端使用TCP私有协议连接。服务端HDFS使用树状文件目录,操作命令多,且与目录文件操作息息相关。
弱POSIX文件系统语义:
- 目录/文件
- Append写
- 无法直接HTTP访问
对象存储对外展现一个桶(Bucket),使用HTTP协议URL:{bucket}.xxx.com/{object}即可访问对象。
Bucket/Object语义:
- Bucket:存储对象的桶,可类比一个云上的Map
- Object:对象,包含三部分,key(对象的名字)、Data(对象的内容,如视频、图片等)、MetaData(对象的一些元信息,比如对象大小、内容类型、也可以存储自定义元信息)
HTTP接口:任何时间、任何地点、任何互联网设备上传和下载数据。支持HTTP协议的各种客户端都可以访问。
适用场景
适用于:视频、图片、文本、安装包、备份、前端js文件等静态(Immutable)文件。
不适用于:关系型数据库(只存储,无法理解关系,难以存储结构化数据)、KV(性能不如redis)、随机写(只支持静态内容,不支持改写)、Append写、更新频繁。
3.对象存储怎么用
- 申请bucket
- 业务逻辑开发(视频上传、视频下载、视频删除、视频查看)
- 上线测试
申请bucket
对象存储很多云厂商都支持,此处介绍字节的TOS。
构建bucket名称。数据描述(数据类别、数据访问级别、保密级别等。用于系统审计)。填写吞吐需求。提交。
restful接口
使用HTTP协议的PUT、GET、HEAD、DELETE方法。
MultiUpload接口
防止大对象上传失败:将大对象分为小对象,标上uploadID,然后分开上传。
Listprefix接口(分页查询)
参数:
- prefix:key前缀
- delimiter:分隔符,默认为/
- max-keys:本次分页数量
- start-after:分页起始对象key
4.TOS设计中考虑的问题
三层架构
元信息层<<(写入/读取对象元信息)<<接入层>>(写入/读取对象内容)>>存储引擎层
- 接入层:接入解析并处理接口请求,解析HTTP、安全校验等。
- 元信息层:存储对象元信息。
- 存储引擎层:存储对象内容。
总结业务场景
经典业务场景分为容量型和QPS型。
容量型代表业务包括片源存储、转码视频存储。特点为大容量、大吞吐、高耐久度。挑战包括可拓展性(容量、吞吐扩展)、成本(要存很多数据,因此需要单价低)、持久度。
QPS型代表业务包括审核抽帧存储。特点为QPS极高。挑战为QPS的可扩展性。
问题解决
可拓展性:分布式存储
持久度:备份,多机架/多机房/多地区
成本降低
EC(Erasure Coding)冗余编码,用更少的空间达到多副本一样的持久度。
冷热转换:将热点存在快而小的存储介质中,冷数据存于大而慢的磁盘中。
高可用
集群拆分,降低爆炸半径(机房故障后,不可用机器的占比)。增量双向同步(所有机器记录增量,把增量更改传给其它机器)。
引用