1,分布式存储概念
分布式存储系统顾名思义就是将大量的普通服务器,通过网络互联,对外作为一个整体提供存储服务。具有可扩展性、可用性、可靠性、 高性能、易维护、低成本等特性。
分布式存储系统,是将数据分散存储在多台独立的设备上。传统的网络存储系统采用集中的存储服务器存放所有数据,存储服务器成为系统性能的瓶颈,也是可靠性和安全性的焦点,不能满足大规模存储应用的需要。分布式网络存储系统采用可扩展的系统结构,利用多台存储服务器分担存储负荷,利用位置服务器定位存储信息,它不但提高了系统的可靠性、可用性和存取效率,还易于扩展。
2,分布式文件系统的发展
现在
· 代表:HBase、Cassadra、MongoDB、DynamoDB…
· HBase:列存储数据库,擅长以列为单位读取数据,面向列存储的数据库具有高扩展性,即使数据大量增加也不会降低相应的处理速度,特别是写入速度。
· MongoDB:文档型数据库它同键值(Key-Value)型的数据库类似,键值型数据库的升级版,允许嵌套键值,Value值是结构化数据,数据库可以理解Value的内容,提供复杂的查询,类似于RDBMS的查询条件。
· DynamoDB:Amazon 公司的一个分布式存储引擎,是一个经典的分布式Key-Value 存储系统,具备去中心化,高可用性,高扩展性的特点,达到这个目标在很多场景中牺牲了一致性,Dynamo在Amazon中得到了成功的应用,能够跨数据中心部署于上万个结点上提供服务,它的设计思想也被后续的许多分布式系统借鉴。
3,分布式存储系统的分类
数据类型三大类
非结构化数据:指其字段长度不等,并且每个字段的记录又可以由可重复或不可重复的子字段构成,没有规律,比如文本、图像、声音、影视等等。
半结构化数据:介于完全结构化数据(如关系型数据库、面向对象数据库中的数据)和完全无结构的数据(如声音、图像文件等)之间的数据,HTML文档就属于半结构化数据。它一般是自描述的,数据的结构和内容混在一起,没有明显的区分。
结构化数据:结构化数据即行数据,存储在数据库里,可以用二维表结构来逻辑表达实现的数据,数据模式和内容是分开的,数据的模式需要预先定义。
分布式存储类型
分布式文件系统:存储大量的文件、图片、音频、视频等非结构化数据,这些数据以对象的形式组织,对象之间没有关系,这数据都是二进制数据,例如GFS、HDFS等。
分布式Key-Value系统:用于存储关系简单的半结构化数据,提供基于Key的增删改查操作,缓存、固化存储,例如Memached、Redis、DynamoDB等。
分布式数据库系统: 存储结构化数据,提供SQL关系查询语言,支持多表关联,嵌套子查询等,例如MySQL Sharding集群、MongoDB等等。
4,分布式存储系统的特性
高可用性:指分布式存储系统在面对各种异常时可以提供正常服务的能力,系统的可用性可以用系统停服务的时间和正常服务时间的比例来衡量,例如4个99的可用性(99.99%)要求一年停机的时间不能超过3652460/10000 = 53分钟。
高可靠性:重点指分布式系统数据安全方面的指标,数据可靠不丢失,主要用多机冗余、单机磁盘RAID等措施。
高扩展性:指分布式存储系统通过扩展集群服务器规模从而提高系统存储容量、计算和性能的能力,业务量增大,对底层分布式存储系统的性能要求越来越高,自动增加服务器来提升服务能力,分为Scale Up与Scale Out,前者指通过增加和升级服务器硬件,或者指通过增加服务器数量。衡量可扩展性的要求集群具有线性的可扩展性,系统整体性能与服务器数量呈线性关系。
数据一致性:分布式存储系统多个副本之间的数据一致性,有强一致性,弱一致性,最终一致性,因果一致性,顺序一致性。
高安全性:指分布式存储系统不受恶意访问和攻击,保护存储数据不被窃取,互联网是开放的,任何人在任何时间任何地点通过任何方式都可以访问网站,针对现存的和潜在的各种攻击与窃取手段,要有相应的应对方案。
高性能:衡量分布式存储系统性能常见的指标是系统的吞吐量和系统的响应延迟,系统的吞吐量是在一段时间内可以处理的请求总数,可以用QPS(Query Per Second)和TPS(Transaction Per second)衡量。系统的响应延迟是指某个请求发出到接收到返回结果所消耗的时间,通常用平均延迟来衡量。这两个指标往往是矛盾的,追求高吞吐量,比较难做到低延迟,追求低延迟,吞吐量会受影响。
高稳定性:这是一个综合指标,考核分布式 存储系统的整体健壮性,任何异常,系统都能坦然面对,系统稳定性越高越好。
5,具体技术及应用
分布式存储架构由三个部分组成:客户端、元数据服务器和数据服务器。客户端负责发送读写请求,缓存文件元数据和文件数据。元数据服务器负责管理元数据和处理客户端的请求,是整个系统的核心组件。数据服务器负责存放文件数据,保证数据的可用性和完整性。该架构的好处是性能和容量能够同时拓展,系统规模具有很强的伸缩性。
海量的数据按照结构化程度来分,可以大致分为结构化数据,非结构化数据,半结构化数据。 下面分别介绍这三种数据如何分布式存储。
结构化数据的存储及应用
所谓结构化数据是一种用户定义的数据类型,它包含了一系列的属性,每一个属性都有一个数据类型,存储在关系数据库里,可以用二维表结构来表达实现的数据。
大多数系统都有大量的结构化数据,一般存储在Oracle或MySQL的等的关系型数据库中,当系统规模大到单一节点的数据库无法支撑时,一般有两种方法:垂直扩展与水平扩展。
· 垂直扩展:垂直扩展比较好理解,简单来说就是按照功能切分数据库,将不同功能的数据,存储在不同的数据库中,这样一个大数据库就被切分成多个小数据库,从而达到了数据库的扩展。一个架构设计良好的应用系统,其总体功能一般肯定是由很多个松耦合的功能模块所组成的,而每一个功能模块所需要的数据对应到数据库中就是一张或多张表。各个功能模块之间交互越少,越统一,系统的耦合度越低,这样的系统就越容易实现垂直切分。
· 水平扩展:简单来说,可以将数据的水平切分理解为按照数据行来切分,就是将表中的某些行切分到一个数据库中,而另外的某些行又切分到其他的数据库中。为了能够比较容易地判断各行数据切分到了哪个数据库中,切分总是需要按照某种特定的规则来进行的,如按照某个数字字段的范围,某个时间类型字段的范围,或者某个字段的hash值。
垂直扩展与水平扩展各有优缺点,一般一个大型系统会将水平与垂直扩展结合使用。
非结构化数据的存储及应用
相对于结构化数据而言,不方便用数据库二维逻辑表来表现的数据即称为非结构化数据,包括所有格式的办公文档、文本、图片、XML、HTML、各类报表、图像和音频/视频信息等等。
分布式文件系统是实现非结构化数据存储的主要技术,说到分布式文件系统就不得不提GFS(全称为"Google File System"),GFS的系统架构图如下图所示。
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等。
半结构化数据的存储及应用
就是介于完全结构化数据(如关系型数据库、面向对象数据库中的数据)和完全无结构的数据(如声音、图像文件等)之间的数据, 半结构化数据模型具有一定的结构性,但较之传统的关系和面向对象的模型更为灵活。半结构数据模型完全不基于传统数据库模式的严格概念,这些模型中的数据都是自描述的。
由于半结构化数据没有严格的schema定义,所以不适合用传统的关系型数据库进行存储,适合存储这类数据的数据库被称作“NoSQL”数据库。
补充
元数据(Metadata),又称中介数据、中继数据,为描述数据的数据(data about data),主要是描述数据属性(property)的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。元数据算是一种电子式目录,为了达到编制目录的目的,必须在描述并收藏数据的内容或特色,进而达成协助数据检索的目的。,元数据的存取性能是整个分布式文件系统性能的关键。