这是一篇在阅读《大规模分布式存储系统:原理解析与架构实战》时的阅读笔记,由于长时间碎片阅读的关系导致在做这种读书笔记的时候接近复制粘贴。虽然其中会有一小部分自己的想法但都十分零碎,希望后续能改进。
分布式存储的概念:
分布式存储系统是大量普通PC服务器通过英特网互联,对外作为一个整体提供存储服务。
分布式存储的几个特征:
- 可扩展:分布式存储系统可以扩展到几百台甚至几千台的集群规模,而且,随着集群规模的增长,系统整体性能表现为线性增长
- 低成本:分布式存储系统的自动容错、自动负载均衡机制使其可以构建在普通PC机之上。另外线性扩展能力也使得增加、减少机器非常方便、可以实现自动运维
- 高性能:无论是针对整个集群还是单台服务器,都要求分布式存储系统具备高性能
- 易用:分布式存储系统需要能够提供易用的对外借口,另外,也要求具备完善的监控、运维工具,并能够方便地与其他系统集成,例如,从hadoop云计算系统导入数据
主要挑战:数据、状态信息的持久化,要求在自动迁移、自动容错、并发读写的过程中保证数据的一致性。
主要领域:分布式系统、数据库
主要需求:
- 数据分布:如何将数据分布到多台服务器才能保证数据分布均匀?数据分布到多台服务器后如何实现扩服务器读写操作?(数据平衡算法?)
- 一致性:如何将数据的多个副本复制到脱台服务器,即使在异常情况下,也能够保证不同副本之间的数据一致性?(用paxos等一致性算法)
- 容错:如何检测到服务器故障?(心跳检测)如何自动将出现故障的服务器上的数据和服务器迁移到集群中的其他服务器?
- 负载均衡:新增服务器和集群正常运行过程中如何实现自动负载均衡?数据迁移的过程中如何保证不影响已有服务?(主副服务器模式,数据迁移过程中切换到副服务器)
- 事务与并发控制:如何实现分布式事务?如何实现多版本并发控制?
- 易用性:如何设计对外借口使得系统容易使用?如何设计监控系统并将系统的内部状态以方便的形式暴露给运维人员?
- 压缩/解压缩:如何根据数据的特点设计合理的压缩/解压缩算法?如何平衡压缩算法节省的存储空间和消耗的CPU计算机资源
面临的数据需求:
- 非结构化数据:包括所有格式的办公文档、文本、图片、图像、音频和视频信息等
- 结构化数据:一般存储在关系数据库中呢,可以用二维关系表结构来表示。结构化数据的模式(Schema,包括属性、数据类型以及数据之间的联系)和内容是分开的,数据的模式需要预先定义。
- 半结构化数据:介于非结构化数据和结构化数据之间,HTML文档就属于半结构化数据。它一般是自描述的,与结构化数据最大的区别在于,半结构化数据的模式结构和内容混在一起,没有明显的区分,也不需要预先定义数据的模式结构。
分布式存储的分类:
- 分布式文件系统
- 分布式键值(Key-Value)系统
- 分布式表格系统
- 分布式数据库
分布式文件系统:
主要用于存储非结构化数据,这些数据以对象的形式组织。对象之间没有关联,这样的数据一般称为Blob(Binary Large Object, 二进制大对象)数据。
总体上,分布式文件系统存储三种类型的数据:Blod对象、定长块、大文件。而这三者在存储系统内部又被按照数据块(chunk)来组织。一个数据块可以包含多个Blod对象,也可以由多个定长块组成,同时大文件也能拆分为多个数据块。
Blod对象、定长块、大文件是逻辑上的概念,在存储系统中会转化为物理上的概念数据块(chunk)进行存储。对Blod对象、定长块、大文件的操作最终都映射为对数据块的操作
分布式键值系统:
分布式键值系统用于存储关系简单的半结构化数据,他只提供基本主键的CRUD功能。从数据结构的角度看,分布式键值系统与传统的哈希表比较类似,不同的是,分布式键值系统支持将数据分布到集群中的多个存储节点。(一个主键对应的数据会被拆分到多个存储节点)
分布式键值系统是分布式表格系统的一种简化实现,一般作用与缓存。
一致性哈希是分布式键值系统中常用的数据分布技术。
分布式表格系统:
分布式表格系统用于存储关系较为复杂的半结构化数据,与分布式键值系统相比,分布式表格系统不仅仅支持简单的CRUD操作,还支持扫描某个主键范围。
分布式表格系统以表格为单位组织数据,每个表格包括很多行,通过主键标示一行,支持根据主键的CRUD功能以及范围查找功能。
分布式表格系统借鉴了很多关系数据库的激素,例如事务。
与分布式数据库相比,分布式表格系统主要支持针对单张表的操作,不支持一些特别复杂的操作,比如多表关联,多表连接,嵌套子查询等。
在分布式表格系统中,同一个表格的多个数据行也不要求包含相同类型的列,适合半结构化数据。
分布式表格系统是一种很好的权很,这类系统可以做到超大规模,而且支持较多的功能,但实现比较复杂,有一定的使用门槛。
分布式数据库:
分布式数据库一般是从单机关系数据库扩展而来,用于存储结构化数据。分布式数据库采用二维表格组织数据,提供SQL关系查询语言,支持多表关联,嵌套子查询等复杂操作,并提供数据库事务以及并发控制。