抖音背后的存储 | 青训营

91 阅读3分钟

抖音背后的存储

image-20230810130521822.png

image-20230810130534104.png

image-20230810130609314.png

image-20230810130758733.png

存储要求

image-20230810130838442.png 简而言之 存储视频需要很大的存储空间,因此想要满足上面三个需求

存储对比

image-20230810131711878.png 分布式数据库 和 分布式存储

作为存储,文件和数据库最大的差异一是访问方式(接口),而是应用场景;

文件是与传统的块、对象并列,提供最基本的存储服务,块主要是高IOPS,对象主要是高带宽,文件都又需求;文件和块比较传统,不像对象新兴产生,非常适合互联网行业的存储;

而数据库主要是读多写少,重在查询效率,而不是存储空间;

另外,从分布式层面讲,文件和数据库都可以实现分布式,包括存储(持久化)的分布式逻辑和计算(接入层)的分布式逻辑,一个解决数据共享存放的问题,一个解决访问负载均衡的问题。

分布式对象存储

image-20230810131834696.png

优点

HDFS 是 Hadoop分布式文件系统

image-20230810132209532.png 对象存储

image-20230810132350550.png

适用场景

image-20230810132529673.png

使用方法

image-20230810132747985.png restful风格

image-20230810132927834.png 一个http就可以做增删改查 比较简单

image-20230810133223142.png multiupload

image-20230810133338166.png 将视频先分成几个part 上传的时候分part上传,上传时每个part都会有一个uploadid 以便上传完成之后进行拼接

listprefix 分页列举

image-20230810133538430.png

TOS字节内部实践

初始三层架构

image-20230810135807974.png

架构细化

image-20230810140416900.png 转码:为了适配不同的客户端 转成不同的码率

QPS:Queries Per Second是衡量信息检索系统(例如搜索引擎或数据库)在一秒钟内接收到的搜索流量的一种常见度量。

可扩展性--Partition

分而治之,将不同流量放到不同的服务器

image-20230810140800306.png

image-20230810140843052.png Partition Logic

  • hash
  • range:比如查看字符串在A-G 就放在PartitionA 以此类推(可以保留原有的顺序)
持久度-Replication

image-20230810141425169.png

image-20230810141457851.png 解决:备份(多机架 多机房 多region)

  • 机架:共享电源或者是网线(可类比与图书馆的书架)
  • 机房:(类比图书馆)
  • region:华南、华北等地区
成本问题-EC

image-20230810141922689.png 将原始数据分块 如果后面其中一块坏了,可以通过其他快计算得出坏掉的这块

成本问题-温冷转换

image-20230810142452988.png 如果某些数据很长一段时间没有访问过 可以把它搬到价格较低的设备上 如果更长一段时间没访问 直接归档将其当做冷数据处理

架构细化

image-20230810142737433.png

需求细化

高可用性

image-20230810143349086.png SLA (Service Level Agreement)服务等级协议,指的是系统服务提供者(provider)对客户(customer)的一个服务承诺

Recovery Point Objective (RPO),指的是最多可能丢失的数据的时长。

Recovery Time Objective (RTO) ,指的是从灾难发生到整个系统恢复正常所需要的最大时长。

简单区分的话,RPO是灾难发生之前的时间, RTO是灾难发生之后的时间。

高可用-降低爆炸半径

image-20230810143457358.png

高可用-粤核酸的启发

image-20230810143549074.png

高可用-镜像灾备

image-20230810143655752.png 主bucket如果挂了 可以先用备用的bucket,等主恢复之后进行同步