云计算导论
上QQ阅读APP看书,第一时间看更新

3.1.1 分布式数据存储的概念

云计算是一种新型的计算模式。它的最主要特征是系统拥有大规模数据集、基于该数据集,向用户提供服务。为保证高可用、高可靠和经济性,云计算采用分布式存储的方式来存储数据,采用冗余存储的方式来保证存储数据的可靠性,即为同一份数据存储多个副本。此外,云系统需要同时满足大量用户的需求,并行地为用户提供服务。因此,云计算的数据存储技术必须具有高吞吐率和高传输率的特点。

与目前常见的集中式存储技术不同,分布式存储技术并不是将数据存储在某个或多个特定的结点上,而是通过网络使用企业中的每台机器上的磁盘空间,并将这些分散的存储资源构成一个虚拟的存储设备,数据分散地存储在企业的各个角落。

因此,分布式存储可以定义如下:分布式存储系统是大量普通PC服务器通过Internet互联,对外作为一个整体提供存储服务。

分布式存储是相对于单机存储而言,之所以要分布是因为互联网时代信息数据大爆炸,单机已经难以满足大型应用的数据存储需求。

1.分布式存储的特点

分布式存储具有如下特性:

(1)成本低

分布式存储系统的自动容错、自动负载均衡机制使其可以构建在普通PC之上。同时,线性扩展能力也使得其增加、减少机器非常方便,可以实现自动运维。

(2)可扩展

分布式存储系统可以扩展到几百台甚至几千台的集群规模,随着规模的增长,系统整体性表现为线性增长。

(3)高性能

无论是整个集群还是单台服务器,都要求分布式存储系统具有高性能。

(4)易用性

分布式存储系统需要能够提供易用的对外接口,还需要具备完善的监控、运维工具,并方便地与其他系统集成。

分布式存储面临的数据需求比较复杂,大致可以分为3类:

①结构化数据:一般存储在关系数据库中,可以用二维关系表结构来表示。结构化数据的模式(Schema,包括属性、数据类型以及数据之间的联系)和内容是分开的,数据的模式需要预先定义。

②半结构化数据:介于非结构化数据和结构化数据之间,HTML文档就属于半结构化数据。它一般是自描述的,与结构化数据最大的区别在于半结构化数据的模式结构和内容混在一起,没有明显的区分,也不需要预先定义数据的模式结构。

③非结构化数据:包括所有格式的办公文档、文本、图片、图像、音频和视频信息等。

2.分布式存储系统的分类

不同的分布式存储系统适合处理不同类型的数据,分布式存储系统分为4类:分布式文件系统、分布式键值(Key-Value)系统、分布式表格系统和分布式数据库。

(1)分布式文件系统

互联网应用需要存储大量的图片、照片、视频等非结构化数据对象,这类数据以对象的形式组织,对象之间没有关联,这样的数据一般称为Blob(Binary Large Object,二进制大对象)数据。

分布式文件系统用于存储Blob对象,典型的系统有Facebook Haystack以及Taobao File System(TFS)。另外,分布式文件系统也常作为分布式表格系统以及分布式数据库的底层存储,如谷歌的GFS(Google File System,存储大文件)可作为分布式表格系统Google Bigtable的底层存储,Amazon的EBS(Elastic Block Store,弹性块存储)系统可作为分布式数据库(Amazon RDS)的底层存储。

(2)分布式键值系统

分布式键值系统用于存储关系简单的半结构化数据,它只提供基于主键的CRUD(Create/Read/Update/Delete)功能,即根据主键创建、读取、更新或者删除一条键值记录。

典型的系统有Amazon Dynamo以及Taobao Tair。从数据结构的角度来看,分布式键值系统与传统的哈希表比较类似,不同的是,分布式键值系统支持将数据分布到集群中的多个存储结点。分布式键值系统是分布式表格系统的一种简化实现,一般用作缓存,比如Taobao Tair以及Memcache。一致性哈希是分布式键值系统中常用的数据分布技术,因其被Amazon DynamoDB系统使用而变得相当有名。

(3)分布式表格系统

分布式表格系统用于存储关系较为复杂的半结构化数据,与分布式键值系统相比,分布式表格系统不仅仅支持简单的CRUD操作,而且支持扫描某个主键范围。分布式表格系统以表格为单位组织数据,每个表格包括很多行,通过主键标识一行,支持根据主键的CRUD功能以及范围查找功能。

分布式表格系统借鉴了很多关系数据库的技术,例如支持某种程度上的事务,如单行事务、某个实体组(Entity Group,一个用户下的所有数据往往构成一个实体组)下的多行事务。典型的系统包括Google Bigtable以及Megastore、Microsoft Azure Table Storage、Amazon DynamoDB等。与分布式数据库相比,分布式表格系统主要支持针对单张表格的操作,不支持一些特别复杂的操作,如多表关联、多表联接及嵌套子查询;另外,在分布式表格系统中,同一个表格的多个数据行也不要求包含相同类型的列,适合半结构化数据。分布式表格系统是一种很好的权衡,这类系统可以做到超大规模,而且支持较多的功能,但实现往往比较复杂,而且有一定的使用门槛。

(4)分布式数据库

分布式数据库一般是从单机关系数据库扩展而来,用于存储结构化数据。分布式数据库采用二维表格组织数据,提供SQL关系查询语言,支持多表关联、嵌套子查询等复杂操作,并提供数据库事务以及并发控制。

典型的系统包括MySQL数据库分片(MySQL Sharding)集群、Amazon RDS以及Microsoft SQL Azure。分布式数据库支持的功能最为丰富,符合用户使用习惯,但可扩展性往往受到限制,但也并不是绝对的。Google Spanner系统是一个支持多数据中心的分布式数据库,它不仅支持丰富的关系数据库功能,还能扩展到多个数据中心的成千上万台机器。除此之外,阿里巴巴OceanBase系统也是一个支持自动扩展的分布式关系数据库。

3.分布式存储系统要解决的问题

分布式存储系统的关键在于数据、状态信息的持久化,也就是要求在自动迁移、自动容错、并发读写的过程中保证数据的一致性。

分布式存储系统通常通过集群方式扩展到几百甚至几千台集群规模来解决系统扩展能力,通过软件层面实现对单机服务器的硬件容错能力大大提升了整体集群的容错能力。在获得这些好处时,自然也有所牺牲,分布式存储系统要解决的问题通常如下:

(1)数据分布问题

如何保证数据能够均匀地分布在多台服务器上,对于分布在多台服务器上的数据如何实现跨服务器读写操作。

(2)数据一致性

如何将数据的多个副本复制到多台服务器上,即使在异常情况下,也能够保证不同副本质检的数据一致性。

(3)负载均衡问题

新增服务器和集群正常运行过程中如何实现自动负载均衡,数据迁移的过程如何保证不影响已有服务。

(4)容错问题

如何检测到服务器故障,如何自动将出现故障的服务器上的数据和服务迁移到集群中其他服务器。

(5)事务与并发控制问题

如何实现分布式事务,又如何实现多版本并发控制。

(6)易用性

如何设计对外接口使得系统容易使用,如何设计监控系统并将系统的内部状态以方便的形式暴露给运维人员。

(7)压缩/解压缩问题

如何根据数据的特点设计合理的压缩/解压缩算法,如何平衡压缩算法节省的存储空间和消耗的CPU设计资源。