存储的本质 - 状态 | 青训营笔记

55 阅读3分钟

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

经典案例

通过一个模拟案例,描述了数据是怎么产生,在后端系统里怎么流通,最后怎么写入到存储/数据库系统。 问题:

image.png

存储 & 数据库简介

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

    • 存储系统特点:
      • 作为后端系统软件底座,性能敏感
      • 存储系统软件架构,容易受硬件影响
      • 存储系统代码,即“简单”又“复杂”
    • 存储器层级结构
      • 硬件image.png
    • 单机存储栈
      • 软件image.png
      • 缓存很重要,贯穿整个存储系统
      • 拷贝很昂贵,应该尽量减少
      • 硬件设备五花八门,需要有抽象统一的接入层
    • RAID技术
      • RAID 0 没有容错,条带化存储,提高带宽
      • RAID 1 空间利用率50%, 容错
      • RAID 10 结合两者
  • 数据库系统概览

    • 关系型数据库特点
      • 结构化数据友好
      • 支持事务(ACID)
      • 支持复杂的查询语言
    • 非关系型数据库特点
      • 半结构化数据友好
      • 可能支持事物(ACID)
      • 可能支持复杂查询语言
    • 数据库 vs 经典存储
      • 结构化数据管理:
        • 关系型数据库以表形式管理
        • 经典存储,写入文件自行定义管理结构
      • 事务能力
        • Atomicity 事务内的操作要么全做、要么不做
        • Consistency 事务执行前后,数据状态是一致的
        • Isolation 可以隔离多个并发事务,避免影响
        • Durability 事务一旦提交成功,数据保证持久性
      • 支持复杂查询能力
    • 数据库使用方式
      • image.png

主流产品剖析

  • 单机存储产品

    • 单机文件系统
      • Linux Index Node(inode)、 Directory Entry(dentry)
    • 单机key-value存储
      • 常见使用方式:put(k,v) & get(k);
      • 常见数据结构:LSM-Tree;牺牲读性能,追求写性能
      • RocksDB
  • 分布式存储产品

    • HDFS
      • 特点:
        • 支持海量数据存储
        • 高容错性
        • 弱POSIX语义
        • 使用普通x86服务器,性价比高
    • Ceph
      • 特点
        • 一套系统支持对象接口、块接口、文件接口,但是一切皆对象
        • 数据写入采用主备复制模型
        • 数据分布模型采用CRUSH算法:Hash+权重+随机抽签
  • 单机数据库产品

    • 关系型数据库 —— PG、MySQL
    • 非关系型数据库 —— ES、MongoDB、Redis
    • image.png
    • Elasticsearch使用案例:模糊搜索、计算相似度
  • 分布式数据库产品

    • 问题与挑战:容量、弹性、性价比
    • 解决方案
      • 存储节点池化,动态扩缩容

新技术演进

  • SPDK:Bypass OS kernel
    • image.png
  • 人工智能
  • 新硬件加速
    • image.png

课后思考

  1. 写入存储系统的粒度太大,会不会导致数据原子性问题?例如一次性写100MB,如果系统突然crash,会不会只有一部分数据持久化了,另一部分丢失了?如果要解决原子性问题,一般会设计什么机制?

  2. 在从应用程序到存储介质的链路上,无论读还是写,数据可能要被拷贝好几次,这几次拷贝能不能去掉?如果我们去掉大部分拷贝操作,会有什么副作用,要怎么缓解副作用?

  3. 一个关系型数据库大概率是会被并发访问的,如果要保证并发安全,除了在行数据上加悲观锁还有其他方式吗?

  4. 在数据库领域,把数据按行存和按列存各有好处,你能从性能优先的角度设计出一种混合存储格式吗?