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

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

云计算的集群与分布式

摘要

尽管我们已经有了高速的个人计算机,尽管我们有了储存大量信息的网络,但是随着社会的发展我们对其的要求也越来越高,为了满足越来越高的需求水平并降低升级的成本,一个新的观念出现了,并为IT业的发展指明了方向,这就是“云计算”。

无疑,近年来,云计算已经成为最热门的技术话题之一,云计算技术已经成为了继个人计算机、互联网之后出现的第三次技术革命浪潮。国家“十二五”规划纲要和《国务院关于培育和发展战略性新兴产业的决定》均把“云计算”作为新一代信息技术的重要组成部分。由此可见“云计算”重要性和发展云计算的必要性。

本文将从云计算组成的角度来粗浅的介绍云计算的概念。

关键词集群技术与虚拟化,并行计算技术,分布式文件系统。

第一章绪论

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.1 集群技术

集群技术就是将多台服务器用集群软件连接在一起,组成一个高度透明的大型服务器群的计算机系统,作为一个整体为客户端提

供服务,客户端能共享网络上的所有资源,如数据或应用软件等,

同时客户端的用户并不关心其应用Server运行在那台服务器上,

只关心其应用Server是否能连续工作。当集群系统内某一台服务

器出现故障时,其备援服务器便立即接管该故障服务器的应用服务,

继续为前端的用户提供服务。从客户端看来,集群中的所有服务器

是一个系统,就像一台大型的计算机系统,其上运行着客户端需

要的应用服务。集群系统能够保证用户的业务是连续的并且具有持

续可用的特性,即具有7x24 的可用性,从而将系统停止运行的时

间降到了最低,提供了高可靠性的保障。

从客户端看来,集群中所有的服务器是一个整体,就像一台大型的计算机,为了完成一些普通计算机或服务器难以胜任的计算密

集型应用,集群可以可以集中几十台甚至成百上千台计算机服务器

的计算能力来提供更高的计算能力。

用户若想扩展系统能力性能,往往不得不购买更高性能的服务器并停止系统运行来更新设备,但是采用集群技术的话,只需将新

的服务器加入集群中,并不需要停机和极其昂贵的服务器,通过大

量性价比高的服务器的叠加和集合就可以做的更出色,大大提高了

系统的可扩展性并大大降低了成本。

集群技术在提高性能、增强可靠性的同时提供了更好的可扩展能力和更低的成本。

2.1.1 高可用性集群

在一年之内可达99.99%可用性时,这样的集群系统我们称为高可用性的集群系统。

可用性:当用户需要数据和服务时,计算机能够根据请求完成响应则定义为可用性。可用性是以百分比形式表示的一种系统正常

工作的时间。高可用性系统是由集群软件监控、具有多台服务器互

相冗余的系统。此系统通过集群软件提供的故障监测和故障处理能

力,可提供业务连续性的能力。高可用性系统的主要目的是将计划

内及计划外宕机时间减少到最少;其次是减少恢复一个失败系统的时间,即应在最短的时间内恢复系统。的运行。高可用性即确保计算机系统的运行时间达到99.99%。

容错系统:是由一台计算机系统采用专用的、昂贵的和有复制功能的设备组成的系统。如计算机内部采用特殊的双主机板、CPU 锁步运行、冗余磁盘、专有的操作系统等。它是为防止系统出错、获得较高可用性的一种方法。容错性是整个操作系统统筹设计的一个功能,系统完全自发、自动响应系统故障,并提供不问断服务。

高可用性的集群系统主要包括以下几方面硬件组件:

(1)服务器组:在高可用性的集群系统中每个节点的服务器必须有自己的 CPU、内存和磁盘。每个服务器节点的磁盘是用于安装操作系统和集群软件程序。

(2)对外提供服务的网路:集群系统中的服务器一般采用TCP

/IP网络协议与客户端相连。每个服务器上都有自己的应用服务,客户端必须通过集群服务器中的网络通路来得到自己的服务。

(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的性能。

考虑虚拟机之间的不对等:目前虚拟机常见的应用是服务器整合,可以把若干应用服务器合并在一台物理主机上分别作为不同的虚拟机同时运行。这些虚拟机可能有不同的应用特点,例如,交互/批处理,I/O密集/计算密集等,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,则虚拟地址、物理地址和真实地址之间的关系。

虚拟机会把虚拟地址映射到物理地址,而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 vCenter

vCenter的主要功能是管理集群中的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 vServer

vServer的主要功能是划分和管理共享存储。对主机的物理资源(CPU、内存、I/O)进行虚拟化。vServer同时给vCenter发送

心跳包,通知vCenter自己的通信状态是否正常。

(1)创建存储存储设备被所有的vServer共享,vServer会根据需求从共享存储中划出一块设备供自己使用,如果虚拟机要在某个vServer上运行,那么虚拟机就会占用该 vServer的存储设备。创建存储是对共享存储设备的组织和划分,vServer利用工具对磁盘设备进行格式化,并在磁盘设备上创建物理卷,逻辑卷组,逻辑卷,创建逻辑卷组是为了对磁盘设备进行合并,这样可以对所有的存储设备统一规划,方便重新分配。

(2)监测资源空闲率 vServer要实时监测自身硬件资源的占

用情况,主要是CPU空闲率,内存的空闲率和Swap交换空间的空闲率,这三者的加权值将表明整个主机硬件资源空闲率的高低。每台vServer上的加权值会返回给vCenter,由vCenter找出资源使用率最低的主机。这一功能模块是集群虚拟化架构中实现负载均衡性的基础。

2.4 本章小结

虚拟化技术在提高硬件利用率、安全性、可维护性等方面的帮助很大。而利用集群技术,则可以把多台服务器(物理的或者虚拟的)组成一台虚拟服务器,对提高系统性能和可靠性的作用明显。将集群技术和虚拟机技术结合起来应用在对服务器的管理中,虚拟机把一台服务器分成多台,集群又把多台合成一台。这样一分一合,表面上服务器还是那些服务器,实际上已经把各种负载重新优化组合,更合理地分布在各处。从而物理服务器数量不变的情况下,达到了类似于增加服务器的效果并可以实现计算资源利用的最大化。,而且大大提高了灾难恢复速度。

不过虚拟化技术是要在服务器上运行尽可能多的系统和应用,虚拟化本身会带来系统开销,同时也要消耗部分资源。这个开销主要集中在CPU 资源消耗、内存资源消耗和硬盘存储资源消耗上。所

以虚拟化平台不适合在低配置的机器上运行,高配置的单台机器要比低配置的单台机器更适于部署虚拟化系统,这算是虚拟机集群化架构的不足之处。另外,虽然虚拟化技术已经获得了长足发展。但是面向复杂的不同时代的硬件设备,快速高效的兼容特性仍然难以迅速满足。

第三章分布式并行计算技术

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 MPI

OpenMP虽然很优秀,但只是单机内的并行计算技术。无论是并行计算还是云计算,其并行计算的主流是主机之间的并行而并非单机内的并行。因此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节点上创建自己的并发进程,而子进程所在的节点可能是运行其他操作系统的服务器。不同节点之间可以进行极为高效而又精确的通信,就像这些通信运行在同一个节

相关文档
最新文档