这是我参与「第五届青训营 」伴学笔记创作活动的第 14 天
这里主要是TOS相关内容的讲解,本节课主要通过对比分布式存储选型,讲解对象存储的优势,分析为什么我们需要对象存储。
抖音背后的存储
短视频架构初探
存储需求:
-
需求细化:
- Day: 1730 TB, 432块4TB磁盘,20亿个视频/图片
存储量真的是超级超级大!!!
找到一个合适的存储,易用,便宜,海量
为什么对象存储
存储选型
-
存储种类:
-
单机存储:
- 文件系统
- kv存储
-
单机数据库:
- 关系型数据库
- 非关系型数据库
-
分布式数据库:
- 关系型数据库
- 非关系型数据库
-
分布式存储:
- 分布式文件系统
- 对象存储
-
-
各类存储对比:
分布式存储最适合昂!!!
- 分布式文件系统 vs 对象存储TOS
易用性
- HDFS:
- 对象存储:
好处:HTTP接口就能用啦,非常简单易用昂!!!互联网都是HTTP建立的昂,能用HTTP,就非常简单!!!
TOS适用场景
-
适用场景:
- 视频
- 图片
- 文本
- 安装包
- 备份
- 前端js文件 ......
静态、Immutable
-
不适用场景:
- 关系型数据:商品订单...
- KV:缓存记录...
- 随机写:在线编辑文件
- Append写:大数据计算中间结果...
- 更新频繁:钱包余额...>_ < ......
结构化、Mutable
简单来说:简单存取,很好用。就是个仓库嘛。一旦需要仓库去“理解”这些内容,并需要进行稍微复杂的逻辑分析,就不行了,那就用结构化的仓库去。
TOS就是很简单的,你塞个东西,就能访问到,很好用的昂!!!
对象存储怎么用
-
步骤:
-
申请Bucket
-
业务逻辑开发:
- 视频的CRUD
-
上线测试:
- 视频操作测试
-
Restful接口
MultiUpload接口
随着开发的深入,小明发现一个问题,自己. 上传数GB的大视频时,由于网络不好,总是上传到99%就网络卡住了,他很恼火,翻遍对象存储各类手册,终于发现了一个解决此场景的闪电三连鞭: MultiUpload
Listprefix接口
小明把上传/下载/删除对象存储等基本场景搞定后,但是想看看桶里面有哪些对象,这时候他又犯难了, 继续翻遍开发手册后,他发现了一个分页列举接口: ListPrefix
TOS字节内部实践
开发一个存储对象
- 短视频应用上线后,大获成功,对象存储在公有云的使用量特别大,数据量大了,领导决定自研对象存 储,这个重任又交给了小明。小明很快想出了一个经典的三层架构:
- 接入层: 接入解析并处理接口请求
- 元信息层: 存储对象元信息
- 存储引擎层: 存储对象内容
-
架构细化:
-
容量型
- 代表业务 片源: 用户上传源视频 转码: 源文件转码后的视频
- 特点 容量: 海量,EB 吞吐: 海量,>> 100GB/S 高持久度: 用户视频不能丢
- 挑战 可扩展性: 容量/吞吐需可线性扩展 成本: 单位存储成本需要足够低 持久度: 如何在保证成本的情况下,确保高持久度
-
QPS型:
- 代表业务 抽帧: 源视频审核用抽帧
- 特点 QPS: 极高,100K/s
- 挑战 可扩展性: QPS需可线性扩展
-
可拓展性-Partition
分布式存储=分布式+单机存储 分布式:
- 存储均匀分布
- 计算均匀分布
- 压力均匀分布
分布式系统相当于一个蜂群,每个节点都负责 小部分数据存储和计算,达到1+1 >= 2的效果
持久度-Replication
-
持久度的敌人: 不可靠的一切
- 不可靠的硬件
- 不可靠的软件
- 自然灾害
- 甚至是太阳黑子!
数据单节点存储,一定有较大概率丢失无法找回! ! !
- Replication:
一致性就是Replication引出的问题
成本-EC
Erasure Coding
Replication虽然可以解决持久化的问题,但是单纯多副本拷贝成本非常高。 -> EC可以实现降本昂!
成本-温冷转换
不常用的数据,存到性能更差,成本更低但是更廉价的存储介质上,不就更好咩!!!
架构细化
存储需求量细化-高可用
可用性!高可用!!!