存储系统 | 青训营笔记

31 阅读3分钟

这是我参与「第五届青训营 」笔记创作活动的第11天

一个系统需要有存储,才是有状态的。我们平时在开发时,选用的存储系统都理所当然地选择数据库,但却没有考虑过使用其它形式存储系统的可能性。数据库自然是首选,但为什么要选择数据库,是我们要考虑的问题。

存储系统-系统概览

存储系统,是提供了读写、控制类接口,能够安全有效地把数据持久化的软件,就可以称为存储系统。

系统特点:

  • 性能敏感
  • 容易受硬件影响
  • 代码即“简单”又“复杂”

存储器层级结构:大家学计组的时候都有了解过,大致上就是越慢,越大,越便宜,反之亦然。

  • 缓存很重要,贯穿整个存储体系
  • 拷贝很昂贵,应尽量减少
  • 硬件设备五花八门,需要抽象统一的接入层

RAID技术

单机存储系统如何做到高性能/高性价比/高可靠性? R(edundant) A(rray) of I(nexpensive) D(isks)

RAID 0

  • 多块磁盘简单组合
  • 数据条带化存储,提高磁盘带宽
  • 没有额外容错设计

RAID 1

  • 一块磁盘对应一块额外镜像盘
  • 真实空间利用率仅50%
  • 容错能力强

RAID 0 + 1

  • 结合两者
  • 真实空间利用率仅50%
  • 容错能力强,写入带宽好

数据库和存储系统

数据库:

  • 关系型数据库
  • 非关系型数据库

关系型数据库是存储系统,但是在存储之外,又发展出其他能力(结构化数据友好,支持事务,支持复杂查询语言)

非关系型数据库也是存储系统,但一般不要求严格的结构化(半结构化数据友好,可能支持事务,可能支持复杂查询语言)

数据库支持事务,优于经典存储。

事务以我的了解,主要的功能是保证一致性和可恢复性。详细可见这篇笔记:[[事务管理]]

主流存储产品

本地文件系统

Linux经典哲学:一切皆文件 Linux两大数据结构:Index Node & Directory Entry

key-value存储

常见数据结构:LSM-Tree,某种程度上牺牲读性能,追求写入性能。

分布式存储

在单机存储基础上实现了分布式协议,涉及大量网络交互

因此网络和分布式应该是后端从业者比较重要的两门课了。

HDFS:堪称大数据时代的基石

Ceph:

  • 一套系统支持对象接口、块接口、文件接口,但是一切皆对象
  • 数据写入采用主被复制
  • 数据分布模型采用CRUSH算法(HASH+权重+随机抽签)

单机数据库

事务可以单机执行,也可以通过网络实现分布式事务。

存储与数据库的新技术

  • 软件架构变更
    • Bypass OS kernel
  • AI增强
    • 智能存储格式转换
  • 新硬件革命
    • 存储介质变更
    • 计算单元变更
    • 网络硬件变更

SPDK

Storage Performance Development Kit

  • Kernel Space -> User Space
  • 中断->轮询
  • 无锁数据结构

课后

可以实现一个(分布式)key-value存储系统。(这不比大项目难?)