TOS 对象存储实战| 青训营

160 阅读7分钟

本文是青训营课程《TOS 对象存储实战》的基础知识笔记伴读总结。

分布式存储选型对比: 对象存储的优势

  • Structured data: 结构化数据
  • Unstructured data:非结构化数据
  • Relational Database: 关系型数据库
  • NoSql Database:非关系型数据库
  • Distributed stroage: 分布式存储
  • Cloud Native Storage: 云原生存储
  • Distributed File System: 分布式文件系统
  • HDFS:当前最主流的开源分布式文件系统
  • Object Storage: 对象存储
  • Immutable data: 不可更改数据
  • Mutable data: 可更改数据
  • HTTP: 网络通信协议
  • CDN: Content Delivery Network

对象存储的用法

  • Data Model:存储系统的数据组织模型
  • Posix File System Interface:Posix标准文件系统接口
  • Directory/File: 目录/文件
  • Resutful: 一种接口风格,通常基于HTTP实现
  • Get/Head/Put/Delete: Http Method
  • ListPrefix: 对象存储的Listprefix接口

对象存储面临的工程挑战和解法

  • QPS:query per second
  • IOPS:IO per second
  • SLA:Service-Level-Agreement,衡量可用性的一个指标
  • Bandwidth Intensive Application: 带宽型应用
  • CPU Intensive Application: 带宽型应用
  • Scalability: 可扩展性
  • Availability:可用性
  • Durability: 持久度
  • Replication:复制
  • Partition:分治
  • 爆炸半径:故障影响业务的范围
  • Hot Data: 热数据
  • Warm Data: 温数据
  • Cold Data: 冷数据
  • EC: Erasure Coding
  • Garbage Collection:垃圾回收

  • 介绍一款短视频应用的整体架构

  • 揭示短视频应用背后的视频/图片等静态内容的海量存储需求

    • 计算单天/单月/单年的存储容量
  • 分析视频/图片等静态内容存储需求的特点

    • Immutable Data: 视频/图片是静态不可更改的数据

分布式存储选型对比: 对象存储的优势

回顾存储体系

之前课程介绍过如下存储体系分类:

  • 单机存储
  • 分布式存储
  • 单机/分布式数据库

这里会重温下各类存储适用的场景和范围,并重点介绍分布式存储的分类:

  • 分布式文件系统:当前业界开源代表是HDFS
  • 对象存储: 本次课程介绍的TOS就是其中代表

HDFS vs 对象存储

  • 是否Cloud Native Storage:

    • 云原生存储开箱即用,极大解除了运维运营负担,生态体系依托云构建,丰富健全
    • 对象存储是当前各大云厂商王牌存储产品
  • 接入难易程度对比:

    • Data Model差异:

      • HDFS:伪Posix File System Interface, Directory/File的数据组织形式
      • 对象存储:扁平的逻辑命名空间, Bucket/Key的数据组织形式
      • Bucket/Key数据组织形式优势:容易理解,使用心智负担小,贴合业务需求
    • 使用接口差异:

      • HDFS:Mkdirs/Create/Append/Delete/Get等文件接口
      • 对象存储: GET/PUT/HEAD/DELETE等Restful HTTP接口
      • HTTP接口的优势:开发简单,分享方便,可无缝接入CDN
  • 其他对比:

    • 可扩展性:对象存储可扩展性更强,支持无限容量
    • 成本:对象存储成本更低

对象存储的用法

基本接口

  • Restful风格简介:简单介绍Restful风格的形式和优点
  • GET:获取对象内容
  • PUT:下载对象内容
  • DELETE:删除对象内容
  • HEAD:获取对象元信息
  • MultiPartUpload接口:针对大对象弱网环境上传的优化

这里会对基本的接口做一个简短的演示,让大家直观的了解对象存储的基本用法

