这是我参与「第三届青训营 -后端场」笔记创作活动的的第5篇笔记
Tos
存储需求
为什么需要对象存储
- 单机存储
- 单机数据库
- 分布式数据库
- 分布式存储
冷热数据分级存储能力,热数据有更多的访问,冷数据较少访问。
Bucket/Object语义
-
Bucket:存储对象的桶
-
Object:对象
- Key:对象的名字
- Data:对象的内容
- MetaData:对象的一些辕信息,如对象大小
HTTP接口
对象存储适用场景
视频图片等
适合静态、Immutable
不适合结构化、Mutable
对象存储怎么用
申请Bucket
业务逻辑开发
上线测试
TOS字节内部实践
开发一个对象存储
- 接入层:接入解析并处理接口请求
- 元信息层:存储对象元信息
- 存储引擎层:存储对象内容
可扩展性解法-Partition
分布式:
- 存储均匀分布
- 计算均匀分布
- 压力均匀分布
Partion(分而治之)
- 分而治之:不同数据映射至不同Partition分区
- Partition Logic:Hash/Range
可扩展性如何达成
- 数据量增加:扩容机器新建Partition
- Partion Logic:新增数据写入映射导向新Partion
持久度解法-Replication
数据单节点存储,一定有较大概论丢失无法找回
复制(Replication)
-
数据复制多份
-
副本放置策略:
- 多机架
- 多机房
- 多Region
带来
- 高持久度:不丢数据
- 强吞吐能力:多个副本可以提供服务
成本解法-EC
EC(Erasure Coding)
- 冗余编码:可达到和多副本一样的持久度
特点
- 低冗余度:成本较单纯多副本低
- 额外计算:增加了额外的编码计算步骤
成本解法之温冷转换
架构细化
API:接入层
Bucket Meta:Bucket元信息服务
Object Meta:对象元信息服务
Distributed KV:Range Partition的分布式KV,用于持久化对象元数据
Storage Engine:对象内容存取服务
Distributed Storage Pool:分布式存储池,三副本or EC存储
GC:垃圾回收后台服务
Lifecycle:温冷转换后台服务
高可用解法之拆分降低爆炸半径
将一个集群分拆成多个集群,有效降低爆炸半径
完全镜像的主备Bucket,出现问题随时切换,真正100%的可用性!