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

第一章 概述
1.1 分布式存储的概念:
     分布式存储系统是大量普通 PC 服务器通过 Internet 互联,对外作为一个整体提供存储服务。
     分布式存储系统有如下特征:可扩展,低成本,高性能,易用。
      分布式存储系统的挑战主要在于数据、 态信息的持  ,要求在自动迁移、自动 容错、并发读写的过程中保证数据的一致性。分布式存储涉及的技术主要来自两个领 域:分布式系统以及数据库。
1.2分类
      分布式存储面临的数据需求比较复杂,大致可以分为三类: 非结构化数据, 结构化数据,半 结构化数据
  (1)分布式文件系统
     互联网应用需要存储大量的图片 、照片 、视等非结构化数据对象,这类数据以对象的形式组织  ,对象之间没有关联,这样的数据一般为 Blob  ( Binary Large Object , 二进制大对象)数据。 分布式文件系统用于存储 Blob 对象,典型的系统有 Facebook Haystack 以及 Taobao File System ( TFS )。
 (2)分布式键值系统
      分布式键值系统用于存储关系简单的半结构化数据,它只提供基于主键的 CRUD ( Create/Read/Update/Delete )功能,即据主键创建、读取、更新或者删除一键值 记录。 典型的系统有Amazon Dynamo以及Taobao Tair
 (3)分布式表格系统
      分布式表格系统用于存储关系较为复杂的半结构化数据,与分布式键值系统相比, 分布式表格系统不仅仅支持简单的 CRUD 操作,而且支持扫描某个主键范围 。分布式 表格系统以表格为单位组织数据,每个表格包括很多行,通过主键标识一行,支持根据主键的 CRUD 功能以及范围查找功能。 典型的系统包括 Google Bigtable 以及 Megastore , Microsoft Azure Table Storage , Amazon DynamoDB 等。
(4)分布式数据库
      分布式数据库一 是从单机关系数据库扩展而来,用于存储结构化数据。分布式数据库采用二维表格组织数据,根据 SQL 关系查询语言,支持多表关联, 嵌套子查询等复杂操作,并提供数据库事务以及并发控制。 典型的系统包括 MySQL 数据库分 ( MySQL Sharding )集 , Amazon RDS 以及 Microsoft SQL Azure


第二章 单机存储系统
     单机存储引擎就是哈希表、 B树 等数据结构在机械磁盘、 SSD 等持久化介质上的实现。单机存储系统是单机存储引擎的一种封装,对外提供文件、键值、表格或者关系模型。
2.1硬件基础
cpu架构
     经典的多 CPU 架构为对称多处理结构( SMP ),即在一个计算机上汇集了一组处理器,它们之间对称工作, 无主次或从属 关系,共享相同的物理内存及总线。


SMP 架构的主要特点是共享,系统中所有资源( CPU 、内存、 I/O 等)都是共享的, 由于多 CPU 对前端总线的竞 , SMP 的扩展能力非常有限。为了提高可扩展性,现在的主流服务器架构一般为 NUMA ( 非一致存储访问)架构。

IO总线
      北桥芯片通过前端总线( FSB )与 CPU 相连,内存模块以及 PCI-E 设备(如高端 的 SSD 设备 Fusion-IO ) 接在北桥上。

网络拓扑
     下图为传统的数据中心网络  ,思科过去一直提倡这样的拓扑,分为三层,最下面是接入层 ,中间是汇聚层 ,上面是核心层

存储层次架构
     从分布式系统的 度 ,整个集群中所有服务器上的存储介质(内存、机械硬盘, SSD )构成一个整体,其他服务器上的存储介质与本机存储介质一样都是可访问的,区别仅仅在于需要额外的网络传输及网络协议栈等访问开销。

2.2单机存储引擎
     存储引擎是存储系统的发动机, 直接决定了存储系统能够提供的性能和功能。存储系统的基本功能包括 :增、删 、读、改 ,其中,读取操作又分为随机读取和顺序扫描。 希存储引擎是 希表的持久化实现,支持增、删 、改 ,以及随机读取操作,但不支持顺序扫描,对应的存储系统为键值 存储系统; B树  存储引擎是 B树 的持久化实现,不仅支持单条记录的增、删 、读、改操作,还支持顺序扫描,对应的存储系统是关系数据库。当然,键值系统也可以通过 B树 存储引擎实现 ; LSM 存储引擎和 B树 存储引擎一样,支持增、删 、改 、随机读取以及顺序扫描。它通过批量转储技术规避磁盘随机写入问题,广泛应用于互联网的后台存储系统,例如 Google Bigtable Google LevelDB 以及 Facebook 开源的 Cassandra 系统。 (1)哈希存储引擎
     Bitcask 是一个基于哈希表结构的键值存储系统,它仅支持追加操作 ,即所有的写操作只追加而不修改老的数据。在 Bitcask 系统中,每个文件有一定的大小限制,当文件增加到相应的大小时,就会产生一个新的文件,老的文件只读不写。
