TOS对象 | 青训营笔记

181 阅读5分钟

这是我参与「第五届青训营 」笔记创作活动的第9天

Tos对象存储实战

1.抖音背后的存储

短视频生产/消费:片源系统>>(送审)>>审核系统>>(放出)>>推荐系统

公共系统:客户端、账号系统、评论系统

视频上传流程:

  1. 手机上传视频到片源服务,片源服务将视频存储。
  2. 片源服务将视频发送抽帧服务和转码服务。
  3. 抽帧服务将视频抽帧采样并存储。
  4. 转码服务将原视频转换为不同清晰度、不同码率的视频并存储。
  5. 抽帧后的图片被送往审核服务。
  6. 机器或人工审核过后视频被传给推荐服务。
  7. 用户可以获取推荐列表或下载推荐视频/图片。

存储要求:易用、海量、便宜。

2.为什么需要对象存储

单机存储:文件系统。key-value存储。

单机数据库:关系型数据库。非关系型数据库。

分布式数据库:关系型数据库。非关系型数据库。

分布式存储:分布式文件系统。对象存储。

存储备选海量数据适合数据类型是否入选
单机存储No单机文件/KVNo
单机数据库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.对象存储怎么用

  1. 申请bucket
  2. 业务逻辑开发(视频上传、视频下载、视频删除、视频查看)
  3. 上线测试

申请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)冗余编码,用更少的空间达到多副本一样的持久度。

冷热转换:将热点存在快而小的存储介质中,冷数据存于大而慢的磁盘中。

高可用

集群拆分,降低爆炸半径(机房故障后,不可用机器的占比)。增量双向同步(所有机器记录增量,把增量更改传给其它机器)。

引用

Tos对象存储实战|青训营笔记

【后端专场 学习资料六】第五届字节跳动青训营