分布式存储系统

时间:2022-12-11 21:48:52

1. 单机系统 vs 分布式系统

1.1 单机系统

单机存储系统,就是在一个机器上的存储系统。单机存储引擎就是哈希表,B树等数据结构在机械硬盘、SSD等持久化介质上的实现。哈希表对应的存储系统是key-value存储系统,支持增删改和随机存取,不支持顺序扫描;B树对应的存储系统是关系数据库,支持增删查改以及顺序扫描,比如Mysql的InnoDB存储引擎,就是采用B+树数据结构作为数据索引。
单机存储系统主要考虑事务特性(ACID)、并发控制、故障恢复、数据压缩等问题。比如多个事务并发执行时,不能出现事务执行到一半的情况。为了保证事务的持久性(Durability),对数据库的每一个变化都要在磁盘上记录日志。

1.2 分布式系统

分布式系统一般由很多性价比较高的PC服务器通过网线连接。这些PC服务器的性能很好,但是故障率很高。
分布式系统和单机系统不同,数据一般分布在多个节点上。数据分布的方式主要有两种:哈希分布(比如Amazon的DynamoDB)和顺序分布(比如Google的BigTable, BigTable将一张大表按照主键切分为有序的范围,每个有序范围是一个子表)。
将数据分布到多台机器后,需要尽量保证多台机器之间的负载是比较均衡的,分布式系统需要自动识别负载高的节点,将它服务的部分数据迁移到其他机器,实现自动负载均衡。
分布式系统使用两段提交协议保证跨多个节点操作的原子性,使用Paxos协议用于保证多个节点的一致性。

2. 分布式存储分类

分布式存储按照存储的数据类型可以分为:

2.1 分布式文件系统

分布式文件系统用于存储Blob对象、定长块以及大文件。
分布式文件系统内部按照数据块来组织数据。每个数据块的大小大致相同,每个数据块包含多个Blob或多个定长块,一个大文件也可以拆分成多个数据块。
典型的系统有GFS,TFS等。

2.2 分布式key-value系统

分布式key-value系统用于存储关系简单的半结构化数据,只提供基于主键的CURD功能;
但是,Key-Value有一个非常致命的问题,那就是无法需要查找一段范围内的key。于是,有序键值 (Ordered Key-Value) 数据模型被设计出来解决这一限制,来从根本上提高数据集的问题。
典型的系统有Memcache,一般用作缓存。

2.3 分布式表格系统

对于分布式key-value来说,Value的模型由应用负责解析和存取,很不方便,于是出现了分布式表格系统。
分布式表格系统其实就是map里有map,map里再套map,一层一层套下去,也就是层层嵌套的key-value。分布式表格系统用于存储关系较为复杂的半结构化数据。
典型的系统包括,Google Table,Amazon DynamoDB等。

2.4 分布式数据库

分布式表格系统借鉴了很多关系数据库的技术,例如支持某种程度上的事务,比如单行事务。但是,分布式表格系统主要支持针对单张表格的操作,不支持多表关联。
分布式数据库一般是从单机数据库扩展而来,用于存储结构化数据。分布式数据库采用二维表格组织数据,提供SQL关系查询语言,支持多表关联,嵌套子查询等复杂操作,并提供数据库事务以及并发控制。
典型的系统包括MySQL数据库分片集群,Amazon RDS,Google Spanne, 阿里巴巴OceanBase系统。