学习Tos对象存储| 青训营笔记

185 阅读4分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第4篇笔记

为什么需要对象存储

现代互联网应用存在普遍的视频/图片等静态内容的海量存储需求

对象存储以其极佳海量存储能力,低廉成本,易用性,成为这类场景的不二之选

存储对比

存储备选海量支持适合数据类型是否入选
单机存储No单机文件/KVNo
单机数据库No少量(半)结构化数据No
分布式数据库Yes大量(半)结构化数据No
分布式存储Yes大数据计算中间结果/视频/图片等Yes

分布式存储选型

海量易用便宜
分布式文件系统HDFS支持PB->EB海量存储
文件数量受Name Node限制
伪Posix文件接口,开发略复杂
非云原生,搭建维护麻烦
视频/图片相关生态接入略复杂
使用普通x86服务器,成本低
对象存储Tos支持EB海量存储
对象数量无限制
Restful HTTP接口,开发极简单
云原生,按需申请使用
视频/图片相关生态丰富
使用普通x86服务器
具备冷热数据分级存储能力,成本更低

对象存储怎么用

申请Bucket

Restful接口

对象存储对外提供的一般都是Restful风格的接口

PUT:

  • 参数:Bucket, key,对象内容
  • 返回:成功/失败

GET:

  • 参数:Bucket, Key
  • 返回:对象内容

HEAD: Lite版GET

  • 参数:Bucket,Key
  • 返回:对象元信息,如大小/Content-Type等

DELETE:

  • 参数:Bucket, Key
  • 返回:成功/失败

MultiUpload接口

解决大文件传输问题

image.png lnitUpload:

  • 参数:Bucket , Key
  • 返回:uploadld

UploadPart:

  • 参数:uploadld, Partld , Part内容
  • 返回:成功/失败

CompleteUpload:

  • 参数:uploadld, Partld Array
  • 返回:成功/失败

Listprefix接口

查看桶里面有哪些对象

image.png ListPrefix参数:

  • prefix: key前缀
  • delimiter: 分隔符,默认为/
  • max-keys: 本次分页数量
  • start-after: 分页起始对象key
  • ListPrefix返回:
  • common-prefix: 共同前缀
  • objects: 对象key列表
  • isTruncated: 是否已经列举完

Tos字节内部实践

开发一个对象存储

image.png 接入层:接入解析并处理接口请求

元信息层:存储对象元信息

存储引擎层:存储对象内容

经典业务场景

容量型QPS型
代表业务片源:用户上传源视频
转码:源文件转码后的视频
抽帧:源视频审核用抽帧
特点容量:海量,>EB
吞吐:海量,>>100GB/s
高持久度:用户视频不能丢
QPS:极高,>>100K/s
挑战可扩展性:容量/吞吐需可线性扩展
成本:单位存储成本需要足够低
持久度:如何在保证成本的情况下,确保高持久度
可扩展性:QPS需可线性扩展

可扩展性解法之Partition

分布式存储=分布式+单机存储

分布式:

  • 存储均匀分布
  • 计算均匀分布
  • 压力均匀分布

分布式系统相当于一个蜂群,每个节点都负责一小部分数据存储和计算,达到1+1 >=2的效果

image.png Partition(分而治之)

  • 分而治之:不同数据映射至不同Partition分区
  • Partition Logic: Hash/Range
  • 可扩展性如何达成
  • 数据量增加:扩容机器新建Partition
  • Parition Logic:新增数据写入映射导向新Partition

持久度解法之Replication

持久度的敌人:不可靠的一切

  • 不可靠的硬件
  • 不可靠的软件
  • 自然灾害
  • 甚至是太阳黑子!

数据单节点存储,一定有较大概率丢失无法找回

image.png 复制(Replication)

  • 数据复制多份,即多个副本

  • 副本放置策略:

    • 多机架:可抵抗机架级别故障
    • 多机房:可抵抗机房级别故障
    • 多Region:可抵抗Region级别故障

带来

  • 高持久度:不丢数据
  • 强吞吐能力:多个副本可以提供服务

成本解法之EC

Replication虽然可以解决持久度问题,但是单纯多副本拷贝成本也非常高

EC (Erasure Coding)

  • 冗余编码:可达到和多副本一样的持久度

特点

  • 低冗余度:成本较单纯多副本低
  • 额外计算:增加了额外的编码计算步骤

成本解法之温冷转换

数据都是有温度的,将冷数据转移到性能更差但更廉价的存储介质就可以省下来成本

架构细化

API:接入层

  • Bucket Meta: Bucket元信息服务
  • Object Meta:对象元信息服务
  • Distributed Kv: Range Partition的分布式KV、用于持久化对象元数据
  • Storage Engine:对象内容存取服务
  • Distributed storage Pool:分布式存储池.三副本 or Ec存储
  • GC:垃圾回收后合服务
  • Lifecycle:温冷转换后合服务

image.png

存储需求量细化

SLA

RPO

RTO

高可用解法之拆分降低爆炸半径

一个集群拆分成多个集群,有效降低爆炸半径

image.png

高可用之镜像灾备

无论何种情况,都保证服务可用

完全镜像的主备Bucket,出现问题随时切换,真正100%的可用性

image.png