目录
分布式存储概念
分布式文件系统的发展
分布式存储系统的分类
数据类型三大类
分布式存储类型
分布式存储系统的特性
单机存储原理与设计
多机存储原理与设计
FLP定理与设计
CAP定理与设计
2PC协议与设计
Paxos协议与设计
这篇博客主要来总结一下分布式存储系统的历史,发展以及特性,从而对分布式存储系统有一个大概的了解,主要从一下几个部分来介绍分布式存储:
分布式存储系统顾名思义就是将大量的普通服务器,通过网络互联,对外作为一个整体提供存储服务。具有可扩展性、可用性、可靠性、 高性能、易维护、低成本等特性。
· 代表:AFS、NFS、Coda
· AFS:1983年 Carnegine Mellon大学和IBM共同合作开发Andrew文件系统(Andrew File System, AFS),AFS设计目标是将至少7000个工作站连接起来,为每个用户提供一个共享的文件系统,将高扩展性、网络安全性放在首位,客户端高速缓存,即使网络断开,可以对部分数据缓存。
· NFS:1985年Sun公司基于UDP开发了网络共享文件系统(Network File System, NFS),NFS由一系列NFS命令和进程组成的客户机/服务器(C/S)模式。NFS第三版,加入了基于TCP传输,第三版发布六年后,NFS成为Linux中的稳定版本。
· Coda:1987年 Carnegine Mellon大学在基于AFS的基础上开发了Coda文件系统,它为Linux工作站组成的大规模分布式计算环境设计的文件系统,通过两种互补机制为服务器和网络故障提供了容错机制,服务器复制机制,一个文件拷贝到多个服务器上,无连接操作机制,将缓存端暂时作为服务端的执行模式,Coda注重可靠性和性能优化,它提供了高度的一致性。
· 代表:xFS、Tiger Shark 、SFS…
· 背景:进入九十年代,随着Windows的问世,极大促进了微处理器的发展和PC的广泛普及,互联网和多媒体技术也犹如雨后春笋般发展起来,一方面:对多媒体数据的实时传输需和应用越来越流行,另一方面:大规模并行计算技术的发展和数据挖掘技术应用,迫切需要能支持大容量和高速的分布式存储系统。
· xFS:UC Berkeley参照当时高性能多处理器领域的设计思想开发了xFS文件系统,xFS克服了以往分布式文件系统只适用局域网,而不适用于广域网和大数据存储问题,提出广域网进行缓存较少网络流量设计思想,采用层次命名结构,减少Cache一致性状态和无效写回Cache一致性协议,从而减少了网络负载。
· 代表:SAN、NAS、GFS、HDFS、GPFS…
· 背景:到了二十世纪末,计算机技术和网络技术得到了飞速发展,磁盘存储成本不断降低,磁盘容量和数据总线带宽的增长速度无法满足应用需求,海量数据的存储逐渐成为互联网技术发展急需解决的问题,对于分布式存储系统技术的研究越来越成熟,基于光纤通道的存储区域网络(Storage Area Network)技术和网络附连存储(Network Attached Storage)技术得到了广泛应用。
· SAN:设计目标是通过将磁盘存储系统或者磁带机和服务器直接相连的方式提供一个易扩展、高可靠的存储环境,高可靠的光纤通道交换机和光纤通道网络协议保证各个设备间链接的可靠性和高效性,设备间的连接接口主要是采用FC或者SCSI,光纤通道交换机主要是为服务器和存储设备的链接提供一个称为“SAN fabric”的网状拓扑结构。
· NAS:通过基于TCP/IP协议的各种上层应用(NFS等)在各工作站和服务器之间进行文件访问,直接在工作站客户端和NAS文件共享设备之间建立连接,NAS隐藏了文件系统的底层实现,注重上层的文件服务实现,具有良好扩展性,网络阻塞,NAS性能受影响。
· GFS:Google为大规模分布式数据密集型应用设计的可扩展的分布式文件系统,Google将一万多台廉价PC机连接成一个大规模的Linux集群,它具有高性能,高可靠性,易扩展性,超大存储容量等优点。Google文件系统采用单Master多Chunk Server来实现系统间的交互,Master中主要保存命名空间到文件映射、文件到文件块的映射、文件块到Chunk Server的映射,每个文件块对应到3个Chunk Server。
· 代表:HBase、Cassadra、MongoDB、DynamoDB…
· HBase:列存储数据库,擅长以列为单位读取数据,面向列存储的数据库具有高扩展性,即使数据大量增加也不会降低相应的处理速度,特别是写入速度。
· MongoDB:文档型数据库它同键值(Key-Value)型的数据库类似,键值型数据库的升级版,允许嵌套键值,Value值是结构化数据,数据库可以理解Value的内容,提供复杂的查询,类似于RDBMS的查询条件。
· DynamoDB:Amazon 公司的一个分布式存储引擎,是一个经典的分布式Key-Value 存储系统,具备去中心化,高可用性,高扩展性的特点,达到这个目标在很多场景中牺牲了一致性,Dynamo在Amazon中得到了成功的应用,能够跨数据中心部署于上万个结点上提供服务,它的设计思想也被后续的许多分布式系统借鉴。
1.单机存储引擎:存储引擎是存储系统的发动机,决定了存储系统能够提供的功能和性能。存储系统提供功能:Create、Update、Read、Delete(CURD)。存储引擎类型有:
2.哈希存储引擎:基于哈希表结构的键值存储系统,数组+链表的方式实现,支持持Create、Update、Delete、随机Read,O(1)Read复杂度。
3.B树存储引擎:基于B Tree实现,支持单条记录的CURD,还支持顺序扫描、范围查找,RDBMS使用较多,例如:MySQL,InnoDB 聚簇索引,B+树。
4.LSM树存储引擎:Log Structured Merge Tree,对数据的修改增量保存在内存中,达到指定条件后(通常是数量和时间间隔),批量将更新操作持久到磁盘,读取数据时需要合并磁盘中的历史数据和内存中最近修改操作,LSM优势在于通过批量写入,规避了随机写入问题,提高写入性能,LSM劣势在于读取需要合并磁盘数据和内存数据。LSM通过Commit Log避免了内存数据丢失,首先将修改操作作写入到Commit Log中,保证操作数据的可靠性。 典型案例设计:LevelDB。
5.数据模型:数据模型是存储系统外壳,分类有:
6.事务与并发控制
7.数据恢复:操作日志
1、单机存储与多机存储:单机存储的原理在多机存储仍然可用,多级存储基于单机存储。
2、多机数据分布:区别于单机存储,数据分布在多个节点上,在多个节点之间需要实现负载均衡,数据分布方式:
3、复制:分布式存储多个副本,保证了高可靠和高可用,Commit Log。
4、故障检测:心跳机制、数据迁移、故障恢复。
1.FLP:FLP Impossibility(FLP不可能性)是分布式领域中一个非常著名的结果,1985年Fischer、Lynch and Patterson三位作者发表论文,并获取Dijkstra奖,在异步消息通信场景,即使只有一个进程失败,没有任何方法能够保证非失败进程达到一致性。
2.FLP系统模型基于以下几个假设:
3.FLP定理带给我们的启示:
1985年FLP证明了异步通信中不存在任何一致性的分布式算法(FLP Impossibility),人们就开始寻找分布式系统设计的各种因素,一致性算法既然不存在,如果能找到一些设计因素,适当取舍以最大限度满足实现系统需求成为当时的重要议题,出现了CAP定理。
1.CAP定理:2000年Berkerly的Eric Brewer教授提出了一个著名的CAP理论,CAP是一致性(Consistency)、可用性(Availability)、分区可容忍性(Tolerance of network Partition)的首字母缩写。在分布式环境下,三者不可能同时满足。
2. CAP设计:分布式存储系统需要能够自动容错,也就是说分区容忍性需要保证。如果保证一致性,需要强同步复制,主副本之间网络异常,写操作被阻塞,可用性无法保证。如果保证可用性,采取异步复制机制,保证了分布式存储系统的可用性,强一致性无法保证,设计时一致性和可用性需要折中权衡。金融行业中,不允许数据丢失,需要强一致性。
1、2PC协议:Two Phase Commit(2PC),用于实现分布式事物,有两类节点,协调者和事物参与者,每个节点都会记录Commit Log,保证数据可靠性,两阶段提交由两个阶段组成:
2、2PC协议与设计:2PC协议是阻塞式,事务参与者可能发生故障:设置超时时间,协调者可能发生故障:日志记录,备用协调者。
---------------------
原文:https://blog.csdn.net/hxl_1993/article/details/62929904