抖音背后的存储
短视频架构
- 短视频生产/消费:片源系统--送审-->审核系统--放出-->推荐系统
- 公共系统:客户端、账号系统、评价系统
存储需求
-(片源服务)存储源视频、(转码服务)存储不同码率视频、(抽帧服务)存储抽帧后的图片
- 易用、海量、便宜
为什么需要对象存储
- 存储系统分类:单机存储、单机数据库、分布式数据库、分布式存储
- 分布式存储:分布式文件系统HDFS和对象存储TOS
易用性
- 对象存储云端分为Bucket和Object:类型简单
- 对象存储使用HTTP接口:具备任何时间、任何地点、任何互联网设备上传和下载数据的能力;支持HTTP协议的各种客户端都可访问
适用场景
- 静态、Immutable
- 结构化、Mutable
对象存储怎么用
- 申请Bucket
- 业务逻辑开发(CRUD--增删改查)
- 上线测试
申请Bucket
对象存储很多云厂商都支持。可自行在官网申请。
Restful接口
对象存储对外提供的一般都是Restful风格的接口。
- HTTP协议分为url、method、header、body
- Restful的url:{Bucket}/{Object Key}
- Restful的method:put、get、head、delete
- Restful的header:Object metadata
- Restful的body:Object data
MultiUpload接口
闪电三连鞭:InitUpload、UploadPart、CompleteUpload
Listprefix接口
分页列举接口:可以看清桶里面的对象
TOS字节内部实践
开发一个对象存储
- 经典三层架构:
- 接入层:接入解析并处理接口需求
- 元信息层:存储对象元信息
- 存储引擎层:存储对象内容
- 梳理经典业务场景:
- 容量型:片源业务、转码业务(容量大、吞吐大、高持久度)
- QPS型:抽帧业务(QPS极高)
可扩展性解法之Partition
- 分布式存储=分布式+单机存储
- 分布式:存储均匀分布、计算均匀分布、压力均匀分布
- Partition 分而治之:不同数据映射至不同Partition分区
- 数据量增加:扩容机器新建Partition
- Partition Logic:新增数据写入映射导向新Partition
持久度解法之Replication
- 数据单节点存储,一定有较大概率丢失无法找回
- Replication 复制:数据复制多份,即多个副本,放置在多个不同地方(多机架、多机房、多Region)
- 高持久度:不丢数据
- 强吞吐能力:多个副本可以提供服务
成本解法之EC
- EC(Erasure Coding) 冗余编码:可达到和多副本一样的持久度
- 低冗余度:成本较单纯多副本低
- 额外计算:增加了额外的编码计算步骤
成本解法之温冷转换
- 数据都是有温度的,将冷数据转移到性能更差但更廉价的存储介质
高可用解法
- 拆分降低爆炸半径:一个集群拆分成多个集群,有效降低爆炸半径
- 镜像灾备:完全镜像的主备Bucket,出现问题随时切换,保证100%的可用性
架构细化
- 接入层API
- RPC+RPC+HTTP
- 对象存储池(Bucket Meta、Object Meta、Storage Engine)