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

第1章 概述
  • 分布式存储概念
    1. 分布式存储的几个特性
    2. 可扩展
    3. 低成本
    4. 高性能
    5. 易用
  • 分布式系统以及数据库技术
    1. 数据分布
    2. 一致性
    3. 容错
    4. 负载 均衡
    5. 事务与并发控制
    6. 易用性
    7. 压缩/解压缩
  • 分布式存储分类
    1. 非结构化数据
    2. 结构化数据
    3. 半结构化数据
  • 不同的分布式存储系统适合处理不同类型的数据,共分为四类分布式存储系统:分布式文件系统,分布式键值系统,分布式表格系统,分布式数据库。
第一篇 基础篇
第2章 单机存储系统
  • 存储系统的性能主要包括两个维度:吞吐量和访问延时,磁盘和SSD的访问延时差别很大,但带宽差别不大,因此,磁盘适合大块顺序访问的存储系统,SSD适合随机访问较多或者对延时比较敏感的关键系统,二者也常常组合在一起进行混合存储,热数据(访问频繁)存储到SSD中,冷数据(访问不频繁)存储到磁盘中。
  • 单机存储引擎
    1. 哈希存储引擎
    2. B树存储引擎
    3. LSM树存储引擎
  • 数据模型:文件、关系、键值模型
  • 事务与并发控制
    1. 为了提高读事务性能,可以采用写时复制(Copy-On-Write COW)或者多版本并发控制(Multi-Version Concurrency Control MVCC)技术避免写事务阻塞读事务。
    2. ACID
    3. SQL的隔离级别 Read Uncommitted, Read Committed, Repeatable Read, Serializable, Lost Update, Dirty Reads,Non-Repeatable Reads, Second Lost Updates problem, Phantom Reads
    4. 并发控制, 数据库锁
      • 解决死锁的思路主要有两种:1 每个事务设置一个超时时间,超时后自动回滚。2 死锁检测,检测到死锁后可以通过回滚其中某些事务来消除循环依赖。
  • 故障恢复
    1. 操作日志
    2. 重做日志
    3. 优化手段
      • 成组提交
      • 检查点
  • 数据压缩
    1. 压缩算法
      • Huffman算法,找到一种前缀编码方式使得编码长度最短
      • LZ系列压缩算法,是一种动态创建字典的压缩算法,压缩工程中动态创建字典并保存在压缩信息里面。
      • BMDiff与Zippy
      • 列式存储
第3章 分布式系统
  • 分布式系统中有两个重要的协议,包括Paxos选举协议和两个阶段提交协议。Paxos协议用于多个节点之间达成一致, 往往用于实现总控节点选举。两个阶段提交协议用于保证跨多个节点操作的原子性,这些操作要么全部成功,要么全部失败。
  • 基本概念
    1. 异常;服务器宕机;网络异常;磁盘故障(磁盘损坏或磁盘数据错误)
    2. 超时,RPC执行结果的三种状态:成功,失败,超时。分布式系统中接口设计为“幂等”,超时时可以不断重试。
    3. 一致性,数据冗余备份时将出现这个问题。从两个角度理解一致性,第一个角度用户,或者称为客户端,即客户端读写 操作是否符合某种特性;第二角度时存储系统,即存储系统的多个副本之间是否一致,更新的顺序是否相同等。 一般要求存储系统能够读写一致性,会话一致性,单调读,单调写等特性。
    4. 衡量指标:性能,每秒处理读操作QPS Query Per Second,每秒写操作 TPS Transaction Per Second。 设计系统时高吞吐量和低延迟需要做个权衡。可用性。一致性。可扩展性。
  • 性能分析。
  • 数据分布。两种,哈希分布如一致性哈希代表系统Amazon的Dynamo系统;另一个顺序分布,即每张表哥上的数据 按照主键整体有序,代表系统有Google的Bigtable系统。
    1. 哈希分布,只支持随机读取操作不支持顺序扫描。
    2. 顺序分布。
    3. 负载均衡。
  • 复制。
  • 容错。
    1. 故障检测
    2. 故障恢复
  • 可扩展性
    1. 总控节点
    2. 数据库扩容
    3. 异构系统
  • 分布式协议
    1. 两个阶段和Paxos协议。两个阶段保证跨多个节点操作的院子性,也就是说跨多个节点的操作要么在所有节点上全部执行成功,要么全部失败。Paxos协议用于确保多个节点对某个投票达成一致。
      • Two-phase Commit 2PC;请求阶段,提交阶段;可能面临的故障,事务参与者发生故障,给每个事务设置一个超时时间,如果某个事务参与者一直不响应,到达超时时间后整个事务失败。协调者发生故障,协调者需要将事务相关信息记录到操作日志并同步到备用协调者,假如协调者发生故障,备用协调者可以接替它完成后续工作,如果没有备用协调者,协调者又发生了永久性故障,事务参与者将无法完成事务而一直等待下去。总而言之,2PC提交协议是阻塞协议,执行过程中需要锁住其他更新,且不能容错,大多数分布式存储系统都敬而远之,放弃对分布式事务的支持。
    2. Paxos协议。准备-》批准-》确认。正确性,可终止性。
    3. Paxos与2PC;Paxos协议一种用法是用它来实现全局的锁服务或者命名的配置服务。另一种用法是用它来将用户数据复制到多个数据中心。2PC协议最大的缺陷在于无法处理协调宕机问题。两者的结合起来,通过2PC保证多个数据分片上操作的原子性,通过Paxos协议实现同一个数据分片的多个副本之间的一致性,另外Paxos解决了2PC的协调者宕机问题,当2PC协调者故障时,通过Paxos协议选举出新的协调者继续提供服务。
      • 跨机房部署
    4. 集群整体切换
    5. 单个集群跨机房
    6. Paxos选主副本。
第二篇 范型篇
第4章 分布式文件系统
  • 分布式文件系统的主要功能有两个:一个是存储文档、图像、视频之类的Blob类型数据;另一个作为分布式表格系统的持久化层。
  • GFS系统节点分为三种角色:GFS Master(主控服务器)、GFS ChunkServer(CS, 数据块服务器)以及GFS客户端。
  • GFS关键问题;
    1. 租约机制
    2. 一致性模型
    3. 追加流程
    4. 容错机制
  • Master设计
    1. Master内存占用
    2. 负载均衡
    3. 垃圾回收
    4. 快照
  • Taobao File System 读多写基本一次
    1. TFS设计思路:多个逻辑图片文件共享一个物理文件。
    2. NameServer:Block管理,包括创建、删除、复制、重新均衡;DataServer管理,包括心跳、DataServer加入及退出;以及管理Block与所在DataServer之间的映射关系。与GFS Master相比,TFS NameServer最大的不同就是不需要保存文件目录树信息,也不需要维护文件与Block之间的映射关系。
    3. 追加流程
    4. 图片去重是一个键值存储系统。Tair。
  • Facebook Haystack
  • 内容分发网络
    1. 分级存储
    2. 低功耗服务器定制,考虑是I/O密集型还是CPU密集型。
第5章 分布式键值系统
  • Dynamo设计时面临的问题以及解决方案
问题 采取的技术
数据分布 改进的一致性哈希(虚拟节点)
复制协议 复制写协议
数据冲突处理 向量时钟
面临故障处理 数据回传机制
永久故障后的恢复 Merkle哈希树
成员资格以及错误检测 基于Gossip的成员资格和错误检测协议
  • 容错 TODO 100p
第6章 分布式表格系统
第7章 分布式数据库