数据结构:Bitcask 数据文件中的数据是一条一条的写入操作,每一条记录的数据项分别为主键 )、 内容 、主键长度 value 、时间戳 以及 crc较 验值。
     定期合并: Bitcask 系统中的记录删除或者更新后,原来的记录成为垃圾数据。如果这些数据一直保存下去,文件会无限膨胀下去,为了解这个问题, Bitcask 需要定期行合并 操作以实现回收。所谓合并操作,即将所有老数据文件中的数据扫描一遍并生成新的数据文件,这里的合并其实就是对同一个 key 的多个操作以只保留最 新一个的原则进行删除,每次合并后,新生成的数据文件就不再有余数据了。
     快速恢复: Bitcask 系统中的哈希索引存储在内存中,如果不做额外的工作,服务器断电重启重建哈希表需要扫描一遍数据文件,如果数据文件很大,这是一个非常耗时的过程。 Bitcask 通过索引文件 来提高重建哈希表的速度。
(2)B树存储引擎
     B树 存储引擎不仅支持随机读取,还支持范围扫描。关系数据库中通过索引访问数据,在 Mysql InnoDB 中,有一个称为 聚集索引的特殊索引,行的数据存于其中,  组成 B+ 数据结构。
数据结构: MySQL InnoDB 按照页面 来组织数据,每个页面对应 B+ 的一个节点。其中, 子节点保存每行的完整数据,非 子节点保存索引信息。数据在每个节点中有序存储,数据库查询时需要从根节点开始二分查找到叶子节点,每次 读取一个节点,如果对应的页面不在内存中,需要从磁盘中读取并缓存起来。
缓冲区管理:
LRU: LRU 算法淘汰最长时间没有读或者写过的块。这种方法要求缓冲区管理器按照页 面最后一次被访问的时间组成一个链表,每次淘汰链表尾部的页面。
LIRS LIRS算法 将缓冲池分为两级,数据首先进入第一级,如果数据在较 的时间内被访问两次或者以上,则成为热点数据进入第二级,每一级内部还是采用 LRU  替换算法。
(3)LSM树存储引擎: 将对数据的修改增量保持在内存中, 到指定的大小限制后将这些修改操作批量写入磁盘,读取时需要合并磁盘中的历史数据和内存中最近的修改操作。 LSM 树 的优势在于有效地规避了磁盘随机写入问题,但读取时可能需要访问较多的磁盘文件。
数据结构: LevelDB 存储引擎主要包括:内存中的 MemTable 和不可变 MemTable ( Immutable MemTable ,也 为 Frozen MemTable ,即 结 MemTable )以 及磁盘上的几种主要文件 :当前( Current )文件、清单( Manifest )文件、操作日 ( Commit Log ,也 为提交日 )文件以及 SSTable 文件。当应用写入一 记录 时, LevelDB 会首先将修改操作写入到操作日志文件,成功后再将修改操作应用到 MemTable ,这样就完成了写入操作。
合并: LevelDB Compaction 操作分为两种: minor compaction major compaction
2.3数据模型
     存储系统的数据模型主要包括三类 :文件、关系以及随着 NoSQL 技术流行起来的键值模型。传统的文件系统和关系数据库系统分别采用文件和关系模型。关系模型描述能力强,产业链完整,是存储系统的业界标准。
