云计算——分布式存储.pptx
,云计算原理与实践Principles and Practice of Cloud Computing,Outline,5.1 分布式存储的基础5.2 文件存储5.3 从单机存储系统到分布式存储系统5.4 实践:分布式存储系统Ceph,Machine Learning,Domain expertise,Mathematics,Data engineering,5.1 分布式存储的基础,5.1.1 基本概念5.1.2 分布式存储分类5.1.3 分布式存储的发展历史,5.1.1 基本概念,分布式存储系统的定义:分布式存储系统是将为数众多的普通计算机或服务器通过网络进行连接,同时对外提供一个整体的存储服务。分布式存储系统包括以下几个特性:高性能可扩展低成本易用性分布式存储系统的技术挑战包括:数据和状态信息的持久化、数据的自动迁移、系统的自动容错、并发读写的数据的一致性等方面。,5.1.2 分布式存储分类,分布式存储面临的应用场景和数据需求都比较复杂,根据数据类型,可以将其分为非结构化数据、结构化数据、半结构化数据三类。正因为数据类型的多样性,不同的分布式存储系统适合处理不同类型的数据,因此可以将分布式存储系统分为四类:分布式文件系统分布式键值(Key-Value)系统分布式表系统分布式数据库,1.分布式文件系统,分布式文件系统存储三种类型的数据:Blob对象、定长块以及大文件。,图5.1 数据块与Blob对象、定长块、大文件之间的关系,2 分布式键值(Key-Value)系统,分布式键值系统用于存储关系简单的半结构化数据,它提供基于主键的CRUD(Create/Read/Update/Delete)功能,即根据主键创建、读取、更新或者删除一条键值记录。典型的系统有Amazon Dynamo。分布式键值系统是分布式表系统的一种简化,一般用作缓存,比如Memcache。从数据结构的角度看,分布式键值系统支持将数据分布到集群中的多个存储节点。一致性散列是分布式键值系统中常用的数据分布技术,由于在众多系统中被采用而变得非常有名。,3 分布式表系统,分布式表系统主要用于存储半结构化数据。与分布式键值系统相比,分布式表系统不仅仅支持简单的CRUD操作,而且支持扫描某个主键范围。分布式表系统以表格为单位组织数据,每个表格包括很多行,通过主键标识一行,支持根据主键的CRUD功能以及范围查找功能。典型的分布式表系统包括Google Bigtable、Microsoft Azure Table Storage、Amazon DynamoDB等。,4 分布式数据库,分布式数据库是从传统的基于单机的关系型数据库扩展而来,用于存储大规模的结构化数据。分布式数据库采用二维表格组织数据,提供经典的SQL关系查询语言,支持嵌套子查询、多表关联等复杂操作,并提供数据库事务以及并发控制。关系数据库是目前为止最为成熟的存储技术,功能丰富,有完善的商业关系数据库软件的支持。随着大数据时代的到来,为了解决关系数据库面临的可扩展性、高并发以及性能方面的问题,各种各样的非关系数据库不断涌现,这类被称为NoSQL的系统,可以理解为“Not Only SQL”的含义。,图5.2 分布式文件系统的发展,5.1.3 分布式存储的发展历史,120世纪80年代的代表:AFS、NFS、Coda(1)AFS:1983年CMU和IBM共同合作开发了Andrew文件系统(Andrew File System,AFS)(2)NFS:1985年,Sun公司基于UDP开发了网络共享文件系统(Network File System,NFS)(3)Coda:1987年,CMU在基于AFS的基础上开发了Coda文件系统,5.1.3 分布式存储的发展历史,220世纪90年代的代表:XFS、Tiger Shark、SFS,5.1.3 分布式存储的发展历史,XFS:加州大学伯克利分校(UC Berkeley)开发了XFS文件系统,克服了以往分布式文件系统只适用于局域网而不适用于广域网和大数据存储的问题,提出了广域网进行缓存较少网络流量设计思想,采用层次命名结构,减少Cache一致性状态和无效写回Cache一致性协议,从而减少了网络负载,在当时获得了一定的成功。,320世纪末的代表:(1)SAN(Storage Area Network)(2)NAS(Network Attached Storage)(3)GPFS(General Parallel File System)(4)GFS(Google File System)(5)HDFS(Hadoop Distributed File System),5.1.3 分布式存储的发展历史,(1)SAN(Storage Area Network),通过将磁盘存储系统和服务器直接相连的方式提供一个易扩展、高可靠的存储环境,高可靠的光纤通道交换机和光纤通道网络协议保证各个设备间链接的可靠性和高效性。设备间的连接接口主要是采用FC或者SCSI。,图5.3 SAN网络结构,(2)NAS(Network Attached Storage),通过基于TCP/IP的各种上层应用在各工作站和服务器之间进行文件访问,直接在工作站客户端和NAS文件共享设备之间建立连接,NAS隐藏了文件系统的底层实现,注重上层的文件服务实现,具有良好的扩展性,图5.4 NAS存储网络结构,(3)GPFS(General Parallel File System),GPFS是IBM公司开发的共享文件系统,起源于IBM SP系统上使用的虚拟共享磁盘技术。GPFS是一个并行的磁盘文件系统,它保证在资源组内的所有节点可以并行访问整个文件系统。GPFS允许客户共享文件,而这些文件可能分布在不同节点的不同硬盘上。它同时还提供了许多标准的UNIX文件系统接口,允许应用不需修改或者重新编辑就可以在其上运行。,(4)GFS(Google File System),图5.5 GFS架构图,(5)HDFS(Hadoop Distributed File System),图5.6 HDFS总体结构示意图,421世纪的代表:Cassandra、HBase、MongoDB、DynamoDB(1)Cassandra:是一套开源分布式NoSQL数据库系统,最初由Facebook开发,用于储存收件箱等简单格式数据,集GoogleBigTable的数据模型与Amazon Dynamo的完全分布式的架构于一身。(2)HBase:列存储数据库,擅长以列为单位读取数据,面向列存储的数据库具有高扩展性,即使数据大量增加也不会降低相应的处理速度,特别是写入速度。,5.1.3 分布式存储的发展历史,421世纪的代表:Cassandra、HBase、MongoDB、DynamoDB(3)MongoDB:文档型数据库同键值(Key-Value)型的数据库类似,是键值型数据库的升级版,允许嵌套键值,Value值是结构化数据,数据库可以理解Value的内容,提供复杂的查询,类似于RDBMS的查询条件。(4)DynamoDB:Amazon公司的一个分布式存储引擎,是一个经典的分布式Key-Value存储系统,具备去中心化、高可用性、高扩展性的特点。,5.1.3 分布式存储的发展历史,5.2 文件存储,5.2.1 单机文件系统5.2.2 网络文件系统5.2.3 并行文件系统5.2.4 分布式文件系统5.2.5 高通量文件系统,5.2.1 单机文件系统,现代文件系统的起源要追溯到分时操作系统时期。1965年,在Multics操作系统中首次提出使用树型结构来组织文件、目录以及访问控制的思想。这些思想被后来的UNIX文件系统(1973年)所借鉴。从结构上看,它包括四个模块:引导块、超级块、索引节点和数据块。为解决UNIX文件系统I/O性能低的问题,先后出现了1984年的快速文件系统(Fast File System,FFS)和1992年的日志结构文件系统(Log-Structured File,LFS)。20世纪90年代至今,出现了很多单机文件系统。包括SGI公司于1994年发布的XFS,以及Sun公司于2004年发布的ZFS。,5.2.2 网络文件系统,NFS(Network File System,网络文件系统)由Sun公司在1984年开发,被认为是第一个广泛应用的现代网络文件系统。NFS的设计目标是提供跨平台的文件共享系统。由于NFS的实现和设计思想都相对简单,该协议很快被纳入到RFC标准,并开始大量应用。然而,NFS单一服务器的结构也决定了它的扩展性有限。AFS(Andrew File System)是美国卡耐基梅隆大学1982年开发的分布式文件系统。其设计目标是支持500010000个节点的集群,扩展性是首要考虑的因素。与NFS等系统不同的是,AFS中有多个服务器,整个命名空间被静态地划分到各个服务器上,因此,AFS具有更好的扩展性。,5.2.3 并行文件系统,早期的并行文件系统有BFS(Bridge File System)和CFS(Concurrent File System)等。它们运行在MPP(Massively Parallel Processing,MPP)结构的超级计算机上。20世纪90年代中期,开源的Linux操作系统逐渐成熟并得到广泛使用,为了能在越来越多的Linux集群上运行,出现了以PVFS和Lustr为代表的Linux集群上的并行文件系统。它们吸收了MPP并行文件系统的很多思想,包括采用一个专门的元数据服务器来维护和管理文件系统的命名空间,以及将文件数据条带化并分散存储在所有的存储服务器上等。,5.2.4 分布式文件系统,20世纪90年代后期,随着互联网的发展,出现了搜索引擎这样的海量文本数据检索工具。搜索引擎需要高吞吐率、低成本、高可靠的系统,而非高峰值处理性能的系统。于是产生了以谷歌的Google File System(GFS)、MapReduce 为代表的新型数据处理架构。GFS的底层平台是大规模(数千台到数万台)的、廉价的、可靠性较低的PC集群,存储设备是集群中每个节点上的多块IDE磁盘谷歌架构被互联网企业广泛采用,现在流行的Hadoop就是GFS和MapReduce的一种开源实现,被很多企业采用。,5.2.5 高通量文件系统,高通量文件系统是为大型数据中心设计的文件系统,它将数据中心中大量低成本的存储资源有效地组织起来,服务于上层多种应用的数据存储需求和数据访问需求。随着云计算技术的发展,数据中心的数据存储需求逐渐成为数据存储技术和文件系统发展的主要驱动力,高通量文件系统将成为一种重要的文件系统。大型数据中心在数据存储和数据访问方面有着与先前的应用非常不同的需求特征,主要包括:数据量庞大、访问的并发度高、文件数量巨大、数据访问语义和访问接口不同于传统的文件系统、数据共享与数据安全的保障越来越重要等。,表5.1 文件系统的发展脉络,5.3 从单机存储系统到分布式存储系统,5.3.1 单机存储系统5.3.2 分布式存储系统,5.3.1 单机存储系统,1硬件基础简单来说,单机存储就是散列表、B 树等数据结构在机械硬盘、SSD 等持久化介质上的实现。单机存储系统的理论来源于关系数据库,是单机存储引擎的封装,对外提供文件、键值、表或者关系模型。由摩尔定律可知,相同性能的计算机等 IT产品,每18个月价钱会下降一半。而计算机的硬件体系架构却保持相对稳定,一个重要原因就是希望最大限度地发挥底层硬件的价值。计算机架构中常见硬件的大致性能参数如表5.2所示。,表5.2 常用硬件性能参数,5.3.1 单机存储系统,2存储引擎存储引擎直接决定了存储系统能够提供的性能和功能,其基本功能包括:增、删、改、查,而读取操作又分为随机读取和顺序扫描两种。散列存储引擎是散列表的持久化实现,支持增、删、改,以及随机读取操作,但不支持顺序扫描,对应的存储系统为键值(Key-Value)存储系统。B树(B-Tree)存储引擎是树的持久化实现,不仅支持单条记录的增、删、读、改操作,还支持顺序扫描,对应的存储系统是关系数据库。LSM树(Log-Structured Merge Tree)存储引擎和B树存储引擎一样,支持增、删、改、随机读取以及顺序扫描,它通过批量转储技术规避了磁盘随机写入问题,广泛应用于互联网的后台存储系统,例如 Google Bigtable、Google LevelDB 以及Cassandra系统等。,5.3.1 单机存储系统,3数据模型如果说存储引擎相当于存储系统的发动机,那么,数据模型就是存储系统的外壳。存储系统的数据模型主要包括三类:文件、关系以及键值模型。传统的文件系统和关系数据库系统分别采用文件和关系模型。关系模型描述能力强,生态好,是目前存储系统的业界标准。而新产生的键值模型、关系弱化的表格模型等,因为其可扩展性、高并发以及性能上的优势,开始在越来越多的大数据应用场景中发挥重要作用。,5.3.2 分布式存储系统,1基本概念(1)异常(2)超时(3)一致性(4)衡量指标性能可用性一致性可扩展性,5.3.2 分布式存储系统,2性能分析性能分析是用来判断设计方案是否存在瓶颈点,权衡多种设计方案的一种手段,也可作为后续性能优化的依据。性能分析与性能优化是相对的,系统设计之初通过性能分析确定设计目标,防止出现重大的设计失误,等到系统试运行后,需要通过性能优化方法找出系统中的瓶颈点并逐步消除,使系统达到设计之初确定的设计目标。设计之初首先分析整体架构,接着重点分析可能成为瓶颈的单机模块。系统中的资源(CPU、内存、磁盘、网络)是有限的,性能分析就是需要找出可能出现的资源瓶颈。,5.3.2 分布式存储系统,3数据分布分布式系统能够将数据分布到多个节点,并在多个节点之间实现负载均衡。其方式主要有两种:散列分布,如一致性散列,代表系统为Amazon的Dynamo系统;顺序分布,即每张表格上的数据按照主键整体有序,代表系统为Google的Bigtable。将数据分散到多台机器后,需要尽量保证多台机器之间的负载是比较均衡的。分布式存储系统需要能够自动识别负载高的节点,当某台机器的负载较高时,将它服务的部分数据迁移到其他机器,实现自动负载均衡。,5.3.2 分布式存储系统,4复制为了保证分布式存储系统的高可靠和高可用,数据在系统中一般存储多个副本。当某个副本所在的存储节点出现故障时,分布式存储系统能够自动将服务切换到其他的副本,从而实现自动容错。分布式存储系统通过复制协议将数据同步到多个存储节点,并确保多个副本之间的数据一致性。同一份数据的多个副本中往往有一个副本为主副本(Primary),其他副本为备用副本(Backup),由主副本将数据复制到备用副本。当主副本出现故障时,分布式存储系统能够将服务自动切换到某个备用副本,实现自动容错。,5.3.2 分布式存储系统,5容错分布式存储系统首先需要能够检测到机器故障,然后需要将服务复制或者迁移到集群中的其他正常节点。,表5.3 Google某数据中心第一年运行故障,5.3.2 分布式存储系统,6可扩展性可扩展性的实现手段很多,如通过增加副本个数或者缓存来提高读取能力,将数据分片使每个分片可以被分配到不同的工作节点以实现分布式处理,把数据复制到多个数据中心等。同时,衡量分布式存储系统的可扩展性应该综合考虑节点故障后的恢复时间、扩容的自动化程度、扩容的灵活性等。,7分布式协议(1)两阶段提交协议(Two-Phase Commit,2PC):由阶段1请求阶段(Prepare Phase)和阶段2提交阶段(Commit Phase)组成,经常用来实现分布式事务,以保证跨多个节点操作的原子性。(2)Paxos协议:用于解决多个节点之间的一致性问题。Paxos协议考虑到主节点可能出现故障,系统需要选举出新的主节点的问题,该协议可以保证多个节点之间操作日志的一致性,并在这些节点上构建高可用的全局服务,例如分布式锁服务、全局命名和配置服务等。,5.3.2 分布式存储的发展历史,5.4 实践:分布式存储系统Ceph,5.4.1 概述5.4.2 设计思想5.4.3 整体架构5.4.4 集群部署,Ceph最初是一项关于存储系统的研究项目,由塞奇维尔(Sage Weil)在加州大学圣克鲁兹分校(UCSC)开发。Ceph是一个统一的、分布式的存储系统,具有出众的性能、可靠性和可扩展性。其中,“统一”和“分布式”是理解Ceph的设计思想的出发点。统一:意味着Ceph可以以一套存储系统同时提供“对象存储”“块存储”和“文件系统”三种功能,以满足不同应用的需求。分布式:意味着无中心结构和系统规模的无限(至少理论上没有限制)扩展。在实践当中,Ceph可以被部署于成千上万台服务器上。,5.4.1 概述,5.4.2 设计思想,Ceph最初设计的目标应用场景就是大规模的、分布式的存储系统,是指至少能够承载PB量级的数据,并且由成千上万的存储节点组成。在Ceph的设计思想中,对于一个大规模的存储系统,主要考虑了三个场景变化特征:存储系统的规模变化、存储系统中的设备变化以及存储系统中的数据变化。Ceph的设计思路基本上可以概括为以下两点。充分发挥存储设备自身的计算能力去除所有的中心点,5.4.3 整体架构,图5.7 Ceph存储系统整体架构,5.4.4 集群部署,1环境准备2安装Ceph部署工具(仅主控节点)3Ceph节点配置Ceph安装添加OSD节点,图5.8 Ceph存储集群准备,表5.4 主机信息,分布式存储的基础文件存储从单机存储系统到分布式存储系统实践:分布式存储系统Ceph,小结,课内复习,1分布式存储的定义是什么?2分布式存储有哪几种类型?3SAN和NAS的区别是什么?4比较不同文件系统的特点。,课外思考,1是否存在一种文件系统能够应对所有类型的文件存储?为什么?2Paxos的原理和机制是什么?,动手实践1,Ceph从2004年提交了第一行代码,至今为止已经十多年了。这个起源于Sage博士论文,最早致力于开发下一代高性能分布式文件系统的项目,现在也成为了开源社区众人皆知的明星项目。随着云计算的发展,Ceph乘上了OpenStack的春风,受到各大厂商的欢迎,成为IaaS三大组件计算、网络、存储之一。任务:通过Ceph的官方网站下载并安装使用最新的软件,进一步了解Ceph的原理。任务:理解并实践CRUSH(Controlled Replication Under Scalable Hashing)算法。,动手实践2,Hadoop分布式文件系统(HDFS)是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS是Apache Hadoop Core项目的一部分。任务:通过Hadoop的官方网站下载并安装使用最新的Hadoop软件,进一步了解HDFS的工作原理。,