这是我参与「第五届青训营」笔记创作活动的第九天
一、为什么需要对象存储
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