文件模型: 文件系统以目录树的形式组织文件,以类 UNIX 操作系统为例, 根目录为 / ,包 /usr /bin /home 等子目录,每个子目录又包含其他子目录或者文件。 POSIX 是应用程序访问文件系统的 API 标准, 它定 了文件系统存储接 及操作集。 POSIX 主要接口如下。 Open/close :打开 / 关闭 一个文件,获取文件描述 ; Read/write :读取一个文件或者往文件中写入数据; Opendir/closedir :打开或者关闭一个目录; Readdir :  遍历目录。
关系模型: 每个关系是一个表格,由多个元 (行)构成,而每个元 又包含多个属性( )。 关系名、属性名以及属性类型称作 关系的模式( schema )。
键值模型: 大量的 NoSQL 系统采用了键值模型 ,每行记录由主键和 值两个部分组成,支持基于主键的如下操作:
Put :保存一个 Key-Value 对。 Get :读取一个 Key-Value 对。 Delete : 除一个 Key-Value 对。
Key-Value 模型过于简单,支持的应用 景有限, NoSQL 系统中使用比较广泛的模 型是表格模型。表格模型弱化了关系模型中的多表关联,支持基于单表的简单操作,典型的系统是 Google Bigtable 以及其开源 Java 实现 HBase 。表格模型除了支持简单的基于主键的操作,还支持范围扫描,另外,也支持基于列的操作。主要操作如下: Insert : 入一行数据,每行包括   ; Delete : 删除一行数据; Update :更新整行或者其中的某些列的数据; Get :读取整行或者其中某些列数据; Scan : 描一段范 围的数据, 根据主键确定扫描的范围 ,支持扫描部分列 ,支持按列过滤、排序、分组等。
2.4事务与并发控制
     事务规范了数据库操作的  ,每个事务使得数据库从一个一致的状态原子地转移到另一个一致的状态。数据库事务具有原子性 、一致性 、 隔离性 以及持久性 ACID 属 性,这些特性使得多个数据库事务并发执行时互不干扰  ,也不会获取到中间状态的错误结果。
事务: 事务是数据库操作的基本单 ,它具有原子性、一致性、隔离性和持久性这四个基本属性。
并发控制:分为数据库锁,写时复制,多版本并发控制
2.5故障恢复:
     数据库运行过程中可能会发生故障,这个时候某些事务可能执行到一半但没有提交,当系统重启时,需要能够恢复到一致的状态,即要么提交整个事务,要么回滚 。 数据库系统以及其他的分布式存储系统一般采用操作日志 (有时也称为提交日志 ,即 Commit Log )技术来实现故障恢复。操作日志分为回滚日志 、重做日志 以及 UNDO/REDOr日志 。如果记录事务修改前的状态,则为回滚日志 ; 相应地,如果记录事务修改后的状态,则为重做日志。
2.6数据压缩
      数据压缩分为有损压缩与无损压缩两种,有损压缩算法压缩比率高,但数据可能 ,一般用于压缩图片 、音频  、视频   ;而无损压缩算法能够完全还原原始数据。早期的数据压缩技术就是基于编码上的优化技术,其中以 Huffman 编码最为知名,它通过统计字符出现的频率计算最优前缀编码。
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
大规模分布式存储系统原理解析架构实战》是分布式系统领域的经典著作,由阿里巴巴高级技术专家“阿里日照”(OceanBase核心开发人员)撰写,阳振坤、章文嵩、杨卫华、汪源、余锋(褚霸)、赖春波等来自阿里、新浪、网易和百度的资深技术专家联袂推荐。理论方面,不仅讲解了大规模分布式存储系统的核心技术和基本原理,而且对谷歌、亚马逊、微软和阿里巴巴等国际型大互联网公司的大规模分布式存储系统进行了分析;实战方面,首先通过对阿里巴巴的分布式数据库OceanBase的实现细节的深入剖析完整地展示了大规模分布式存储系统架构与设计过程,然后讲解了大规模分布式存储技术在云计算和大数据领域的实践与应用。本书内容分为四个部分:基础篇――分布式存储系统的基础知识,包含单机存储系统的知识,如数据模型、事务与并发控制、故障恢复、存储引擎、压缩/解压缩等;分布式系统的数据分布、复制、一致性、容错、可扩展性等。范型篇――介绍谷歌、亚马逊、微软、阿里巴巴等著名互联网公司的大规模分布式存储系统架构,涉及分布式文件系统、分布式键值系统、分布式表格系统以及分布式数据库技术等。实践篇――以阿里巴巴的分布式数据库OceanBase为例,详细介绍分布式数据库内部实现,以及实践过程中的经验。专题篇――介绍分布式系统的主要应用:云存储和大数据,这些是近年来的热门领域,本书介绍了云存储平台、技术与安全,以及大数据的概念、流式计算、实时分析等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值