这是我参与「第三届青训营 -后端场」笔记创作活动的的第20篇笔记
- 为什么对象存储
- 存储系统分类
- 单机存储
- 单机数据库
- 分布式数据库
- 分布式存储
- 分布式文件系统
- 对象存储
- 适合存储大数据计算中间结果/视频/图片等
- 易用性
- Bucket/Object
- Bucket
- 存储对象的桶,可类比为云上的map
- Object
- 对象,包含如下三部分
- Key
- 对象的名字
- Data
- 对象内容
- MetaData
- 对象的一些元信息,如对象大小,对象Content-Type,也可以存储自定义元信息
- Key
- 对象,包含如下三部分
- Bucket
- HTTP接口
- 任何时间、任何地点、任何互联网设备上传和下载数据
- 支持HTTP协议的各种客户端访问
- 接口速览
- GET
- 下载对象
- HEAD
- 查看对象元信息
- PUT
- 上传对象
- DELETE
- 删除对象
- GET
- 适用场景
- 静态
- Immutable
- 不适用场景
- 结构化
- Mutable
- Bucket/Object
- 存储系统分类
- 对象存储怎么用
- 申请Bucket
- 业务逻辑开发
- RESTful接口
- URL
- {Bucket}/{Object Key}
- Method
- PUT
- 参数
- Bucket
- Key
- 对象内容
- 返回
- 成功/失败
- 参数
- GET
- 参数
- Bucket
- Key
- 返回
- 对象内容
- 参数
- HEAD
- 参数
- Bucket
- Key
- 返回
- 对象元信息
- 参数
- DELETE
- 参数
- Bucket
- Key
- 返回
- 成功/失败
- 参数
- PUT
- Header
- Body
- URL
- MultiUpload接口
- 大对象上传,分割上传串联
- InitUpload
- 参数
- Bucket
- Key
- 返回
- UploadID
- 参数
- UploadPart
- 参数
- UploadID
- PartID
- Part内容
- 返回
- 成功/失败
- 参数
- CompleteUpload
- 参数
- UploadID
- PartID Array
- 返回
- 成功/失败
- 参数
- Listprefix接口
- 分页列举,查看桶中对象
- 参数
- prefix
- key前缀
- delimiter
- 分隔符,默认为/
- max-keys
- 本次分页数量
- start-after
- 分页起始对象key
- prefix
- 返回
- common-prefix
- 共同前缀
- objects
- 对象key列表
- isTruncated
- 是否已经列举完
- common-prefix
- RESTful接口
- 上线测试
- TOS字节内部实践
- 架构
- 接入层
- 接入解析并处理接口请求
- 元信息层
- 存储对象元信息
- 存储引擎层
- 存储对象内容
- 接入层
- 可扩展性解法
- Partition
- 不同数据根据Hash/Range方法映射至不同的Partition分区
- 可扩展性
- 数据量增加
- 扩容机器新建Partition
- Partition Logic
- 新增数据写入映射导向新Partition
- 数据量增加
- Partition
- 持久度解法
- Replication
- 数据复制多份,即多个副本
- 副本放置策略
- 多机架
- 多机房
- 多Region
- 结果
- 高持久度
- 强吞吐能力
- Replication
- 成本解法
- EC(Erasure Coding)
- 冗余编码
- 可达到和多副本一样的持久度
- 特点
- 低冗余度
- 额外计算
- 冗余编码
- 温冷转换
- 将冷数据转移到性能更差更廉价的磁盘
- EC(Erasure Coding)
- 高可用
- 集群拆分
- 一个集群拆分成多个集群,有效降低爆炸半径
- 镜像灾备
- 完全镜像的主备Bucket,出现问题随时切换
- 集群拆分
- 架构