D 、分布式存储的比较
那么现在问题来了,如果我们要选择分布式存储,选择哪种好呢?其实它们各有各的优势和使用场景,具体要看需求。
(1)HDFS
主要用于大数据的存储场景,是 Hadoop 大数据架构中的存储组件。HDFS 在开始设计的时候,就已经明确的它的应用场景,就是大数据服务。主要的应用场景有:
a 、对大文件存储的性能比较高,例如几百兆,几个 G 的大文件。因为 HDFS 采用的是以元数据的方式进行文件管理,而元数据的相关目录和块等信息保存在 NameNode 的内存中, 文件数量的增加会占用大量的 NameNode 内存。如果存在大量的小文件,会占用大量内存空间,引起整个分布式存储性能下降,所以尽量使用 HDFS 存储大文件比较合适。
b 、适合低写入,多次读取的业务。就大数据分析业务而言,其处理模式就是一次写入、多次读取,然后进行数据分析工作, HDFS 的数据传输吞吐量比较高,但是数据读取延时比较差,不适合频繁的数据写入。
c 、 HDFS 采用多副本数据保护机制,使用普通的 X86 服务器就可以保障数据的可靠性,不推荐在虚拟化环境中使用。
( 2 ) Ceph
目前应用最广泛的开源分布式存储系统,已得到众多厂商的支持,许多超融合系统的分布式存储都是基于 Ceph 深度定制。而且 Ceph 已经成为 LINUX 系统和 OpenStack 的 “ 标配 ” ,用于支持各自的存储系统。Ceph 可以提供对象存储、块设备存储和文件系统存储服务。同时支持三种不同类型的存储服务的特性,在分布式存储系统中,是很少见的。
a、 Ceph 没有采用 HDFS 的元数据寻址的方案,而且采用 CRUSH 算法,数据分布均衡,并行度高。而且在支持块存储特性上,数据可以具有强一致性,可以获得传统集中式存储的使用体验。
b、 对象存储服务, Ceph 支持 Swift 和 S3 的 API 接口。在块存储方面,支持精简配置、快照、克隆。在文件系统存储服务方面,支持 Posix 接口,支持快照。但是目前 Ceph 支持文件的性能相当其他分布式存储系统,部署稍显复杂,性能也稍弱,一般都将 Ceph 应用于块和对象存储。
c、 Ceph 是去中心化的分布式解决方案,需要提前做好规划设计,对技术团队的要求能力比较高。特别是在 Ceph 扩容时,由于其数据分布均衡的特性,会导致整个存储系统性能的下降
( 3 )Swift
主要面向的是对象存储。和 Ceph 提供的对象存储服务类似。主要用于解决非结构化数据存储问题。它和 Ceph 的对象存储服务的主要区别是。
a 、客户端在访问对象存储系统服务时, Swift 要求客户端必须访问 Swift 网关才能获得数据。而 Ceph 使用一个运行在每个存储节点上的 OSD (对象存储设备)获取数据信息,没有一个单独的入口点,比 Swift 更灵活一些。
b 、数据一致性方面, Swift 的数据是最终一致,在海量数据的处理效率上要高一些,但是主要面向对数据一致性要求不高,但是对数据处理效率要求比较高的对象存储业务。而 Ceph 是始终跨集群强一致性。主要的应用场景,在 OpenStack 中,对象存储服务使用的就是 Swift ,而不是 Ceph 。
三、分布式理论浅析
1 、一致性和可用性
由于异常的存在,分布式存储系统设计时往往会将数据冗余存储多份,每一份称为一个副本)。这样,当某一个节点出现故障时,可以从其他副本上读到数据。可以这么认为,副本是分布式存储系统容错技术的唯一手段。由于多个副本的存在,如何保证副本之间的一致性是整个分布式系统的理论核心。
数据一致性这个单词在平常开发中,或者各种文章中都能经常看见,我们常常听见什么东西数据不一致了,造成了一定的损失,赶快修复一下。那有几种一致性呢?
a、 时间一致性:要求所有数据组件的数据在任意时刻都是完全一致的;
b、 事物一致性:事务一致性只能存在在事务开始前的和事务完成之后,在事务过程中数据有可能不一致,比如 A 转 100 元给 B , A 扣减 100 , B 加上 100 ,在事务开始前和事务完成之后都能保证他们的帐是对上的,那么这就是事务一致性。但是在事务过程中有可能会出现 A 扣减了 100 元, B 没有加上 100 元的情况,这就是不一致
c、 在应用程序中涉及多个不同的单机事务,只有在所有的单机事务完成之前和完成之后,数据是完全一致的。