TOS对象存储实战 | 青训营

168 阅读2分钟

引入对象存储

streaming对象存储要求

  • 易用
  • 海量
  • 便宜

如何兼容三大要求呢?

存储系统分类

(回顾存储系统)

  • 单机存储(不支持海量存储)
    • 文件系统
    • KV存储
  • 单机数据库(不支持海量存储)
    • 关系型数据库
    • 非关系型数据库
  • 分布式数据库(支持大量(半)结构化存储)
    • 关系型数据库
    • 非关系型数据库
  • 分布式存储(支持大量图片/视频存储)
    • 分布式文件系统(HDFS)
    • 对象存储(TOS)

分布式文件系统HDFS VS. 对象存储

HDFS:HDFS文件数量受Name Node影响,开发略麻烦,非云原生,搭建维护较麻烦,视频图片相关生态介入略复杂,使用普通X86服务器,成本低

TOS:对象数量无限制,Restful HTTP接口,开发极简单,视频图片相关生态丰富,使用X86服务器,具备冷热数据分级存储能力,成本更低

TOS接口

Bucket存所有obj

每个obj包括key, Meta Data, Data:

  • Key:对象的名字,可类比Map的Key
  • Data:对象的内容,例如视频/图片内容
  • MetaData:对象的一些元信息,如对象大小,对象Content-Type, 也可以存储自定义元信息

适用场景

✅Immutable object:视频,图片,文本,安装包等等

❎Mutable: 关系型数据,KV,在线编辑文件,更新频繁数据

对象存储怎么用

  • 申请Bucket
  • 业务逻辑开发(增删改查):
    • 视频上传(PUT)
    • 视频下载(GET)
    • 视频删除(DELETE)
    • 视频查看(HEAD)
  • 上线测试

MultiUpload接口

上传N个GB的大视频网络不好容易上传失败,可以使用MultiUpload接口 概念:把文件分成不同小部分(part),分别上传

  • InitUpload:

    • 参数:Bucket, Key
    • 返回:UploadId
  • UploadPart:

    • 参数:UploadId,PartId, Part内容
    • 返回:成功/失败
  • CompleteUpload:

    • 参数:UploadId, PartId Array
    • 返回:成功/失败

Listprefix接口

想看桶里有哪些对象,可以使用分页列举接口:ListPrefix

  • ListPrefix参数:

    • prefix: key前缀

    • delimiter: 分隔符,默认为/max-kevs:本次分页数量

    • start-after:分页起始对象Key

  • ListPrefix返回:

    • common-prefix: 共同前缀

    • objects:对象key列表

    • isTruncated:是否已经列举完

延长数据持久度:Replication

数据复制多份,存在多个副本

高持久度:不丢数据

强吞吐能力:多个副本可以提供服务

未来展望

  • 容量治理
  • 成本优化
  • 大数据生态
  • 稳定性提升