青训营笔记 | TOS对象存储实战研学笔记

131 阅读4分钟

TOS对象存储实战研学笔记

以抖音为例,其背后的存储系统需要处理海量的视频和图片数据。通过学习我在实际开发中如何使用对象存储有了一定的认知,并通过字节跳动内部实践案例,深入理解TOS对象存储的架构和应用。

一、抖音背后的存储需求

1.1 短视频架构初探

课程中的小明在研究抖音的存储架构时,发现了一个核心问题:如何高效地处理用户上传的视频内容。他设计了一个架构,包括以下几个关键组件:

  • 片源系统:接收用户上传的视频。
  • 审核系统:对视频内容进行合规性审核。
  • 转码服务:将视频转换为不同分辨率,以适应不同客户端的需求。
  • 抽帧服务:从视频中抽取关键帧,用于审核和推荐。
  • 推荐系统:根据用户行为和偏好,推荐视频内容。

1.2 存储需求细化

小明进一步细化了存储需求,发现短视频生产和消费链路中,视频和图片的存储需求巨大。他通过数学计算,预测了存储量的需求:

  • 每日存储需求:1730TB,相当于432块4TB磁盘,存储20亿个视频/图片。
  • 每月存储需求:51900TB,相当于12960块4TB磁盘,存储622亿个视频/图片。
  • 年度存储需求:631450TB,相当于157680块4TB磁盘,存储7568亿个视频/图片。

二、为什么选择对象存储

2.1 存储系统分类

在字节青训营的课程中,小明学习了存储系统的分类,包括单机存储、单机数据库、分布式数据库和分布式存储。他发现,对于短视频平台的海量数据,单机存储和单机数据库无法满足需求,而分布式数据库虽然支持海量数据,但不适合存储非结构化数据如视频和图片。

2.2 对象存储的优势

对象存储eg:TOS具有以下优势:

  • 海量存储支持:能够存储超过EB级别的数据。
  • 易用性:提供Restful HTTP接口,开发简单。
  • 成本效益:使用普通X86服务器,具备冷热数据分级存储能力,成本更低。

三、对象存储的使用

3.1 Restful接口

小明了解到,对象存储对外提供的接口通常是Restful风格的。以下是基本的接口操作:

  • PUT:上传对象,参数包括Bucket、Key和对象内容。
  • GET:下载对象,参数包括Bucket和Key,返回对象内容。
  • HEAD:查看对象元信息,参数包括Bucket和Key,返回对象大小、Content-Type等。
  • DELETE:删除对象,参数包括Bucket和Key,返回成功或失败。

3.2 ListPrefix接口

为了列举Bucket中的对象,小明使用了ListPrefix接口。该接口允许分页列举对象,参数包括:

  • prefix:key前缀。
  • delimiter:分隔符,默认为"/"。
  • max-keys:本次分页数量。
  • start-after:分页起始对象Key。

返回值包括共同前缀、对象key列表和是否已经列举完。

3.3 代码示例

以下是使用Python和boto3库操作TOS对象存储的示例代码:

python
import boto3

# 初始化TOS客户端
client = boto3.client(
    's3',
    endpoint_url='https://tos-endpoint',
    aws_access_key_id='YOUR_ACCESS_KEY',
    aws_secret_access_key='YOUR_SECRET_KEY'
)

# 上传对象
client.put_object(Bucket='your-bucket', Key='your-key', Body='your-content')

# 下载对象
response = client.get_object(Bucket='your-bucket', Key='your-key')
print(response['Body'].read())

# 查看对象元信息
response = client.head_object(Bucket='your-bucket', Key='your-key')
print(response['ContentLength'])

# 删除对象
client.delete_object(Bucket='your-bucket', Key='your-key')

四、TOS字节内部实践

4.1 自研对象存储的架构

随着短视频应用的上线,字节跳动决定自研对象存储。小明设计了一个三层架构:

  • 接入层:负责解析和处理接口请求。
  • 元信息层:存储对象的元信息。
  • 存储引擎层:负责存储对象内容。

4.2 架构优势

这种架构的优势在于:

  • 高可扩展性:可以水平扩展以处理更多的请求和数据。
  • 高可用性:通过分布式存储引擎,提高了数据的可靠性。
  • 成本效益:通过分级存储,优化了存储成本。

总结

通过记录研学笔记,我深入了解了TOS对象存储在短视频平台中的应用。从抖音背后的存储需求出发,我明白了为什么选择对象存储,以及如何在实际开发中使用它。通过字节跳动的内部实践案例,我看到了自研对象存储的架构和优势。对象存储以其海量存储能力、易用性和成本效益,成为了短视频平台存储需求的理想选择。