TOS对象存储 | 青训营笔记

125 阅读2分钟

这是我参与「第五届青训营」笔记创作活动的第九天

一、为什么需要对象存储

1、存储系统的分类

  • 单机存储:文件系统、Key-Value存储
  • 单机数据库:关系型数据库、非关系型数据库
  • 分布式数据库:关系型数据库、非关系型数据库
  • 分布式存储:分布式文件系统、对象存储

2、存储对比(适合数据类型)

  • 单机存储:单机文件
  • 单机数据库:少量结构化数据
  • 分布式数据库:大量结构化数据
  • 分布式存储:大数据计算中间结果

二、对象存储怎么用

1、申请Bucket

对象存储很多云厂商都支持,这里可以选择字节的TOS

2、Restful接口

申请完Bucket后,要开启开发,要了解到对象存储对外提供的一般都是Restful风格的接口

3、MultiUpload接口

随着开发的深入,如果上传内存很大的文件,可能上传到一半卡住,这时候就需要用到MultiUpload接口

4、Listprefix接口

把上传、下载、删除对象存储等基本场景搞定后,想要看桶里有哪些对象,需要一个分页列举接口,即Listprefix接口

三、TOS字节内部实践

1、开发一个对象存储

三层架构

  • 接入层:接入解析并处理接口请求
  • 元信息层:存储对象元信息
  • 存储引擎层:存储对象内容

架构细化

  • 容量型:
    • 代表业务:片源、转码
    • 特点:容量大、吞吐大、高持久度
    • 挑战:容量、吞吐需可现行扩展;单位存储成本需足够低;如何在保证成本的情况下,确保高持久度
  • QPS型:
    • 代表业务:抽帧
    • 特点:QPS极高
    • 挑战:QPS需可线性扩展

2、可扩展性解法之Partition

分布式存储 = 分布式 + 单机存储
分布式:

  • 存储均匀分布
  • 计算均匀分布
  • 压力均匀分布 分布式系统相当于一个蜂群,每个节点都负责一小部分数据存储和计算

Partition

  • 分而治之:不同数据映射至不同Partition区
  • Partition logic : Hash/Range

可扩展性如何达成

  • 数据量增加 : 扩容机器新建partition
  • Partition logic : 新增数据写入映射导向新partition