这是我参与「第三届青训营-后端场」笔记创作活动的第5篇笔记。内容主要是关于对象存储的介绍和字节内部TOS的问题处理策略。
对象存储
-
简介
- 对象存储将数据作为对象进行管理,每个对象通常包括数据本身、数量不等的元数据和一个全局唯一的标识符。对象存储系统中可以保存大量的非结构化数据(文本、图片、音视频等)。属于分布式存储之一(还有分布式文件系统)。
-
为什么需要对象存储
-
海量数据、易用性要强高、价格成本低
-
适用场景
- 视频
- 图片
- 文件
- 安装包
- 备份
- 前端js文件 静态的、不变的数据
-
不适用场景
- 关系型数据,如商品订单
- KV缓存记录
- 随机写,如在线编辑文件更新频繁 结构化、易变的数据
-
-
对象存储怎么用
-
流程:申请Bucket、业务逻辑开发(视频上传、下载、删除、查看)、上线测试
-
Restful接口
- PUT(Bucket, Key, 对象内容) -- 上传视频
- GET(Bucket, Key) -- 下载视频
- HEAD(Bucket, Key) -- 查看视频元信息
- DELETE(Bucket, Key) -- 删除视频
-
大数据量文件上传
- InitUpload
- UploadPart
- CompleteUpload
-
分页列举
- ListPrefix
-
TOS 字节内部实践
-
面临的挑战
- 可拓展性:容量/吞吐需要可线性扩展
- 成本:单位存储成本需要足够低
- 持久度:如何在保证成本的情况下,确保高持久度
-
可拓展性解法 -- Partition
- 采用分而治之的思想,将不同的数据映射至不同的Partition分区,当数据量增加时,扩容机器新建Partition即可
-
持久度解法 -- Replication
- 避免数据的单节点存储,防范持久度的敌人,即不可靠的软硬件、自然灾害。。。将数据复制多份,同时维护多个副本。其中,副本的放置策略有多机架、多机房、多Region。这样,不仅可以带来高持久性,还可以带来强吞吐能力。
-
成本解法 -- EC
- Replication虽然可以解决持久性问题,但单纯拷贝多副本的成本也非常高,所以采用冗余编码(Erasure Coding)的方式,降低单纯多副本的成本
-
成本解法 -- 温冷转换
- 一句话说明,将冷数据迁移到性能更差但成本更低的存储介质,由此降低成本
-
高可用解法 -- 拆分降低爆炸半径
- 即将一个集群拆分成多个集群,降低故障发生时的爆炸半径
-
高可用解法 -- 粤核酸的启发
- 多个集群间双向同步
-
高可用解法 -- 镜像灾备
- 完全镜像的主备Bucket,出现问题时随时切换