与集中式存储技术不同,分布式存储技术并不是将数据存储在某个或多个特定的结点上,而是通过网络使用企业中的每台机器上的磁盘空间,并将这些分散的存储资源构成一个虚拟的存储设备,数据分散的存储在企业的各个角落。分布式存储系统具有如下几个特性。
(1)可扩展。分布式存储系统可以扩展到几百台甚至几千台的集群规模,而且随着集群规模的增长,系统整体性能表现为线性增长。
(2)低成本。分布式存储系统的自动容错、自动负载均衡机制使其可以构建在普通PC机之上。另外,线性扩展能力也使得增加、减少机器非常方便,可以实现自动运维。
(3)高性能。无论是针对整个集群还是单台服务器,都要求分布式存储系统具备高性能。
(4)易用性。分布式存储系统需要能够提供易用的对外接口,另外,也要求具备完善的监控、运维工具,并能够方便地与其他系统集成,例如,从Hadoop云计算系统导入数据。
分布式存储系统的挑战主要在于数据、状态信息的持久化,要求在自动迁移、自动容错、并发读写的过程中保证数据的一致性。分布式存储系统的关键问题如下。
(1)数据分布。如何将数据分布到多台服务器才能够保证数据分布均匀?数据分布到多台服务器后如何实现跨服务器读写操作?
(2)一致性。如何将数据的多个副本复制到多台服务器,即使在异常情况下,也能够保证不同副本之间的数据一致性?
(3)容错。如何检测到服务器故障?如何自动地将出现故障的服务器上的数据和服务迁移到集群中其他服务器?
(4)负载均衡。新增服务器和集群正常运行过程中如何实现自动负载均衡?数据迁移的过程中如何保证不影响已有服务?
(5)事务与并发控制。如何实现分布式事务?如何实现多版本并发控制?
(6)易用性。如何设计对外接口使得系统容易使用?如何设计监控系统并将系统的内部状态以方便的形式暴露给运维人员?(www.xing528.com)
(7)压缩/解压缩。如何根据数据的特点设计合理的压缩/解压缩算法?如何平衡压缩算法节省的存储空间和消耗的CPU计算资源?
按照结构化程度来划分,数据大致分为结构化数据、非结构化数据和半结构化数据。下面分别介绍这3种数据如何分布式存储。
1)结构化数据
结构化数据是一种用户定义的数据类型,它包含了一系列的属性,每一个属性都有一个数据类型,存储在关系数据库里,可以用二维表结构来表达实现的数据。大多数系统都有大量的结构化数据,一般存储在Oracle或SQL Server等关系型数据库中。当系统规模大到单一结点的数据库无法支撑时,一般有两种方法:垂直扩展与水平扩展。
(1)垂直扩展。垂直扩展比较好理解,简单地说,就是按照功能切分数据库,将不同功能的数据存储在不同的数据库中,这样一个大数据库就被切分成多个小数据库,从而达到了数据库的扩展。一个架构设计良好的应用系统,其总体功能一般是由很多个松耦合的功能模块所组成的,而每一个功能模块所需要的数据对应到数据库中就是一张或多张表。各个功能模块之间交互越少、越统一,系统的耦合度越低,这样的系统就越容易实现垂直切分。
(2)水平扩展。简单地说,可以将数据的水平切分理解为按照数据行来切分,就是将表中的某些行切分到一个数据库中,而另外的某些行又切分到其他的数据库中。为了能够比较容易地判断各行数据切分到了哪个数据库中,切分总是需要按照某种特定的规则来进行的,如按照某个数字字段的范围,某个时间类型字段的范围,或者某个字段的hash值。垂直扩展与水平扩展各有优缺点,一般一个大型系统会将水平与垂直扩展结合使用。
2)非结构化数据
相对于结构化数据而言,不方便用数据库二维逻辑表来表现的数据即称为非结构化数据,包括所有格式的办公文档、文本、图片、XML、HTML、各类报表、图像和音频/视频信等。分布式文件系统是实现非结构化数据存储的主要技术,谷歌文件系统(Google file systems,GFS)是最常见的分布式文件系统之一。GFS将整个系统分为三类角色:客户端、主服务器和数据块服务器。
3)半结构化数据
半结构化数据是包含完全结构化数据(如关系型数据库、面向对象数据库中的数据)和完全无结构的数据(如声音、图像文件等)之间的数据,半结构化数据模型具有一定的结构性,但较之传统的关系和面向对象的模型更为灵活。半结构数据模型完全不基于传统数库模式的严格概念,这些模型中的数据都是自描述的。由于半结构化数据没有严格的schema定义,所以不适合用传统的关系型数据库进行存储,适合存储这类数据的数据库被称为NoSQL数据库。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。