Listprefix接口

  • 接口功能:将扁平的逻辑命名空间,转化为人类易于理解的结构化逻辑命名空间
  • CommonPrefix概念:将扁平的逻辑空间,通过分隔符,分割成类似目录的层次化命名空间
  • 分页实现:通过页首和每页对象数量参数,实现分页

这里也会演示ListPrefix接口的基本用法

对象存储面临的工程挑战和解法

工程挑战

首先会梳理经典的一些业务场景:

  • 海量容量场景: 业务持续产生大量数据,数据规模>>PB级别,存储容量和成本压力极大
  • 海量QPS场景: 业务场景有高QPS读写请求,量级>>100K/s,并且时延要求极高,对底层存储IOPS压力极大
  • 高可用性场景:业务对于SLA要求非常高,要求避免全局性不可用事件发生,但对于一致性要求比较低

其中带来的工程挑战有:

  • 可扩展性:架构在存储容量/带宽吞吐/QPS等关键指标上,线性可扩展,能够承担业务在这些指标上的持续增长需求
  • 持久度:数据存储成功后,需要能够抵抗单机/单机架/单机房等各种类型的故障而不丢失
  • 可用性:系统不可用的时间在整体运行时间的占比需要尽可能小,系统不可用后需要具备快速恢复能力
  • 性价比:在海量存储容量的情况下,需要尽力降低单位存储成本,以降低业务的成本支出

解法

Partition 分治提升可扩展性

思路:

  • 将数据通过一定的Partition方法,散步到分布式系统中的不同的机器节点来计算/存储

Partition一般做法:

  • Hash Partition:通过hash函数来做Partition的选取
  • Range Partition: 通过range方式切分逻辑地址空间

带来的好处:

  • 可扩展性好
  • 爆炸半径低

Replication 多副本提升持久度

思路:

  • 将数据拷贝多份来存储

Replication一般做法:

  • 多副本:将数据拷贝成多个镜像的副本存储
  • EC:使用Erasure Coding方法来构建冗余副本

带来的好处:

  • 持久度高
  • 吞吐能力也有提升

单元化最小化爆炸半径

思路:

  • 将系统切分成多个垂直独立的单元,单元之间互相无影响

单元化一般做法:

  • 去除系统单点依赖:系统中没有强依赖的单点
  • 构建流量调度能力:流量可在单元之间灵活调度

带来的好处:

  • 可用性高
  • 运维更友好

镜像灾备应对极端情况

思路:

  • 构建镜像的主备集群应对极端情况

单元化一般做法:

  • 同构灾备:使用同构系统来做数据的镜像备份
  • 异构灾备:使用异构系统来做数据的镜像备份

带来的好处:

  • 极高的可用性
  • 极高的可靠性

开源节流提升性价比

思路:

  • 开源:

    • 冷热分离,使用更低成本存储介质
  • 节流:

    • 通过更高比例EC降低单位存储逻辑冗余
    • 提升垃圾回收效率,提高磁盘空间利用率

带来的好处:

  • 更高的性价比

TOS 当前架构和展望

根据上面工程挑战和解法分析,简单总结并介绍TOS当前的架构,并展望后续TOS的发展方向。

课后思考题

  1. 对象存储适用于网页前端 js 文件存储吗?为什么?
  1. 对象存储使用 CDN 作为缓存,能够缓存哪些基本接口的结果呢?缓存刷新会使用到 HTTP 协议的何种机制呢?
  1. 对象存储 MultiPartUpload 接口,UploadID 如何保证全局唯一呢?
  1. 一个基于对象存储构建的网盘应用,应该如何用 Listprefix 接口实现个人文件的展示呢?
  1. 假设我们采取 Hash Partition 来完成对象存储元数据的存储,能够实现ListPrefix 接口么?如何实现呢?
  1. Replication 的一个副本损坏了,对系统会带来什么影响?应该如何修复呢?
  1. Erasure Coding 有哪些经典的算法?多机房之间的 EC 有何种解决方案呢?
  1. 镜像灾备如何保证主备集群之间的一致性呢?