分布式实时处理系统:原理、架构与实现
上QQ阅读APP看书,第一时间看更新

1.5.4 常见分布式存储系统

本节将着重介绍几个在实际生产环境中经常用到的分布式存储系统,而像Cassandra这样常见的键值存储系统,我们也会在后续的编程实战章节中使用到。

1.Hbase

HBase是一款面向列的开源分布式数据库。其实就是Google的BigTable的开源实现,是Hadoop的一个子项目,是专门用于存储非结构化数据的数据库。面向列数据库的逻辑模型前文已经介绍过,这里不再阐述。

HBase也是一个主从式的存储系统。其系统架构由以下几部分组成。

1)Zookeeper:一个独立的集群协调项目,用在许多项目之中,可以简化集群协调管理。

2)HMaster:整个集群的控制者,负责管理用户的增删改查,管理HRegionServer的负载均衡。同时若HRegionServer失效,负责进行失效方的资源迁移。此外,由于HBase使用了Zookeeepr的首领枚举功能,且启动后会启动多个HMaster,因此可以避免单点故障问题。

3)HRegionServer:相当于集群中的数据节点,负责相应用户I/O请求,并向HDFS中写入数据。

此外,正如BigTable将实际数据存储在GFS上一样,HBase将其数据存放在HDFS上,这样就可以简化数据的分布式存放问题。

2.Cassandra

Cassandra不同于其他的存储系统,它是一个全分布式的数据库系统。它是一款混合型的非关系型数据库。其基础是Amazon的Dynamo,在此基础上融合了Google BigTable的列族数据模型。同时又采用P2P的模型实现集群去中心化。Cassandra是一个在生产环境中广泛使用的分布式存储系统。在本书的后续实战中,将会使用Cassandra作为存储系统。

相比于HBase, Cassandra有以下几个特点。

1)模式灵活:HBase中所有数据都是二进制存储,而Cassandra则模仿一些面向文档的存储系统,支持一些基本类型,同时又采取列族的方式,便于扩展模式。

2)无单点故障:由于Cassandra去中心化,并不会像有些主从系统那样主节点宕机导致整个集群不可使用。

3)可扩展性好:由于Cassandra是全分布式系统,因此可以进行简单的水平扩展,方便扩大集群规模。

3.MongoDB

MongoDB是一种面向文档的非关系型数据库,也就是说,在MongoDB中每条记录就是一个文档,文档之间独立存储,而且可以很好地和面向对象的设计相结合,无须像关系型数据库那样手动封装SQL。此外,这种松散的存储形式便于系统实现分布式存储查询。

MongoDB使用BSON作为数据存储格式,这是一种类JSON的二进制存储协议。MongoDB利用这种协议实现了高效的数据读写性能。

MongoDB由于是面向文档的数据库,因此相对来说模式自由,同时又支持大量的基本数据类型,相对于其他的NoSQL数据库而言又有强大的查询功能,因此在当今需求变化迅速、对并发要求较高的互联网市场,是非常合适的产品。现在也成为最热门的NoSQL数据库之一。