Tos 对象存储实战
抖音背后的存储:
如果我们要设计一个抖音系统,用户的上传视频之后的逻辑是怎么样的?那在存储上的架构应该是怎么样的?
客户端、账号系统、评论系统这些都是比较普遍的公共系统。
对于上传之后流程需要有以下几个部分:
- 片源系统:用来承接用户上传的内容。
- 审核系统:审核上传的内容,会根据一定的算法给视频打上标签
- 最后对打赏标签的视频通过用户的历史观看兴趣推荐系统推荐给用户
为什么是对象存储?
字节内部实践 - 开发对象存储
Partition(分治)
分布式存储 = 分布式 + 单机存储
分布式方式:
- 存储均分计算
- 计算均分计算
- 压力均分计算
Partition一般做法:
- Hash Partition:通过hash函数来做Partition的选取
- Range Partition: 通过range方式切分逻辑地址空间
持久化程度Replication(怎么保证数据不会丢呢?)
Replication 多副本提升持久度
思路:
- 将数据拷贝多份来存储
Replication一般做法:
-
多副本:将数据拷贝成多个镜像的副本存储
-
副本放置策略:
- 多机架
- 多机房
- 多Region
-
EC:使用Erasure Coding方法来构建冗余副本
带来的好处:
- 持久度高:宕机可以
- 吞吐能力也有提升:不同区域取数据效率更高
思考?
拷贝方式有哪些?
如何解决一致性问题?
单元化最小化爆炸半径
思路:
- 将系统切分成多个垂直独立的单元,单元之间互相无影响
单元化一般做法:
- 去除系统单点依赖:系统中没有强依赖的单点
- 构建流量调度能力:流量可在单元之间灵活调度
带来的好处:
- 可用性高
- 运维更友好
镜像灾备应对极端情况
思路:
- 构建镜像的主备集群应对极端情况
单元化一般做法:
- 同构灾备:使用同构系统来做数据的镜像备份
- 异构灾备:使用异构系统来做数据的镜像备份
带来的好处:
- 极高的可用性
- 极高的可靠性
开源节流提升性价比
思路:
-
开源:
- 冷热分离,使用更低成本存储介质
-
节流:
- 通过更高比例EC降低单位存储逻辑冗余
- 提升垃圾回收效率,提高磁盘空间利用率
带来的好处:
- 更高的性价比
RTO:数据恢复时间
- 单集群划分成多个集群
- 不同的粤核酸放在不同的集群,并且不同集群会做一个同步
- 增量双向同步:从bucket作为核心时,再恢复只需要把增量放到主bucket上就行