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、对象存储工程上的挑战和解法