TOC对象存储
对象存储优势
支持>EB海量存储,对象数量无限制
Restful HTTP接口,开发简单,云原生,按需申请使用,视频/图片相关生态丰富
使用普通X86服务器,具备冷热数据分级存储能力,成本更低\
接口
Bucket/Object语义
Bucket: 存储对象的通,可类比为一个map
Object: 对象,包含Key对象名字,Data对象内容,MetaData对象元信息如大小、Content-Type等
HTTP接口 任何时间、任何地点、任何互联网设备上传和下载数据
Get 下载对象 HEAD 查看对象元信息 PUT 上传对象 DELETE 删除对象
适用场景
对象存储适用于视频,图片,文本,安装包,备份,前端js文件等静态Immutable数据。 但是不适用于关系型数据,KV,随机写,Append写,更新频繁的数据
对象存储使用
申请Bucket -> 业务逻辑开发(上传,下载,删除,测试) -> 上线测试
上传大对象MultiUpload接口
InitUpload 参数 Bucket,Key,返回UploadId
UploadPart 参数 UploadId,PartId,Part内容
CompleteUpload 参数UploadId,PartId Array,返回成功/失败
查看桶里有哪些对象ListPrefix接口
ListPrefix 参数 prefix key前缀,delimiter分隔符,默认为'/' ,max-keys 本次分页数量,start-after分页起始对象key
ListPrefix 参数common-prefix共同前缀 ,objects对象key列表,isTruncated是否已经列举完
字节内部实践
三层架构
接入层: 接入解析并处理接口请求 |--> 元信息层: 存储对象元信息 |--> 存储引擎层: 存储对象内容
挑战
容量型:
代表业务:用户上传源视频,原视频转码后的视频
特点:海量 > EB
吞吐:海量 >> 100GB
高持久度:用户视频不能丢
挑战:
可扩展性:容量/吞吐可以线性扩展
成本:单位存储成本需要足够低
持久度:如何在保证成本的情况下确保高持久度
QPS
代表业务:抽帧用于审核
特点:
QPS:极高, >> 100 kb
挑战:
可扩展性,QPS需可线性扩展
可扩展性解法
Partition
分布式存储=分布式+单机存储
分布式:存储均匀分布,计算均匀分布,压力均匀分布
分布式系统相当于一个蜂群,每个节点都负责一小部分数据存储和计算,达到1 + 1 >= 2的效果
Replication
数据复制多份,即多个副本
副本放置策略
多机架:可抵抗机架级别故障
多机房:可抵抗机房级别故障
多Region:可抵抗Region级别故障\
带来:高持久度(不丢数据),强吞吐能力(多个副本提供服务)
EC
通过冗余编码,可以达到和多副本一样的持久度
特点:低冗余度,成本较单纯多副本低;额外计算,增加了额外的编码计算步骤
温冷转换
将冷数据转移到性能更差但更廉价的存储介质
存储需求量细化
SLA 服务一年只能5分钟不可用,数据 RPO 数据不可用事件不用太关心 RTO 数据出错五分钟恢复
高可用性:拆分降低爆炸半径
将一个集群拆分成多个集群
高可用性,镜像灾备
完全镜像的主备Bucket,双向同步,在故障期间读写流量转移到备Bucket