云计算论文云计算的集群与分布式

上传人:仙*** 文档编号:47068976 上传时间:2021-12-16 格式:DOC 页数:30 大小:189.51KB
返回 下载 相关 举报
云计算论文云计算的集群与分布式_第1页
第1页 / 共30页
云计算论文云计算的集群与分布式_第2页
第2页 / 共30页
云计算论文云计算的集群与分布式_第3页
第3页 / 共30页
点击查看更多>>
资源描述
云计算的集群与分布式摘要尽管我们已经有了高速的个人计算机,尽管我们有了储存大量信息的网络,但是随着社会的发展我们对其的要求也越来越高,为了满足越来越高的需求水平并降低升级的成本,一个新的观念出现了,并为IT业的发展指明了方向,这就是“云计算”。无疑,近年来,云计算已经成为最热门的技术话题之一,云计算技术已经成为了继个人计算机、互联网之后出现的第三次技术革命浪潮。国家“十二五”规划纲要和国务院关于培育和发展战略性新兴产业的决定均把“云计算”作为新一代信息技术的重要组成部分。由此可见“云计算”重要性和发展云计算的必要性。本文将从云计算组成的角度来粗浅的介绍云计算的概念。关键词 集群技术与虚拟化,并行计算技术,分布式文件系统The Cluster andDistributedof Cloud ComputingAbstract Although we have a high-speed personal computer,although we have a network that can store a large amount of information network, but along with the social development,we requirements of its increasingly high ,in order to meet the increasingly high demand and reduce the cost of upgrading, a new concept emerged, and the development of IT industry specified the direction, this is the cloud computing. Undoubtedly, in recent years, cloud computing has become one of the hottest topics in technology, cloud computing has become the following personal computers,the Internet of the third technology revolution. The national The Plan of Twelfth Five Year to cloud computing is an important part of a new generation of information technology. We can see the importance of cloud computing and the necessity for the development of cloud computing. This paper will describe the concept of cloud computing from the view of the component of cloud computing .KeywordsCluster and Virtualization technology Parallel computing technology Distributed file system 不要删除行尾的分节符,此行不会被打印目录摘要IAbstractII第1章 绪论31.1 课题背景31.2 什么是云计算31.3 云计算的基本技术3第2章 集群技术与虚拟化42.1 集群技术42.1.1 高可用性集群42.1.2 负载均衡性集群52.2 虚拟化技术72.2.1 CPU的虚拟化72.2.2 内存虚拟化102.2.3 I/O虚拟化112.3 虚拟化集群122.3.1 虚拟化集群总体框架122.3.2 vCenter132.3.3 vServer142.4 本章小结15第3章 分布式并行计算技术163.1 分布式并行计算概述163.2 OpenMP173.3 MPI183.4 Erlang193.5 本章小结21第4章 分布式文件系统224.1 文件系统224.2 体系结构224.2.1 数据访问方式234.2.2 系统服务器的结构234.2.3 分布式文件系统关键技术24结论27致谢29参考文献30第1章 绪论1.1 课题背景技术是云计算发展的基础。首先是云计算自身核心技术的发展,如:硬件技术,虚拟化技术,并行编程模型、海量数据分布存储技术、海量数据管理技术、云平台管理技术;其次是云计算赖以存在的移动互联网技术的发展,如:高速、大容量的网络,无处不在的接入,灵活多样的终端,集约化的数据中心,WEB技术。可以将云计算理解为八个字按需即用、随需应变,使之实现的各项技术已基本成熟。1.2 什么是云计算云计算是通过使计算分布在大量的分布式计算机上,而非本地计算机或远程服务器中,企业数据中心的运行将与互联网更相似。这使得企业能够将资源切换到需要的应用上,根据需求访问计算机和存储系统。按照云计算的服务层次可以把云计算服务分为基础设施即服务(IaaS),平台即服务(PaaS)和软件即服务(SaaS)。IaaS:基础设施即服务IaaS(Infrastructure-as-a- Service):基础设施即服务。消费者通过Internet可以从完善的计算机基础设施获得服务。PaaS:平台即服务PaaS(Platform-as-a- Service):平台即服务。PaaS实际上是指将软件研发的平台作为一种服务,以SaaS的模式提交给用户。因此,PaaS也是SaaS模式的一种应用。但是,PaaS的出现可以加快SaaS的发展,尤其是加快SaaS应用的开发速度。SaaS:软件即服务SaaS(Software-as-a- Service):软件即服务。它是一种通过Internet提供软件的模式,用户无需购买软件,而是向提供商租用基于Web的软件,来管理企业经营活动。1.3 云计算的基本技术高可靠的集群技术与虚拟化,并行计算技术,分布式文件系统第2章 集群技术与虚拟化2.1 集群技术集群技术就是将多台服务器用集群软件连接在一起,组成一个高度透明的大型服务器群的计算机系统,作为一个整体为客户端提供服务,客户 端能共享网络上的所有资源,如数据或应用软件等,同时客户端的用户并不关心其应用Server运行在那台服务器上,只关心其应用Server是否能连续工作。当集群系统内某一台服务器出现故障时,其备援服务器便立即接管该故障服务器的应用服务,继续为前端的用户提供服务。从客户端看来,集群中的所有服务器是一 个系统,就像一台大型的计算机系统,其上运行着客户端需要的应用服务。集群系统能够保证用户的业务是连续的并且具有持续可用的特性,即具有7x24 的可用性,从而将系统停止运行的时间降到了最低,提供了高可靠性的保障。从客户端看来,集群中所有的服务器是一个整体,就像一台大型的计算机,为了完成一些普通计算机或服务器难以胜任的计算密集型应用,集群可以可以集中几十台甚至成百上千台计算机服务器的计算能力来提供更高的计算能力。用户若想扩展系统能力性能,往往不得不购买更高性能的服务器并停止系统运行来更新设备,但是采用集群技术的话,只需将新的服务器加入集群中,并不需要停机和极其昂贵的服务器,通过大量性价比高的服务器的叠加和集合就可以做的更出色,大大提高了系统的可扩展性并大大降低了成本。集群技术在提高性能、增强可靠性的同时提供了更好的可扩展能力和更低的成本。2.1.1 高可用性集群在一年之内可达9999可用性时,这样的集群系统我们称为高可用性的集群系统。可用性:当用户需要数据和服务时,计算机能够根据请求完成响应则定义为可用性。可用性是以百分比形式表示的一种系统正常工作的时间。高可用性系统是由集群软件监控、具有多台服务器互相冗余的系统。此系统通过集群软件提供的故障监测和故障处理能力,可提供业务连续性的能力。高可用性系统的主要目的是将计划内及计划外宕机时间减少到最少;其次是减少恢复一个失败系统的时间,即应在最短的时间内恢复系统。的运行。高可用性即确保计算机系统的运行时间达到9999。容错系统: 是由一台计算机系统采用专用的、昂贵的和有复制功能的设备组成的系统。如计算机内部采用特殊的双主机板、CPU锁步运行、冗余磁盘、专有的操作系统等。它是为防止系统出错、获得较高可用性的一种方法。容错性是整个操作系统统筹设计的一个功能,系统完全自发、自动响应系统故障,并提供不问断服务。 高可用性的集群系统主要包括以下几方面硬件组件: (1) 服务器组:在高可用性的集群系统中每个节点的服务器必须有自己的 CPU、内存和磁盘。每个服务器节点的磁盘是用于安装操作系统和集群软件程序。 (2) 对外提供服务的网路:集群系统中的服务器一般采用TCPIP网络协议 与客户端相连。每个服务器上都有自己的应用服务,客户端必须通过集群服务器 中的网络通路来得到自己的服务。(3) 心跳信号通路:在高可用性的集群系统中每个节点必须有心跳接口,用于服务器节点之间互相监视和通信,以取得备援服务器的工作状态。 (4) 数据共享磁盘:在高可用性的集群系统中由于运行的都是关键业务,故 使用的存储服务器都应是企业级的存储服务器,这些存储服务器应具有先进技术 来保障其数据安全。一般数据放在企业级的存储服务器的共享磁盘的空间中,它 是各服务器节点之间维持数据致性的桥梁,各服务器节点在集群软件的控制下 不会同时访问共享磁盘。2.1.2 负载均衡性集群当前,无论在局域网还是在广域网上,业务量的发展都超出了过去最乐观的估计,即使按照当时最优配置建设的网络,也很快会感到吃不消。尤其是各个网络的核心部分,其数据流量和计算强度之大,使得单一设备根本无法承担,而如何在完成同样功能的多个设备之间实现合理的业务量分配,使之不致于出现一台设备过忙、而别的设备却未充分发挥处理能力的情况,负载均衡集群机制也因此应运而生。负载均衡建立在现有网络结构之上,它提供了一种廉价有效的方法扩展服务器带宽和增加吞吐量,加强网络数据处理能力,提高网络的灵活性和可用性。它为用户提供更好的访问质量;提高服务器响应速度;提高服务器及其他资源的利用效率避避,免了网络关键部位出现单点失效。负载均衡又可以分为静态负载均衡和动态负载均衡。静态负载均衡:它只是把有可能拥塞于一个服务器的负载交给多个服务器分担。就像轮流值日制度,把任务分给大家来完成,以免让一台服务器超负荷运算。不过,这种意义上的均衡一般是静态的,也就是事先确定的“轮值”策略。动态负载均衡:它是通过一些工具实时地分析数据包,掌握网络中的数据流量状况,把任务合理分配出去。结构上分为本地负载均衡和地域负载均衡(全局负载均衡),前一种是指对本地的服务器集群做负载均衡,后 一种是指对分别放置在不同的地理位置、在不同的网络及服务器群集之间作负载均衡。 在现有网络结构之上,负载均衡提供了一种廉价有效的方法扩展服务器带宽和增加吞吐量,加强网络数据处理能力,提高网络的灵活性和可用性。它主要解决网络拥塞问题,服务就近提供,实现地理位置无关性;为用户提供更好的访问质量,提高服务器响应速度,提高服务器及其他资源的利用效率,避免了网络关键部位出现单点失效。负载均衡集群通常采用专门的负载均衡路,负载均衡器通过虚拟IP 地址方法,解决了轮流排程所面临的许多问题。使用了负载均衡器的集群系统,在外部看来,像是具有一个 IP 地址的单一服务器一样,当然,这个 IP 地址是虚拟的,它映射了集群中的每一台机器的地址。所以,在某种程度上,负载均衡器是将整个集群的IP 地址报漏给外部网络。当请求到达负载均衡器时,它会重写该请求的头文件,并将之指定到集群中的机器上。如果某台机器被从集群中移除了,请求不会别发往已经不存在的服务器上,因为所有的机器表面上都具有同一个 IP 地址,即使集群中的某个节点被移除了,该地址也不会发生变化。而且, internet 上缓存的 DNS 条目也不再是问题了。当返回一个应答时,客户端看到的只是从负载均衡器上所返回的结果。也就是说,客户端操作的对象是负载均衡器,对于其更后端的操作,对客户端来讲,是完全透明的。负载均衡路由设备由于采用了特殊的硬件结构及专门开发的配置软件,通常易于配置及管理,性能较好,但是其价格较高负载均衡器的优点:(1) 通过故障恢复机制获得高可靠性。某一故障发生在当集群中某个节点不能处理请求,需将请求重新导向到其他节点时,负载均衡器会将之发送到集群中其他的节点上。(2) 便于统计计量。 既然所有的请求都经过负载均衡器,那么系统就可以确定活动的数量,在任何实例访问中的活动的数目,应答的次数,高峰负载次数,以及在高峰期和低谷期的会话的数目,还有其他更多的。所有的这些统计信息都可以被很好的用来调整整个系统的性能。负载均衡器的缺点在于费用、复杂性以及单点失败的。由于所有的请求均是通过硬件负载均衡器来传递,因此,负载均衡器上的任何故障都将导致整个站点的崩溃而且负载均衡器将会成为整个系统性能提升的瓶颈。2.2 虚拟化技术随着近年集群、网格甚至云计算的广泛部署,虚拟化技术在商业应用上的优势日益体现,不仅降低了 IT 成本,而且还增强了系统安全性和可靠性,虚拟化的概念也逐渐深入到人们日常的工作与生活中。虚拟机管理器(VMM)是整个虚拟机系统的核心,它承担了资源的调度、分配和管理、保证多个虚拟机能够相互隔离的同时运行多个客户操作系统。虚拟机管理器运行在硬件平台之上,操作系统之下,不同的系统需求有不同的实现方式。 虚拟机管理器主要包括对CPU的虚拟化,对内存的虚拟化,对I/O的虚拟化。2.2.1 CPU的虚拟化CPU的虚拟化是为每个虚拟机提供一个或多个虚拟CPU(virtual CPU,VCPU)。多个虚拟CPU分时复用物理CPU,任意时刻一个CPU只能被一个虚拟CPU使用。VMM必须为各个虚拟CPU合理分配时间片并维护所有虚拟CPU 的状态,当一个虚拟CPU的时间片用完需要切换时,要保存当前虚拟CPU状态,将被调度的虚拟CPU的状态载入物理CPU。因此VMM对于CPU虚拟化需要解决一下两个问题:(1)虚拟CPU的正确运行。(2)虚拟CPU的调度。虚拟CPU正确运行的关键是保证虚拟机的指令正确执行并且保证各个虚拟机之间不互相影响。现有的实现技术包括模拟执行和监控执行。模拟执行是指由VMM模拟所有指令的运行效果,包括解释执行和二进制代码翻译。通常用在物理机器指令集与虚拟机指令集不同的情况下,模拟执行方式效率较低。监控执行是指虚拟机的绝大部分指令都能在物理主机上直接执行,少量可能影响虚拟机运行或影响其他虚拟机状态的指令,必须由VMM监控并模拟其执行效果,监控执行方式效率较高,在理想状态下,虚拟机甚至可以达到接近物理主机的速度。虚拟CPU的调度是指由VMM决定当前哪一个虚拟CPU实际在物理CPU上运行。虚拟CPU的调度除了保证虚拟机之间的性能隔离性,还应该保证虚拟CPU 的性能,保证调度的公平性:要考虑调度算法既能够充分利用物理CPU资源,又能实现精确的CPU资源分配;要根据虚拟机上运行的应用服务的特点以及虚拟机之间的依赖关系合理调度虚拟CPU。对运行虚拟机的环境来说,有如下调度需求:充分利用CPU资源:为了减小虚拟化的性能开销,使虚拟机尽可能接近物理主机的性能,调度算法需要保证物理CPU资源能充分利用,不浪费任何处理器周期。因此,通常采用连续工作型调度算法。 性能隔离:VCPU的调度必须保证一个VCPU的运行不会影响其他VCPU的性能。考虑虚拟机之间的不对等:目前虚拟机常见的应用是服务器整合,可以把若干应用服务器合并在一台物理主机上分别作为不同的虚拟机同时运行。这些虚拟机可能有不同的应用特点, 例如,交互批处理,IO密集计算密集等,VCPU的调度策略必须考虑这些虚拟机之间的不对等。常用的VCPU的调度算法有:BVT算法,sEDF算法,credit算法。2.2.1.1 BVT算法 BVT(Borrowed VirtualTime)算法:BVT是一种公平性优先的调度算法。该算法将时间分为实际时间和虚拟时间:真实时间为硬件计时器记录的时间;虚拟时间为对真实时间经过某种规则计算后得到的时间值。该算法用虚拟时间来监控进程的执行时间,每次总是调度具有最早的有效虚拟时间的VCPU。这种调度算法允许这些操作系统“借”一些时间片,就是说:在一定范围内将未来分配给它运行的时间片先“借”过来用一段时间。这种“借”过来的虚拟时间片只能是当前真实的时间片中的某个虚拟时间片,不能借下一个真实时间片中的虚拟时问片。在系统初始化时,每个VCPU将分配一个权值来代表该VCPU能获得的处理器份额。VCPU根据其权值来实现处理器的公平共享。系统用实际虚拟时间和有效虚拟时间来记录VCPU运行状态。其计算方式如下:每一个VCPU维护一组状态:,其中:Et表示它某时刻t的EVT; At表示它实际的virtual time;Wt表示它可以借的virtual time; warpBackt表示是否允许借virtual time。 当选择下一个要运行的VCPU时,选择Et最小的VCPU,Et按照下式计算:Et=At-(warpBackt?Wt:0)若是延迟敏感的VCPU,warpBackt是1,需要从实际的At减去一个Wt值,从而能够获得较小的Et,使得能较早执行。BVT的优缺点:BVT调度算法的优点在于可以将物理时间片公平、均匀地分配两次被调度的时间间隔不会超过一个真实的时间片;能够满足I/O密集型和实时应用的低时延要求,能较好地调度某些实时性要求比较高的操作系统;在单CPU和多CPU环境下的调度开销都比较小。BVT调度算法的缺点:首先,每当当前虚拟机被加载运行时,它将获得整个CPU。用户不能把某个将某个虚拟机对CPU的使用限制在某个比例以下。其次,每个虚拟机只能借用分给它的时间片部分,而不会剥夺其他虚拟机的时间片。即当确定了各个虚拟机的时间片分配比例后,这个比例在下次分配之前不会改变。2.2.1.2 sEDF算法简单最小时限调度sEDF(simple Earliest Deadline First) 源于EDF(Earliest Deadline First)算法是一种动态调度算法,用于实时操作系统中。他将所有任务放在优先级队列中,当发生调度事件时 (如任务结束、新任务加入等),从队列中找出时限最短的任务并调度运行。sEDF是一种最小时限调度算法,它为每个VCPU设置一个三元组(s,p,x),其中s,p指的是在p毫秒内,虚拟机至少运行s毫秒,而x指的是如果在p时间片内,还有空余时间的话,是否允许该VCPU占用这些空余的时间片;而每个VCPU都有一个“最迟调度时间”(例如,0-100ms这个时间片内,若VCPU至少运行30ms那么它的最迟运行时间是70ms),sEDF用一个队列管理所有当前周期内还有可运行时间的VCPU,这些VCPU按照时限递增排列;用一个等待队列管理当前周期的运行时间已用完的VCPU,这些VCPU按照下一周期的开始时间递增排列。每次调度时,从可运行队列头取得可以运行的VCPU。如果虚拟机 A还在运行,虚拟机 B的调度时间片已经到来,那么sEDF将选用虚拟机B进行调度。sEDF的优缺点:sEDF调度算法是根据任务满足截止期限的紧迫性,来修改任务的优先级,以保证最紧迫的任务能够及时完成。当系统的负载相对较低时,这种算法非常有效;但是当系统负载极端沉重时,这就会使大量的任务发生时间错误,因此很可能使一些进程来不及处理而夭折。在sEDF算法中,一旦VCPU的调度参数被初始化后,就不能根据该VCPU的运行状况进行修改。 sEDF算法同时支持连续工作和断续工作模式,在断续工作模式下可以精确限定某个虚拟机使用的CPU资源比例,即使没有其他虚拟机运行,该虚拟机也只能使用一定的CPU资源。sEDF并不支持全局(多个CPU情况下)的负载均衡。例如存在如下分配:分配CPU1: VCPU-1- 80% CPU,分配CPU2: VCPU-2- 80% CPU,如果 此时有VCPU3,需要30% CPU 空间,那么VCPU3将无法被分配和加载。即使两个CPU的剩余部分相加起来足够VCPU3的使用,但是由于每个CPU的剩余部分都不足,VCPU3只能等待。2.2.1.3 credit基于额度的调度算法 每个CPU管理一个本地可运行的VCPU队列,该队列根据VCPU的优先级排序,每个VCPU的优先级可能是over或者under,表示该VCPU当前是否已经透支了它应该分配到的CPU资源。当一个VCPU被放入一个运行队列时,将其插在相同优先级的VCPU后面。 一个VCPU运行时,将消耗它的CPU额度。每隔一段时间,由一个结算线程重新计算每个VCPU消耗了或者获得了多少额度。当额度为负时,则将优先级改为over;直到一段时间以后,额度又积累为整数,则优先级变为under, 每结算一次,则运行队列要重排一次。当一个VCPU的时间片用完或被阻塞时,排在CPU的运行队列头的VCPU 将被调度运行。若此时该CPU的运行队列中没有优先级为under的VCPU,则将从其它CPU的运行队列中寻找一个under的VCPU,也就是说,当一个CPU空闲时,将运行等待其它CPU的VCPU。这一策略保证了虚拟机共享整个物理主机的资源,也保证了在整个物理主机环境内所有CPU的负载均衡,也保证了对系统资源的充分利用:当系统中有可运行的VCPU时,不会有任何一个CPU空闲。 2.2.2 内存虚拟化 内存虚拟化是VMM的重要功能之一。VMM通常采用分块共享的思想来虚拟计算机的物理内存。也就是说,VMM需要将机器的内存分配给各个虚拟机,并维护机器内存和虚拟机所见到的“物理内存的映射关系,使得这些内存在虚拟机看来是一段从地址0开始的、连续的物理地址空间。现代计算机通常都具备内存分页保护机制,这给VMM进行内存虚拟化提供了必要的硬件支持,因为VMM能够以页面为单位建立虚拟地址到机器地址的映射关系,并利用页面权限设置实现不同虚拟机间内存的隔离和保护。但是,由于客户操作系统本身也会进行叶式内存管理,虚拟机与传统计算机相比,其内存系统多了一种地址,共包括以下3种地址: (1)机器地址(machine address) 指真实硬件的机器地址,即地址总线上应该出现的地址信号。 (2)物理地址(physical address) 指经过VMM抽象的、虚拟机所看到的伪物理地址。 (3)虚拟地址(virtual address) 指虚拟机提供给其应用程序使用的线性地址空间。 显然,VMM的内存模块负责完成物理地址到机器地址的映射,将这个映射记为f;虚拟机的内存管理模块要完成虚拟地址到物理地址的映射,将这个映射记为g,则虚拟地址、物理地址和真实地址之间的关系如图2-1所示。图2-1虚拟地址、物理地址、真实地址的关系机器地址、物理地址和虚拟地址在上图中,虚拟机会把虚拟地址映射到物理地址,而VMM再进一步把物理地址映射到机器地址。在两个不同的虚拟机中的进程,分别有一个页表(page table)进行地址转换。页表将进程的虚拟地址转换为物理地址。为了将物理地址转为最终使用的机器地址,虚拟机管理器维护着从物理地址到机器地址的真正的页表。如图所示。为了使虚拟机系统具有更好的伸缩性和可扩展性,在充分保证虚拟机访问内存的性能的前提下,提出了理想的VMM应该提供以下一些内存管理功能:(1) 按需取页只有当虚拟机真正需要的时候,VMM才将物理内存分配给它,而不是简单地将固定大小的内存空间划分给虚拟机。按需取页能够提高内存资源的利用率。 (2) 虚拟存储 VMM能够利用交换(swap)等技术,给虚拟机提供超过实际机器内存大小的内存空间。虚拟机上的操作系统能够像运行在裸机上一样,透明地使用VMM 提供的整个“物理内存。 (3) 内存共享 VMM应该允许虚拟机之间只读地共享完全相同的内存区域,从而缓解大量虚拟机并发运行时的内存资源紧缺。实现内存共享的重要基础是内存写时复制机制(copy On write)。2.2.3 I/O虚拟化I/O虚拟化往往是VMM设计最复杂的部分。它涉及中断的捕获和分发、I/O地址空间的隔离和转换、大量I/O数据的传递、DMA页面的保护等。I/O的效率对于系统的成败更加至关重要。实现I/O虚拟最简单的方法是:将一台物理主机作为特殊的I/O处理机,它连接所有I/O设备,其它任何接点需要进行I/O操作时都要先与该主机联系,由它完成I/O操作,再将操作的结果用虚拟中断的方法通知请求接点。这种设计的优点在于实现简单、易于维护,但是其缺点也是显而易见的,即瓶颈问题和单点故障问题。为了提高整个系统的I/O能力,人们当然希望每个接点都具有I/O吞 吐能力:它对于上层的操作系统仍然表现为一个单一的I/O设备,而I/O请求会 被分流到各个不同的结点并行处理,从而大大提高I/O吞吐量。 对于网络设备,可以通过路由技术实现上述功能。而对于存储设备,应该在 实现网络I/O高效分流的基础上,充分利用现在已近非常成熟的分布式存储系统, 结合网络文件系统来实现。由于I/O虚拟化技术目前仍然不够成熟,即使在很多 传统的系统级虚拟化系统中,其效率仍然比较低下。因此,关于多级I/O虚拟化 技术仍然存在广阔的可探索空间。2.3 虚拟化集群在集群中由一台vCenter主机可以管理多台的vServer主机,而在这些vServer主机上可以运行多台的虚拟机,这些虚拟机可以组成虚拟机池。vCenter通过对虚拟机池的管理间接地实现对集群中物理资源的管理。其中vCenter的重要功能是保证虚拟化的集群中高可用性和负载均衡性的实现。在物理服务器上创建出的虚拟机可以组成虚拟机池,对于多虚拟机来说,一个非常重要的方面是减少用户对动态的和复杂的物理设备的管理 和维护,通过软件和工具实现管理任务。通常将应用程序部署到服务器内部运行的多个虚拟机中。通过一个一致的方式管理运行于大量物理结点之上的虚拟机系统,以便能够形成一个基于服务器合并技术的高性能虚拟计算环境以及高效管理技术。服务器方面,采用虚拟化技术的主要驱动力就是服务器合并,主要是通过在集群中的每一个结点上安装vServer系统,然后就可以在这台物理结点上创建虚拟机,再把这些虚拟机根据具体需求组成任意大小规模的虚拟池来达到服务器合并的目的。这样使得管理人员只需与控制结点进行交互,而集群事实上可以包含很多的处理器或结点。从vCenter的角度来看,通过服务器合并减少管理复杂度,把不同资源整合成具有巨大能力的系统,提高了系统性能。2.3.1 虚拟化集群总体框架要把虚拟化技术引入到集群中,主要是通过在集群中的每一个结点上安装 vServer系统,然后就可以在这台物理结点上创建虚拟机,再把这些虚拟机根据具体需求组成任意大小规模的虚拟池来达到服务器合并的目的。这样使得管理人员只需与控制结点进行交互,而集群事实上可以包含很多的处理器或结点。从 vCenter的角度来看,通过服务器合并减少管理复杂度,把不同资源整合成具有巨大能力的系统,提高了系统性能。一个典型的虚拟化集群包括:一个vCenter、多个vServer和一套共享存储。vServer直接安装在服务器硬件上,vServer将一个物理服务器划分 为可在同一物理服务器上运行的多个安全、隔离的、可移植的虚拟机。集群中的所有的vServer主机通过光通道或者网络连接到共享的存储,这样当一台主机发生故障时,可以将主机上的业务转移到其它主机上,由于使用了共享存储,使转移后的业务的执行不会因为存储设备的关系而受到影响。在集群中,vCenter不是直接对vServer的主机进行管理,而是对运行在vServer上的虚拟机进行管理,这样间接的对vServer进行了管理。vCenter的所有管理操作都是在vCenter Client 的操作界面上进行。在对虚拟机进行集群化架构中,主要的功能实现部分由vCenter和vServer两大模块组成。2.3.2 vCentervCenter的主要功能是管理集群中的vServer。一个集群中只有一台主机安装vCenter,这台安装vCenter系统的主机在集群中处于核心管理的位置,管理集群中其它vServer主机。vCenter具有以下功能: (1) 寻找可用主机:首先vCenter会在集群当中寻找可用的主机资源,即安装有vServer系统并 且与vCenter连接正常主机,这样的主机才能与vCenter正常通信,才能接受 vCenter的控制。 (2) 创建硬件池:在vCenter寻找到机器中所有可用主机资源以后,会对这些主机根据需要创建任意数量的硬件池,也就是对这些主机进行划分和组合,硬件池的大小由包含的主机数量而定。 (3) 创建虚拟机池:vCenter创建出硬件池以后,可以在硬件池的基础上创建虚拟机池。,虚拟机池是由一定数量的虚拟机组成,这些虚拟机是由vCenter创建出来。没有启动的虚拟机只是一个资源标记,需要为虚拟机划分一定的CPU和内存资源,并且指定一块存储设备,这样虚拟机才能启动和运行。 (4) 启动虚拟机:vCenter在启动一台虚拟机的时候,会选择资源占用率最低的主机来运行,这样体现出集群的负载均衡性。负载均衡性将是启动虚拟机和管理虚拟机的重点功能。启动一个虚拟机可以分为以下的步骤: (1) 寻找可用主机 由vCenter负责在集群中寻找可用主机,在集群中除了vCenter以外的主机 都是安装了vServer,集群中的可用主机是指vCenter能收到vServer心跳包的主 机,能收到vServer的心跳包,表明vServer与vCenter的通信正常,这样vCenter 才能对vServer进行管理和控制。 (2) 创建虚拟机 创建虚拟机是为虚拟机起一个虚拟机名,重要的是为虚拟机指定一个 UUID,UUID是一个资源标签,唯一的标识了一个虚拟机,这样可以与集群中的 其它虚拟机区别开来,便于vCenter对集群中的虚拟机管理。 (3) 在硬件池中寻找资源占用率最低的主机 启动一台虚拟机的时候并不是在集群中随机的指定一台主机来运行虚拟机, 而是优先选择一台资源占用率最少的主机来运行,这一步骤实现集群当中的负载均衡性。(4) 分配虚拟CPU内存 预先为虚拟机划分一定的CPU和内存资源,这时候为虚拟机划分的资源只是资源标签,等真正运行虚拟机的时候,会在虚拟机所运行的主机上虚拟出与预先划分好的资源数量相等的硬件资源。(5) 启动 启动虚拟机之前已经为虚拟机指定了CPU内存资源,也指定了存储设备。 这时可以由vCenter发出启动虚拟机的命令,这个命令会传递给选定的vServer(即资源占用率最低的主机),vServer会通过虚拟机启动一个具有独立CPU、内存、I/O设备和共享存储设备的虚拟机,除了存储设备,其它的设备都是在硬件物理资源的基础上虚拟出来的。2.3.3 vServervServer的主要功能是划分和管理共享存储。对主机的物理资源(CPU、内 存、I/O)进行虚拟化。vServer同时给vCenter发送心跳包,通知vCenter自己的 通信状态是否正常。(1) 创建存储 存储设备被所有的vServer共享,vServer会根据需求从共享存储中划出一块设备供自己使用,如果虚拟机要在某个vServer上运行,那么虚拟机就会占用该 vServer的存储设备。创建存储是对共享存储设备的组织和划分,vServer利用工具对磁盘设备进行格式化,并在磁盘设备上创建物理卷,逻辑卷组,逻辑卷,创建逻辑卷组是为了对磁盘设备进行合并,这样可以对所有的存储设备统一规划,方便重新分配。 (2) 监测资源空闲率 vServer要实时监测自身硬件资源的占用情况,主要是CPU空闲率,内存的空闲率和Swap交换空间的空闲率,这三者的加权值将表明整个主机硬件资源空闲率的高低。每台vServer上的加权值会返回给vCenter,由vCenter找出资源使用率最低的主机。这一功能模块是集群虚拟化架构中实现负载均衡性的基础。 2.4 本章小结虚拟化技术在提高硬件利用率、安全性、可维护性等方面的帮助很大。而利用集群技术,则可以把多台服务器(物理的或者虚拟的)组成一台虚拟服务器,对提高系统性能和可靠性的作用明显。将集群技术和虚拟机技术结合起来应用在对服务器的管理中,虚拟机把一台服务器分成多台,集群又把多台合成一台。这样一分一合,表面上服务器还是那些服务器,实际上已经把各种负载重新优化组合,更合理地分布在各处。从而物理服务器数量不变的情况下,达到了类似于增加服务器的效果并可以实现计算资源利用的最大化。,而且大大提高了灾难恢复速度。不过虚拟化技术是要在服务器上运行尽可能多的系统和应用,虚拟化 本身会带来系统开销,同时也要消耗部分资源。这个开销主要集中在CPU 资源消耗、内存资源消耗和硬盘存储资源消耗上。所以虚拟化平台不适合 在低配置的机器上运行,高配置的单台机器要比低配置的单台机器更适于 部署虚拟化系统,这算是虚拟机集群化架构的不足之处。另外,虽然虚拟 化技术已经获得了长足发展。但是面向复杂的不同时代的硬件设备,快速 高效的兼容特性仍然难以迅速满足。第3章 分布式并行计算技术3.1 分布式并行计算概述云计算技术包括两个似乎对立的技术,这两个技术都是用于对资源进行分配、使用和管理。 一个技术是对资源进行分割,将资源的分配、使用的粒度变细,上一章节介绍的虚拟化集群技术就是这样的技术。 通过引入虚拟主机,将物理主机的能力进行分割。简单地说,虚拟化技术就是对资源进行拆分的技术。另一个技术是利用多个物理主机的能力完成一个任务。分布式并行计算就是这样的技术。分布式并行计算将任务分解为多个子任务分派给主机集群中的各个主机,子任务在多个主机上协调并行运行。简单地说,分布式并行计算技术就是对资源进行聚合的技术。事实上,分布式并行计算才更加体现出云计算的本质。云计算的名称和分布式并行计算、网格计算是一脉相承的。不过,分布式并行计算应该只是并行计算的一种, 从下文的分析可以看出,对于云计算除了分布式并行计算这个主要的并行模式外,还有其他的并行模式。 并行计算PC集群为云计算的诞生奠定了基础。云计算就是在 PC 集群的基础上发展起来的。云计算的机群由遍布全球的PC通过广域网连接而成。并行计算的实现层次有两个: 单机(单个节点)内部的多个CPU、多个核并行计算,虽然单节点内部的并行计算不是实施云计算的主流,但由于目前多CPU、多核已经成为主机提高性能的一个非常重要的方面。 集群内部节点间的并行计算。对于云计算来说,更加强调的是集群节点间的并行。目前,集群中的节点一般是通过IP网络连接,在带宽足够的前提下,各节点不受地域、空间限制。所以,云计算中的并行计算在很多时候被称作分布式并行计算。不过,多CPU、多核是主机的发展趋势,所以在一个集群内,一般2个级别的并行都要求存在,集群内多节点之间并行,节点内部多处理器、多核并行。节点间的并行计算,通常就等同于常说的分布式并行计算。分布式并行计算和虚拟化成熟的产品不同,并行计算没有成熟的产品,只有相对成熟的工具。并行计算的实现,依赖于开发者和用户对业务的熟悉,对并行工具正确、熟练的使用。 并行应用软件从需求分析到设计再到部署,可以分为3个步骤。(1) 在需求分析阶段,根据业务特点,将任务尽可能地分为可以并行执行的多个任务。这是实现并行计算最基础的、往往也是最有效的阶段。 (2) 在设计、编码阶段,采用并行工具进行程序设计。 这个阶段所应用的并行技术是最核心的并行技术,难度最大,技术也不成熟,而且目前大部分技术人员对这个阶段 所应用的技术还没有足够程度的掌握(3) 在应用部署阶段,采用并行部署架构和工具部署应用。这个阶段就是通过部署,使应用所占用的设备能够实现负载均衡。负载均衡本质上也属于并行计算。 常用的方法为采用负载均衡设备,如F5交换机、ESB等。 这个阶段所涉及的技术比较成熟,已为业界广泛采用。并行计算编程模型一直是并行计算研究领域中的重点内容,它和并行计算机体系结构紧密相关。共享存储体系结构下的并行编程模型主要是共享变量编程模型,它具有单地址空间、编程容易、可移植性差等特点。分布式存储体系结构下的并行编程模型主要有消息传递编程模型和分布式共享编程模型两种。消息传递编程模型的特点是多地址空间、编程困难、可移植性好;分布式共享编程模型 是指有硬件或软件的支持,在分布式体系结构下实现的具有共享变量编程模型特点的编程模型。并行计算编程模型一般包括两类:一类是在原有串行 编程语言基础上,引入并行控制机制,提供并行 API、运行库或者并行编译指令,这类模型包括 OpenMP、MPI 以及 MapReduce; 另一类则是并行编程语言,其语言本身就是基于并行算法的,相对影响比较大的主要有Erlang。前面说过,并行计算的实现有两个层次,一个是集群节点间的并行,另一个节点内的并行。 OpenMP 一般用于实现节点内并行,MPI 一般用于实现节点间的并行;而 Erlang 既可以实现节点间的并行,也可以实现节点内的并行。本章重点分析OpenMP、MPI 和 Erlang 这 3 个并行计算编程技术。 3.2 OpenMP目前从x86到小型机,多核是CPU的主流,对于单线程的程序,多核的处理器并没有办法提升它的处理效能;对于多线程(multi thread)的程序,就可以通过不同的核同时计算来达到提高性能的目的。当然,多线程程序的执行性能依赖于对任务的分解。多线程程序的编写、维护,比单线程的程序要复杂不少。一般而言,采用了多线程编程技术,只要主机是多处理器、多核或者拥有同时执行多个线程的能力,那么多线程程序的执行性能还是远远高于单线程的。传统的多线程程序编写一般有两种方法: (1) 通过调用操作系统功能、开发工具自己的多线程控制语句或控制函数来实现; (2) 采用 POSIX 标准和方法, 利用 POSIX 的线程控制库函数来实现。 这些方法都是通过主线程去产生多个子线程, 由主线程把工作拆开,分给各个子线程去运算,最后再由主线程回收、整合结果。使用这两种方法存在以下问题:(1) 程序的开发复杂性较单线程程序增加很多。(2) 第一种方法的移植性还存在问题。 (3) 若要具有好的扩展性,则更加复杂。多线程应该不只是创建固定数量的线程,而应该随着CPU核数的增加而增加线程。 如果用上述方法,虽然可以实现良好的扩展性,但控制十分复杂。 (4) 多线程对多核处理器的负载均衡调度需要开发者自己实现,十分复杂。 使用OpenMP则解决了上述问题。OpenMP是多线程的一种编程方法,它的并行粒度是线程级别的。它的适用范围是单机内的并行计算,可以很好地利用单机内多CPU 或者多核。OpenMP 就是一套API和运行库,可以简化单机内的多线程开发,让设计人员和开发人员的主要精力集中到对任务的理解和拆分上,而具体的细节交给OpenMP去完成,用OpenMP的编程效率要远远高于使用一般函数库或者操作系统自带函数库的多线程编程,也大大优于POSIX标准和方法。OpenMP是作为共享存储标准而问世的。它是为在多处理机上编写并行程序而设计的一个应用编程接口,包括一套编译指导语句和一个用来支持它的函数库。OpenMP能通过伪指令,很简单地将程序多线程化。最简单的情形,甚至可以只加一行指导编译程序的编译伪指令就可以将循环内的语句并行处理了。OpenMP起源于C/C+,但目前已经有OpenMP的Java开发包,使其可以用于Java编程。 3.3 MPIOpenMP虽然很优秀,但只是单机内的并行计算技术。无论是并行计算还是云计算,其并行计算的主流是主机之间的并行而并非单机内的并行。因此MPI (message passing interface)才是并行计算的代表性技术。1994年5月MPI标准诞生,该标准提出了一种基于消息传递的函数接口描述。 目前,MPI 已发展到 2.0 版,成为高性能计算的一种公认标准。 MPI 本身并不是一个具体的实现,而只是一种标准描述。MPI最为著名且被广泛使用的一个具体实现是由美国Argoone 国家实验室开发小组完成 的MPICH,MPICH是一个免费软件,它提供对Fortran和C语言等的绑定支持,以函数库的形式提供给开发者使用。采用MPI在程序设计上有较大的自由度,甚至可以用它实现Hadoop中的MapReduce功能。消息传递方式是广泛应用于并行机的一种模式。特别是分布存储并行机。10 多年来,这种模式在重要的计算应用中已取得了实质进步。在设计MPI时,目标不是选择采用现存消息传递系统中的某一个,而是充分利用这些系统的最抽象特点。 建立消息传递标准的主要优点是可移植性和易于使用。以低级消息传递程序为基础的较高级和(或)抽象程序所构成的分布存储通信环境中,标准化的效益特别明显。消息传递标准的定义能提供给生产商清晰定义的程序库,以便他们能有效地实现这些库或在某些情况下为库程序提供硬件支持,因此加强了可扩展性。 简单地说,MPI是为编写消息传递程序而开发的广泛使用的标准。像这个接口一样,应为消息传递建立一个实际的、可移植的、有效的和灵活的标准。 全部目标如下:(1) 设计一个应用编程接口 (不必为编译器或系统实 现库); 允许有效的通信, 避免存储器到存储器的拷贝,而 允许计算和通信的重叠,尽可能给通信协同处理器 卸载; (2) 对于接口,允许方便的 C 语言和 Fortran 77 联接; (3) 设定一个可靠的通信接口, 用户不必处理通信失 败,这些失败由基本的通信子系统处理; (4) 定义一个接口,提供更大灵活性的扩展; (5) 定义一个接口,它能在基本的通信和系统软件无重 大改变时,在许多生产商的平台上实现,接口的语 义是独立于语言的; (6) 接口应设计成允许线索安全(thread-safety)。 MPI 的一个非常大的优势是大范围的可移植性,在标 准 Unix 处理器间通信协议的上层实现的 MPI 将给工作 站群机系统和不同种类的工作站网络提供可移植性。 这个标准包括点对点通信、集合操作、进程组、通信上 下文、进程拓扑结构、与 Fortran 77 和 C 语言绑定、环境管 理和查询、描述接口。3.4 Erlang Erlang首先是一种类似于函数的编程语言,这种语言天生就是为并行计算而设计的。本来这种比Java还古老的语言,一直无人问津,但是主机的多处理器、多核的发展趋势,特别是云计算的兴起,给Erlang又带来了生机。业界对于并行计算的探索一直没有停止,尤其是云计算的发展促进了并行计算各种方法、模式的发展,如Java Concurrency库、Intel 推出的 Threading Building Blocks库、微软为Robotics Studio提供的CCR库等。 但这些措施只是为先天串行的程序设计语言提供了后天的并行能力,属于亡羊补牢。而Erlang 则是先天并行的,在单台主机上利用多处理器和多核的优势,Erlang将传统编程方法远远甩在后面。据说使用 Erlang 编写的Yaws Web服务器,其并发性能是使用C编程的apache 的15倍!apache在并发4 000连接时就已经崩溃,而Yaws Web服务器可实现并发8 万连接。Erlang 不仅是程序设计语言,还是包括一个类似于Java的虚拟机在内的一个完整的平台。通过虚拟机,Erlang 独立于硬件平台和操作系统,在这个平台上实现了网络通信、内存管理、进程调度、并发机制和分布式计算等功能。 Erlang 最初是为通信应用设计的,因此非常适合于构建分布式、实时软并行计算系统。 Erlang 具有以下特点:(1)并发性 Erlang 的轻量级进程可以支持极高的并发性,而且在高并发的情况下内存使用相当少。 Erlang 的并发性并不会受到宿主操作系统并发性的限制。 (2)分布式 最开始 Erlang 的设计目标就是实现分布式环境,Erlang的一个虚拟机就是Erlang 网络上的一个节点。一个Erlang 节点可以在另一个Erlang节点上创建自己的并发进程,而子进程所在的节点可能是运行其他操作系统的服务器。 不同节点之间可以进行极为高效而又精确的通信, 就像这些通信运行在同一个节点一样。 (3)健壮性 Erlang 内部建设有多种错误检测原语,可以通过这些 原语来架设高容错性的系统。在分布式状态下,可以把系统配置成具有 Fail-over 功能的分布式系统。当有其他节点出错的时候,系统会把它的运行场景自动快速地切换到备份节点上。Erlang支持9个9 级别的故障率,一年只有几分钟的故障时间。 (4)软实时 它可以提供毫秒级别的响应。 (5)热代码升级 对于不能中断运行的系统,Erlang 允许程序代码在 运行系统中被修改。旧代码被逐步淘汰后能被新代码替换。在此过渡期间,新旧代码是共存的。这也使得安装bug补丁在运行系统上升级而不干扰系统操作成为了可能。 (6)递增式代码装载 用户能够控制代码被装载的细节。在嵌入式系统中,所有代码通常是在启动时就被完全装载。在开发系统中,代码是按需装载的,甚至在系统运行时被装载的。如果测试到了未覆盖的bug,那么需替换有 bug 的代码。 (7)外部接口 Erlang 进程与外部世界之间的通信使用和在Erlang 进程之间通信相同的消息传送机制。这种机制被用于和操作系统通信、与其他语言编写的程序交互。使用Erlang编写出的应用程序运行时通常由成千上万个轻量级进程组成,并通过消息传递相互通信。进程间上下文切换对于Erlang 来说仅仅只是一两个环节,比起 C程序的线程切换要高效得多了。使用Erlang来编写分布式应用要简单得多,因为它的分布式机制是透明的,对于程序来说并不知道自己是在分布式运行。Erlang运行时的环境是一个虚拟机,有点像Java 虚拟机,这样代码一经编译,同样可以随处运行。它运行时的系 统甚至允许代码在不被中断的情况下更新。另外,如果需要更高效的话,字节代码也可以编译成本地代码运行。Erlang 能够创建和管理大量的进程(不是操作系统级别的)。那些进程在不同的操作系统上有同样的行为,可以被垃圾回收,对运行地点透明,不会破坏其他进程的运行。 任意两个进程间完全独立,不共享任何状态,一切交流通过消息来传递,当然也就无需上锁。 这样的设计思想造就了适合解决如下问题的Erlang。 (1) 系统高度并发 Erlang 具有优秀的并行性能,特别适合高度并发操作。 (2) 实时处理 在并行情况下,Erlang 响应迅速,性能优良。 (3) 计算高度分布 Erlang 适合集群节点间的并行,也就是基于网络的分 布式并行。 (4) 系统要求高度可靠 每年的脱机时间以分钟算,甚至永不宕机。(5) 可靠性高 Erlang 内容的检测原语, 极大地提高了系统的容
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!