分布式存储技术及应用

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

分布式存储技术及应用

根据did you know(/)的数据,目前互联网上可访问的信息数量接近1秭= 1百万亿亿 (1024)。毫无疑问,各个大型网站也都存储着海量的数据,这些海量的数据如何有效存储,是每个大型网站的架构师必须要解决的问题。分布式存储技术就是为了解决这个问题而发展起来的技术,下面让将会详细介绍这个技术及应用。

分布式存储概念

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

具体技术及应用:

海量的数据按照结构化程度来分,可以大致分为结构化数据,非结构化数据,半结构化数据。本文接下来将会分别介绍这三种数据如何分布式存储。

结构化数据的存储及应用

所谓结构化数据是一种用户定义的数据类型,它包含了一系列的属性,每一个属性都有一个数据类型,存储在关系数据库里,可以用二维表结构来表达实现的数据。

大多数系统都有大量的结构化数据,一般存储在Oracle或MySQL的等的关系型数据库中,当系统规模大到单一节点的数据库无法支撑时,一般有两种方法:垂直扩展与水平扩展。

∙垂直扩展:垂直扩展比较好理解,简单来说就是按照功能切分数据库,将不同功能的数据,存储在不同的数据库中,这样一个大数据库就被切分成多个小数据库,

从而达到了数据库的扩展。一个架构设计良好的应用系统,其总体功能一般肯定

是由很多个松耦合的功能模块所组成的,而每一个功能模块所需要的数据对应到

数据库中就是一张或多张表。各个功能模块之间交互越少,越统一,系统的耦合

度越低,这样的系统就越容易实现垂直切分。

∙水平扩展:简单来说,可以将数据的水平切分理解为按照数据行来切分,就是将表中的某些行切分到一个数据库中,而另外的某些行又切分到其他的数据库中。为

了能够比较容易地判断各行数据切分到了哪个数据库中,切分总是需要按照某种

特定的规则来进行的,如按照某个数字字段的范围,某个时间类型字段的范围,

或者某个字段的hash值。

垂直扩展与水平扩展各有优缺点,一般一个大型系统会将水平与垂直扩展结合使用。

实际应用:图1是为核高基项目设计的结构化数据分布式存储的架构图。

图1可水平&垂直切分扩展的数据访问框架

∙采用了独立的分布式数据访问层,后端分布式数据库集群对前端应用透明。

∙集成了Memcached集群,减少对后端数据库的访问,提高数据的查询效率。

∙同时支持垂直及水平两种扩展方式。

∙基于全局唯一性主键范围的切分方式,减轻了后续维护的工作量。

∙全局唯一性主键的生成采用DRBD+Heartbeat技术保证了可靠性。

∙利用MySQL Replication技术实现高可用的架构。

注:以上的数据切分方案并不是唯一扩展MySql的方法,有兴趣的读者可以关注一下”云计算时代的MySQL-Clustrix Sierra分布式数据库系统”。

非结构化数据的存储及应用

相对于结构化数据而言,不方便用数据库二维逻辑表来表现的数据即称为非结构化数据,包括所有格式的办公文档、文本、图片、XML、HTML、各类报表、图像和音频/视频信息等等。分布式文件系统是实现非结构化数据存储的主要技术,说到分布式文件系统就不得不提GFS (全称为"Google File System"),GFS的系统架构图如下图所示。

图2 Google-file-system架构图

图3 Google-file-system架构图(详细)

GFS将整个系统分为三类角色:Client(客户端)、Master(主服务器)、Chunk Server(数据块服务器)。

∙Client(客户端):是GFS提供给应用程序的访问接口,它是一组专用接口,不遵守POSIX规范,以库文件的形式提供。应用程序直接调用这些库函数,并与该库

链接在一起。

∙Master(主服务器):是GFS的管理节点,主要存储与数据文件相关的元数据,而不是Chunk(数据块)。元数据包括:命名空间(Name Space),也就是整个文

件系统的目录结构,一个能将64位标签映射到数据块的位置及其组成文件的表

格,Chunk副本位置信息和哪个进程正在读写特定的数据块等。还有Master节点

会周期性地接收从每个Chunk节点来的更新("Heart- beat")来让元数据保持

最新状态。

∙Chunk Server(数据块服务器):负责具体的存储工作,用来存储Chunk。GFS将文件按照固定大小进行分块,默认是64MB,每一块称为一个Chunk(数据块),每

一个Chunk以Block为单位进行划分,大小为64KB,每个Chunk有一个唯一的

64位标签。GFS采用副本的方式实现容错,每一个Chunk有多个存储副本(默认

为三个)。 Chunk Server的个数可有有多个,它的数目直接决定了GFS的规模。

GFS之所以重要的原因在于,在Google公布了GFS论文之后,许多开源组织基于GFS的论文开发了各自的分布式文件系统,其中比较知名的有HDFS,MooseFS,MogileFS等。

实际应用:由于核高基的项目中未来会有大量的数据与应用需要存储,所以我们设计时也采用分布式文件系统的方案,由于开源的分布式文件系统可以基本满足我们需求,另外从时间上来说也比较紧张,所以我们采用了开源的MooseFS作为底层的分布式文件系统。

∙MooseFS存在的问题:由于MooseFS是也是按照GFS论文设计的,只有一个Master (主服务器),虽然可以增加一个备份的日志服务器,但是还是存在Master无

法扩展的问题,当单一Master节点上存储的元数据越来越多的时候,Master节

点占用的内存会越来越多,直到达到服务器的内存上限,所以单一Master节点

存在内存上的瓶颈,只能存储有限的数据,可扩展性差,并且不稳定。

∙对MooseFS的优化:面对MooseFS存在的问题,我们采用了类似分布式数据库中的“Sharding”技术,设计了一个分布式文件系统访问框架,可以做到对分布式文

件系统做垂直与水平切分。这样就最大限度的保证了MooseFS系统的可扩展性与

稳定性。

下图是为核高基项目设计的非结构化数据分布式存储的架构图。我们设计了两种访问方式,一种是类似GFS的API访问方式,以库文件的方式提供,应用程序通过调用API直接访问分布式文件系统。第二种是通过RESTful web Service访问。

相关文档
最新文档