大规模分布式存储系统-基础篇


大规模分布式存储系统-基础篇

主要是记录阅读《大规模分布式存储系统:原理解析与架构实战》基础篇中的一些知识和理解。

  • 书评

大规模分布式存储系统

基础篇主要是从单机存储系统分布式存储系统的演化过程以及各自的特点进行分析

单机存储系统

单机存储系统最早应该是来源自关系型数据库的理论,根据数据库操作在发展出事务的概念

硬件基础

介绍CPU、IO总线、网络拓扑等知识,其中南桥/北桥的作用比较有意思

  • 南桥负责与低速设备的交互
  • 北桥负责与高速设备的交互

南北桥结构

存储引擎

存储引擎是根据文件系统对存储系统提供底层的CRUD能力的引擎,根据存储引擎底层使用的算法可以大致划分为’hash存储引擎’、‘B tree存储引擎’、'LSM存储引擎’这三类

  • hash存储引擎
    hash存储引擎底层采用hash算法确定key的位置,value则代表文件的物理位置。使用这种算法的可以参考RocketMQ中的indexFile和commitLog文件之间的关系.
    hash存储引擎不支持顺序读写

  • B+ tree存储引擎
    B+ tree存储引擎具体的实现可以参考MySQL中的innodb存储引擎的设计模型,会设计出一个缓存区来对热点数据的缓存。对于缓存数据的替换策略有LRULIRS,其中LIRS的设计比较有趣,LIRS是为了解决LRU策略无法处理因全表扫描导致污染缓冲区的场景,底层采用多级缓冲的策略,设置晋升阈值来避免一级缓存受到污染

  • LSM存储引擎
    LSM存储引擎的全称是’Log-structured merge-tree’. 将对数据的修改增量保持在内存中,达到指定的大小限制后将这些修改操作批量顺序写入磁盘中。LSM适合于写多读少的场景,通过牺牲读取性能来换写入的性能

小结

关于更多的存储引擎可以参考
What is a LSM Tree?
存储引擎对比
LSM Tree 论文

数据模型

数据模型指的是存储引擎用什么格式保存数据常用的数据模型有’文件’、‘关系’、‘键值对’

事务

  • 事务的特性:ACID
  • 事务的种类:读事务、写事务、混合事务
  • 事务的实现:锁、COW、MVCC

故障恢复

数据库需要实现完善的故障恢复机制,一般是采用操作日志来实现的。
操作日志分为

  • 回滚日志(UNDO log) 用来记录事务修改前的记录
  • 重做日志(REDO log) 用来记录事务修改后的状态
  • 操作日志(binlog) 用来记录对物理磁盘的操作

数据压缩

数据压缩是对大量数据进行压缩以节省空间。压缩算法的核心就是查找重复数据,'列式存储技术’是把相同列的数据组织在一起

压缩算法

  • Huffman编码
  • LZ系列压缩算法

列式存储

列式存储是针对于传统的行式存储的对应,针对的是OLAP的场景。
按照列来存储数据就会导致列上重复的值较多,因此就需要使用压缩算法来进行压缩

分布式存储系统特性

分布式存储系统底层主要依赖两个协议Paxos选举协议两阶段提交协议

异常

  • 宕机
  • 网络异常
    消息丢失、消息乱序、网络数据包异常

设计分布式系统的一个原则是:网络永远是不可靠的

  • 磁盘故障

状态

分布式系统中定义的系统状态有且只有成功失败未知

一致性

在分布式环境中由于异常是无法避免的,因此需要冗余多份数据来保证可用性。冗余的多份副本就会存在数据一致性的问题,如何保证副本之间的一致性是关键

数据分布

分布式系统与单机存储系统系统最大的区别在于数据分布上,分布式系统可以将数据按照Hash分布顺序分布两种方式进行划分。

Hash分布

Hash分布原理比较简单,需要注意的是扩容场景下的处理,有两种处理方法分别是

  • 元数据区
    引入元数据区,通过元数据区来管理hash的key与value之间的关系
  • 一致性hash算法
    使用一致性hash算法,保证节点的平均分布

一致性hash算法如何在扩容时保证数据的平均分布?

Hash算法不支持顺序查找

顺序分布

顺序分布指的是数据按照指定的维度顺序的写入数据,多用于分布式表格系统中

复制

分布式系统中数据的复制机制决定了这个分布式系统对可用性和一致性的取舍。数据的复制可以分为强同步复制异步复制两种方向。
在工程实践中又可以根据这两个方向做不同的取舍,以Oracle的DataGuard复制组件为例,提供了三种不同的模式

  • 最大保护模式
    最大保护模式也就是强同步复制模式
  • 最大性能模式
    最大性能模式也就是异步复制模式
  • 最大可用模式
    最大可用模式是默认情况下使用强同步复制模式,网络异常时使用异步复制模式

故障检测

故障检测常用的方法有心跳、φ-accrual(累计历史故障检测器)、 Gossip故障检测.这几种方式

分布式系统之故障检测
serf官网
使用serf实现分布式故障检测

故障恢复

故障恢复是由于分布式环境下机器或网络的故障,需要通过故障恢复的机制将服务从不可用状态恢复成可用状态。分布式系统的存储方案分为两种结构:单层结构双层结构

  • 单层结构
    单层结构指的是服务和存储都作为一个节点,然后按照节点进行分片
  • 多层结构
    多层结构指的是存储系统按照服务层和存储层进行分层,在服务层只提供一个一份数据

分布式协议

分布式协议根据不同的作用域可以划分为租约\复制协议\一致性协议等.比较重要的是两阶段提交协议Paxos选举协议

  • 两阶段提交协议
    两阶段提交协议指的是将分布式事务的操作划分为两个阶段,分别是请求阶段提交阶段
    两阶段提交协议中的包括的节点有两类,分别是协调者参与者

    两阶段提交过程.jpg

  • Paxos选举协议
    Paxos选举协议主要是用于解决多个节点之间的一致性问题。可以参考之前的一篇文章分布式中的一致性paxos算法以及其实现zab协议
    采用’Quorum机制’机制来保证节点作为一个整体对外的一致性,简单的来说就是通过序列号和大多数确认机制来保证集群的一致性

  • Paxos与2PC混合场景
    2PC与Paoxs的对比.jpg

总结

基础篇主要是介绍单机存储系统的硬件基础存储引擎、分布式存储系统数据模型分布式特性故障检测/恢复分布式协议


  TOC