《大规模分布式储存系统:原理解析与架构实战》阅读笔记

一、概述


1、分布式存储的概念

  • 定义:大量普通PC通过Internet互联,对外作为一个整体提供存储服务
  • 特性:
    • 可扩展性
    • 低成本
    • 高性能
    • 易用
  • 挑战:
    • 数据状态持久化
    • 自动迁移
    • 自动容错
    • 并发读写的一致性
  • 主要技术来源:分布式系统和数据库
    • 数据分布
    • 一致性
    • 容错
    • 负载均衡
    • 事务与并发控制
    • 易用性
    • 压缩/解压缩

2、分布式存储分类

数据分类

  • 非结构化数据:二进制数据如办公文档、图片、音频、视频
  • 结构化数据:二维表(数据库存储的内容)
  • 半结构化数据:(结构化文档)xml文档、JSON文档等

分布式存储系统的分类

  • 分布式文件系统
    • 存储非结构化数据称之为Blob(二进制大对象)
    • Facebook Haystack、taobao file system、GFS、EBS
  • 分布式键值系统
    • 存储半结构化数据
    • Amazon Dynamo、Taobao Tair
  • 分布式表格系统
    • 存储关系复杂的半结构化数据,不仅支持通过key查询、也支持通过value过滤
    • Google bigtable
  • 分布式数据库
    • 存储结构化数据提供SQL支持
    • MySql分片集群、Google Spanner、OceanBase、TiDB

二、单机存储系统


1、硬件基础

(1)CPU架构

  • SMP(对称多处理器结构)(典型的单机PC架构)
    • 运算单元独占L1Cache,共享L2Cache、L3Cache,共享前端总线(内存)
    • 扩展能力有限
  • NUMA(非一致存储访问)
    • 由多个节点组成,每个节点为一个SMP
    • 多个节点通过互联通信模块连接

(2)IO总线

以Intel为例

  • 北桥接口(高速设备)
    • 内存、高速SSD
  • 南桥接口(低速设备)
    • 磁盘、网卡
  • DMI:南北桥相连 1GB/s

(3)网络拓扑

思科三层结构

  • 树形结构
  • 分为:核心层、汇聚层、接入层

相对来说网络设备较少

扁平化结构性能更好,设备要求高

同一数据中心网路延时约0.5ms 跨数据中心网络延迟约50ms

(4)性能参数

  • L1 Cache 0.5ns
  • 分支预测失败 5ns
  • L2 Cache 7ns
  • Mutex 加锁、解锁 100ns
  • 内存访问 100ns
  • 从内存顺序读1MB数据 0.25ms
  • SSD访问延迟 0.1~0.2ms
  • SATA磁盘寻道 10ms
  • 从SATA磁盘读1M数据 20ms
  • 机房网络来回 0.5ms
  • 千兆网络发送1M数据 10ms
  • 异地机房 30~100ms

(5)存储层次架构

数据中心结构:

  • 数据中心数据中心之间通过光纤相连
  • 数据中心由机房组成
  • 机房与机房之间通过核心层设备相连
  • 机房由机架组成
  • 机架与机架之间通过汇聚层设备相连
  • 机架由服务器组成
  • 服务器与服务器通过接入层交换机相连

不同层次间设备访问带宽和延迟

  • 单机设备内部访问瓶颈在于设备本身特性
  • 跨设备内通信的带宽瓶颈在于网络

2、单机存储引擎

(1)哈希存储引擎

Bitcask为例

  • 内存中存在一个Hash表,key为数据主键,value为数据存放在磁盘中的位置(哪个文件、文件偏移量)、长度、时间戳
  • 磁盘中存放的是记录的顺序文件、每个记录包含crc校验值、时间戳、主键长度、值长度、主键、值
  • 数据修改或删除后仅仅将磁盘中旧数据做个标记,再创建一个新的数据;定期扫描文件,进行碎片整理
  • 快速恢复:对每个文件建立一个hash索引文件和内存中的结构一致用于快速启动

(2)B树存储引擎

常规数据库的存储结构(Innodb为例)

  • 磁盘
    • 按照页面组织数据(16k),每个页面对应B+树的一个节点
    • 叶子节点存放每行完整数据
    • 一个提交日志文件
  • 内存
    • 保存着B+树的根节点
    • 一个缓存、存放着B+树的节点
      • 淘汰算法:LRU、LIRS

操作

  • 查:从根节点搜索B+树,先查找缓存再查找磁盘
  • 增删改:记录到提交日志文件,从根节点搜索B+树,修改相关缓存,当修改数目达到一定数目(或者某页面被淘汰),再写回磁盘

(3)LSM树存储引擎

数据修改增量的保存到内存中(不修改只新增),达到指定限制后批量写入

详见p15~16

3、数据模型

  • 文件类型(目录模型、树状结构)
  • 关系模型(二维表、数据库模型)
  • 键值模型(kv)

SQL 与 NOSQL

NoSQL:弱化数据库设计范式、弱化数据库一致性、追求高并发和海量数据 SQL存在的问题

  • 事务:分布式系统中的实现性能第
  • 联表:为了减少联表,常常需要一些反范式化的设计
  • 性能:关系型数据库B树的实现性能较弱

NoSQL存在的问题

  • 缺乏统一标准
  • 实现众多,难以运维

4、事务与并发控制

(1)事务

ACID

(2)并发控制

  • 数据库锁
  • 写时复制
  • 多版本并发控制(MVCC)Innodb为例
    • 每一行两个隐藏列:被修改事务ID、被删除的事务ID
    • 事务执行之前分配一个事务ID
    • SELECT时,返回的行满足一下条件
      • 行的修改事务ID小于等于当前事务ID
      • 行的删除事务ID要么没定义,要么大于事务的版本号
    • INSERT
      • 新插入的行的修改事务ID设为当前事务ID
    • DELETE
      • 行的删除事务ID设置为当前事务ID
    • UPDATE
      • 将原来的行复制一份,并将修改事务ID设置为当前的事务ID

5、故障恢复

6、数据压缩