【青训营X豆包MarsCode】第五课-TOS 对象存储实战
TOS 对象存储实战
对象存储基本介绍
抖音背后的存储
发/刷抖音背后有何流程?背后有何种存储需求?
短视频生产/消费
片源系统–>审核系统–>推送系统
片源系统:用户上传的原始视频文件。
审核系统:对视频内容进行审核和检测。
推送系统:审核通过后,视频被推送至用户推荐流。
存储需求:海量、便宜、易用
为什么对象存储
为什么需要对象存储呢?
海量数据:抖音每天生成海量的短视频文件。
高性价比:存储系统需要具备高效的数据存储能力,同时成本需控制在合理范围内。
易用性:存储系统需要简单易用,能够高效支持数据上传、下载以及检索等操作。
存储系统:单机存储、单机数据库、分布式数据库、分布式存储
单机存储(单机文件/KV):文件系统、Key-Value 存储
单机数据库(少量(半)结构化数据):关系型数据库、非关系型数据库
分布式数据库(大量(半)结构化数据):关系型数据库、非关系型数据库
分布式存储(大数据计算中间结果/视频/图片):分布式文件系统、对象存储
分布式存储:分布式文件系统HDFS、对象存储TOS
对象存储TOS更适合短视频生态
对象存储
对象:Key(名字)、Meta Data(元信息)、Data(信息)
适用场景:静态、Immutable(不可变)
视频、图片、文件、安装包、备份、前端js文件
不适用场景:结构化、Mutable
关系型数据、KV、随机写、Append写、更新频繁
对象存储使用方法
对象存储怎么用?
申请Bucket —> 业务逻辑开发 —> 上线测试
对象存储对外提供Restful风格的接口
弱网环境大对象上传,解决方法:MultiUpload(分片上传)
查看桶里面有哪些对象,解决方法:ListPrefix(分页列举)
TOS 字节内部实践
TOS在字节面临的场景有哪些?工程上的解法是?
容量型、QPS型
容量型
业务:片源、转码
特点:容量大、吞吐大、高持久度
挑战:可扩展性、成本、持久度
QPS型
业务:抽帧
特点:QPS极高
挑战:可扩展性
可扩展性解法之Partitor(分而治之)
Q、Hash/Range方式优劣?
Hash分区:将数据通过哈希函数分配到不同的存储节点,均衡负载,但可能导致数据热点问题。
Range分区:按数据范围分配存储,适合某些场景,但可能出现数据不均衡。
Q、各Partition之间如何负载均衡?
采用一致性哈希、动态分区等技术实现负载均衡,确保每个节点的存储负载均衡,避免某些节点成为瓶颈。
持久化解法之Replication
Q、Replication的拷贝方式有哪些?
同步复制:数据写入时同步复制到多个副本节点,确保数据一致性,但可能带来延迟。
异步复制:数据写入后异步复制到副本节点,减少延迟,但在某些情况下可能会丢失数据。
Q、Replication如何解决一致性问题?
使用 一致性协议(如Paxos、Raft)来保证数据复制的一致性,同时采取 日志记录 和 版本控制 等方式确保数据的持久性和一致性。
成本解法之EC
Q、当前的EC编码算法有哪些?
常见的纠删码(Erasure Coding)算法有 Reed-Solomon编码 和 XOR编码,它们可以通过冗余存储减少存储成本,并提高容错能力。
Q、多机房的EC如何实现?
通过将数据分片并存储在不同机房的节点上,即便某个机房发生故障,也能通过其他机房的副本恢复数据。
成本解法之温冷转换
将冷数据转移到性能更差但更廉价的存储介质
存储需求量细化
在设计和实现对象存储系统时,需要关注以下几个关键指标:
可用性(Availability)
- 服务的可靠性,通常通过 SLA(服务等级协议)来衡量。
数据恢复点目标(RPO)
- 指定在系统发生故障后,数据丢失的最大允许时间。
数据恢复时间目标(RTO)
- 指定在系统故障后,恢复数据和服务所需的最大时间。
小结
1、现代互联网应用存在普遍的视频/图片等静态内容的海量存储需求
2、对象存储以其极佳海量存储能力,低廉成本,易用性,称为这类场景的不二之选
3、对象存储的数据类型:Bucket/Object,基本接口Put/Get/Head/Delete,高阶接口MultiUpload/ListPrefix
4、对象存储工程上的挑战和解法