1.1 Eucalyptus:EC2的开源实现 1. 开发目的 用户可以通过多种方式来使用各种计算资源和存储资源,这些资源包括单个笔记本电脑到分布在世界各地的数以千计的计算节点。用户一般基于各种特征如硬件体系结构、内存和磁盘存储能力、网络连接或地理位置来定位这些资源。一般地,这种资源定位涉及到资源的可用性、应用程序的性能分析、软件服务要求及行政关系等复杂的问题。而高性能计算和网格计算在资源配置标准方面迈出了一大步[23][25],但是对于有复杂资源需求的用户来说这些标准还是有些累赘。例如,一个需要大量计算资源的用户必须联系多个不同的资源提供者以满足自己的需求,而这些资源构成的资源池中的资源大部分都是异构的,使得任务的性能分析和资源的有效利用变得十分困难。虽然具有专业知识的用户可以接受资源的异构性,但是许多用户喜欢一个硬件资源、软件堆栈及编程环境一致的开发运行环境,这种一致性使得大规模的应用开发和部署变得更容易。 云计算的基本功能是通过各种接口提供对大规模数据和计算资源的访问。目前的云计算系统基本遵循相同的原则,即对资源的获取和释放是按需进行的,且用户接口应该非常简单。此外,云计算系统所提供的资源的通过虚拟化技术向用户隐藏了大量的信息如资源的物理位置、计算资源体系结构方面的细节等。这种应用模式得到了广泛的认同,并为开发者开发可扩展的应用程序提供了全新的编程目标。随着云计算系统的数量和规模的增长,需要对云计算的一些重要问题进行研究,以使云计算平台朝着预期的目标发展并取得成功。但是目前大多云计算产品要么是专有的,要么它们所依靠的大规模基础设施和软件对于研究社区的研究人员是不开放的,云计算研究人员不能够对其进行任意修改和实验研究[22]。缺乏研究工具使得许多基本问题不能够解决。 Eucalyptus专门用于支持云计算研究和基础设施的开发。它基于“基础设施即服务(IaaS)”的思想,不同于Google、Amazon、Salesforce、3Tera等云计算提供商,它所使用的计算和存储基础设施如集群和工作站可为学术研究组织所用,为他们提供了一个模块化的开放的研究和试验平台,该平台为用户提供了运行和控制部署在各种虚拟物理资源上的整个虚拟机实例的能力。Eucalyptus的设计强调模块化,以允许研究者对云计算的安全性、可扩展性、资源调度及接口实现进行测试,有利于广大研究社区对云计算的研究探索。 2. 设计原则 虽然云计算系统已经为用户提供了一些可用的服务,但是其软件的封闭性使得云计算爱好者很难找到一个公开的灵活框架来定制自己的实验。Eucalyptus是一个面向研究的开源云计算系统,为了满足众多研究者的上述需求,采用了独特的设计[22][30]: (1) Eucalyptus必须能够在不受其设计者操控的软硬件环境中进行部署和执行。 (2) Eucalyptus 必须是模块化的,以便不同的研究者进行升级、改造和替换,同时能够实现最大程度的可扩展性。 Eucalyptus的系统架构设计同时考虑了上述两个原则,并在它们之间做出了权衡。 3. Eucalyptus与IaaS 虽然大多数现有的云计算实现都遵循灵活性、可扩展性和提供动态计算能力等原则,但是在如何把这种计算能力提供给用户上却存在着很多差异。如亚马逊的弹性计算云EC2[23][27]允许用户根据需要分配整个虚拟机,从而提供“基础设施即服务(IaaS)”式的服务。它允许用户自行提供操作系统内核、基本操作系统软件、任何用户级别的软件和他们希望运行的应用程序,IaaS系统只负责提供物理资源和实例化用户的虚拟机。Eucalyptus实现的IaaS的特别之处在于它被设计便于在研究环境中进行安装和维护,以便于修改、实验和扩展。商业云计算基础设施使用这些能力来控制本地资源的配置(如硬件版本、操作系统版本、组网和存储策略等)及访问潜在的昂贵的资源集。在研究环境下,云计算基础设施不能够为其所有的软硬件强加一个指定的配置,也不能断言有大量的可用资源集来保证系统的性能。典型的IaaS系统都有着特定的基础设施,并不把可扩展性和可移植性作为设计目标,也不把方便管理作为设计的首要目标。将多种计算资源聚集到一个单一的资源池加大了云计算系统的设计难度,很少有开源的软件包能够安装和部署在多个计算集群上并使它们相互协作和配合执行任务。因此,Eucalyptus是IaaS中一个比较独特的例子,也是未来的多集群开源设计的先驱。 IaaS并不是目前商业部门实现云计算的唯一途径[22],如Amazon和Google还分别通过S3(Simple Storage Service,简单存储服务)和App Engine来实现DaaS(Data as a Service,数据即服务)能力,用户可以从所提供的计算资源上访问和存储大量的数据。同样Google的App Engine还进行了语言层的抽象,以提供PaaS(Platform as a Service,平台即服务)。另外,像Salesforce等公司还提供了SaaS(Software as a Service,软件即服务)等。Eucalyptus选择IaaS作为设计思想是因为两个原因。首先,Amazon的EC2也许是目前商业上最成功的云计算系统,而EC2就是实现了IaaS。Eucalyptus采用了和EC2是兼容的接口,这使得测试相对成熟的商业云计算系统性能成为可能,采用IaaS使Eucalyptus在设计和测试过程中可以参考EC2。其次,抽象的高层云计算至少在概念上都依靠相似的IaaS功能,为了进一步的研究和部署开源软件,云计算系统包括IaaS将是必要和有益的。 1.1.2 体系结构 学术研究组织可以访问多种资源如小的集群、工作站池和各种服务器及台式机。由于IP地址的匮乏和对完全的通过因特网访问资源引起的安全方面的担忧,系统管理员通常将集群部署在一个私有的不可路由的网络上,该网络只有一个头结点负责在计算池和公共英特网之间进行路由流量。虽然这种配置通过使用最少的公共可路由的IP地址来提供安全保障,但这意味着大部分机器可以和外部主机连接的同时外部机器却不能直接和集群内部的机器进行通信。比如以下的情形,有两个小的Linux集群,一个小的服务器池及一个工作站集合,每集群有一个具有可公开访问的IP地址的前端机器,而其节点之间、节点与集群头节点之间通过专用网络相连。服务器和工作站具有公开的IP地址,但是这些工作站都位于防火墙的后面,不能够从外部连接它们。这种情形下,很显然安装一个完全互联的系统是不可能的,因为许多机器只能够向外部主机发起连接,或者完全的与外界网络是隔离的。此外,两个集群中的节点由于位于不同专用网络或许还有重叠的IP地址。为了在单一的云计算系统中使用所有的这些资源,Eucalyptus采用了分层的体系结构,如图 6?13所示[22]。其中,CLC代表云控制器(Cloud Controller),CC代表集群控制器(Cluster Controller),NC代表节点控制器(Node Controller)。 图 6?13 Eucalyptus的分层拓扑结构 这些分层的组件能够容易地在常见的网络分层结构上进行安装。一个Eucalyptus部署的典型例子如图 6?14所示[22]: 图 6?14 Eucalyptus部署的典型例子 1.1.3 主要构件 1. 节点控制器 节点控制器负责管理一个物理节点。节点控制器是运行在虚拟机寄宿的物理资源上的一个组件,它负责启动、检查、关闭和清除虚拟机实例等工作。一个典型的Eucalyptus安装有多个节点控制器,但一台机器上只需运行一个节点控制器,因为一个节点控制器可以管理该节点上运行的多个虚拟机实例。节点控制器接口由WSDL文档来描述,该文档定义了节点控制器所支持的实例数据结构和实例控制操作。这些操作包括runInstance、describeInstance、terminateInatance、describeResource和startNetwork。对于实例的运行、描述和终止操作执行系统的最小配置,并调用当前的管理程序来控制和监测运行的实例。describeRescource操作为调用者返回当前物理资源的特性,包括处理器资源、内存和磁盘容量等信息。startNetwork操作用于设置和配置虚拟以太网,有关内容将在下面讨论。 2. 集群控制器 典型的集群控制器运行在集群的头结点或服务器上,它们都可以访问私有或公共网络。一个集群控制器可以管理多个节点控制器。集群控制器负责从其所属的节点控制器收集节点的状态信息,根据这些节点的资源状态信息调度进入的虚拟机实例执行请求到各个节点控制器上,并负责管理公共和私有实例网络的配置。和节点控制器一样,集群控制器接口也是通过WSDL文档来描述的,这些操作包括runInstances、describeInstances、terminateInatances和describeResources。描述和终止实例的操作会直接传给相关节点控制器。当集群控制器接收到一个runInstances请求后,它执行一个简单的调度任务,该任务通过调用describeResource来查询每一个节点控制器,选择第一个具有足够空闲资源的节点控制器来执行实例运行请求。集群控制器还实现了describeResources操作,该操作将一个实例需要占据的资源作为输入,并返回可以同时在其所属的节点控制器上执行的实例的个数。 3. 云控制器 每一个Eucalyptus安装都包括单一的云控制器。云控制器相当于系统的中枢神经,它是用户的可见入口点和做出全局决定的组件。它负责处理进入的由用户发起的请求或系统管理员发出的管理请求,做出高层的虚拟机实例调度决定。并且处理服务等级协议和维护系统和用户相关的元数据。云控制器由一组服务组成,这些服务用于处理用户请求、验证和维护系统、用户元数据(虚拟机映像和SSH密钥对等),并可管理和监视虚拟机实例的运行。这些服务由企业服务总线来配置和管理,通过企业服务总线可以进行服务发布等操作。Eucalyptus的设计强调透明度和简单以便促进Eucalyptus的实验和扩展。 为了达到这一粒度级别的扩展,云控制器的组件包括虚拟机调度器、SLA引擎、用户接口和管理接口等。它们是模块化的彼此独立的组件,对外提供定义良好的接口,企业服务总线ESB负责控制和管理它们之间的交互和有机配合。通过使用Web服务和Amazon的EC2查询接口与EC2的客户端工具互操作,云控制器可以像Amazon的EC2一样进行工作。之所以选择EC2是因为它相对成熟,有大量的用户群体且很好的实现了IaaS。 1.1.4 访问接口 1. 客户端接口 云控制器的客户端接口实质上是Eucalyptus内部系统接口和外部定义的客户端接口之间的转换器。例如Amazon提供了一个描述其服务的基于Web服务和SOAP的客户端接口的WSDL文档和一个用于描述基于HTTP查询的接口的文档,它们可以通过云控制器的用户接口服务转换成Eucalyptus的内部对象。我们使用JiBX[26]绑定工具来指定XML元素和Java对象实例之间的映射,同理可以使用它来创建EC2 SOAP消息和Eucalyptus内部对象之间的映射。但查询接口却不适合这种模型,主要有以下三个原因: (1) 没有XML文档可用。 (2) 认证机制不同,且与采用的WS-Security安全策略相冲突。 (3) 在同种请求的相同域的SOAP请求和查询请求结构之间存在冲突。 但是由于EC2的查询接口是SOAP接口的严格子集,Eucalyptus开发了一个简单的绑定框架在有关注释的引导下将HTTP参数名字映射到对象字段,然后依靠目标对象的注释来澄清和修改映射的不一致性,最后JiBX使用命名空间为EC2 SOAP接口的边界对象分组。结果包括两个方面: (1) JiBX验证该对象,它实际上是一个合法的SOAP接口请求,也是一个合法的EC2客户端请求。 (2) 分组后的XML文档可以用来当做SOAP的一部分来进行进一步的处理。 2. 管理接口 除了支持主要的任务如启动和停止一个实例外,云计算基础设施还应该支持基本的管理任务,如添加和移除用户及管理磁盘映像等。Eucalyptus通过一个基于Web的接口进行管理操作。它由云控制器通过一个基于Web的接口或通过命令行的方式实现,管理接口只有系统管理人员可以看见,且管理接口具有唯一性。向Eucalyptus添加用户可以通过管理员手动的添加或以在线申请验证的方式加入。在线验证方式往往要求用户提供自己的邮件地址,并点击系统发送到邮件中的验证链接来获取验证,因为Eucalyptus将用户身份和其邮件地址进行了绑定。用户添加成功后,管理员可以暂时或永久性的移除该用户,且管理员可以管理用户正在运行的实例并可终止这些实例。 通过管理入口,还可以将磁盘映像添加系统中。一个映像包括与Xen兼容的客户操作系统内核,一个根文件系统映像及一个可选的RAM硬盘映像。添加一个映像的过程包括加载这三个映像文件并给它们命名。管理员可以暂时或永久性的删除一个映像,另外管理员还可以通过控制器配置文件添加和删除集群中的节点。 3. 实例控制接口 云控制器提供了虚拟机控制服务(VmControl Service)来管理虚拟机实例元数据的创建。虚拟机控制器不间断的维护一个基本资源状态的简单本地描述,如一个集群控制器潜在的能够创建的实例的个数。当发起一个实例创建请求时,虚拟机控制器将和云控制器的其他服务进行协作,将用户的请求分解成映像、密钥对、网络和安全组等,并根据相应的元数据和资源应用配置策略预先生成一个解决方案,然后将消息散播至涉及到的集群控制器,集群控制器将调度这些请求到其所辖节点控制器,最后由节点控制器创建虚拟机实例来运行用户作业和应用程序。 1.1.5 服务等级协议 虚拟机控制器依靠本地模型来做出决策。为了保持模型更新,每一个云控制器会以被动轮询的方式取其实例的状态,包括实例的可用性、分配情况、虚拟网络及注册的映像等。通过轮询获取的信息被当成判断的基准,用户请求被提交给事务,当资源满足该事务时就提交该事务进行处理。然而,当由于网络问题引起信息丢失或资源状态改变时,该模型可能变得不一致,从而导致系统同一个不能满足的用户达成服务等级协议。然而,由于轮询是半同步的,丢失信息能够被确定,且模型处于无效的时间点也可以被检测到。最终,模型在给定时间段的哪个时间点上无效可以被计算出来,从而避免模型不一致的情况导致的问题。 Eucalyptus已经实现了一个简单却强大的初步的SLA,它可以使用户控制其实例的高层网络拓扑结构。Eucalyptus使用Amazon EC2提出的概念“区域”(zone)来指代由计算和存储资源组成的“池”(Pools)或“集群”(Clusters)。区域是由多个节点控制器和单个集群控制器从逻辑上构成的机器集合。Eucalyptus允许用户为一个实例的执行指定一个区域配置,该配置提供不同的管理和网络性能参数,根据该配置,一个实例集可以在一个集群或跨集群运行,以获得所要的性能。 考虑到用户得到的资源数量及其拓扑结构的相对动态性,Eucalyptus将对区域的概念进行扩展以支持不同的服务等级协议。目前Eucalyptus所提供的区域允许用户在执行作业时,可以具有多种选择,包括根据服务等级协议获取指定的集群、选择空闲的集群、指定单个及多个集群来为自己服务。 1.1.6 虚拟组网 某个域内的虚拟机实例彼此之间应有网络连接,且它们中至少有一个虚拟机实例和外部公共网络相连,以便于为其所有者提供访问入口及与其它域实例进行交互。由于用户对于自己所监管的的虚拟机具有超级用户权限,其可以访问基本的网络接口,因此其具有获取系统IP和MAC地址的能力并对系统网络造成干扰。此外,如果两个实例运行在同一台物理机器上,虚拟机用户可以影响和窥探另外一个虚拟机的网络包,这将导致安全问题。因此在有不同用户共享的云计算平台上,协作完成单一任务的虚拟机之间应该可以通信,而属于不同用户的虚拟机之间应该是通信隔离的。 为了解决上述问题,每个虚拟机提供两个虚拟网络接口,一个作为公共接口,一个称为私有接口。公共接口的作用是和用户所管辖虚拟机的外部进行通信,或在由服务等级协议定义的可用区域的实例之间进行通信。在一个有可用的IP地址的环境中,这些地址可以在虚拟机实例启动时分配给它们以允许实例进行通信。而在具有支持外部通信路由器的私有网络中,虚拟机实例进行网络地址转换后,其公共网络接口可以分配一个有效的私有地址通过网络地址转换的路由器访问外部网络。实例的私有接口只能在跨域的虚拟机之间进行通信,以解决不同虚拟机实例运行在独立的私有网络内但需要进行通信的问题。 集群控制器负责创建和销毁实例虚拟网络接口,节点控制器通过配置以如下的三种方式建立公共接口网络: (1) 使虚拟机的公共接口直接连接到与物理机器网络相连的以太网网桥软件上,管理员可以像处理常规的DHCP请求那样处理虚拟机网络的DHCP请求。 (2) 允许管理员定义一个动态的IP地址池和一个网络,集群控制器通过一个接口连接到该网络,运行在集群控制器上的DHCP服务器负责在实例启动时将地址动态的分配给这些实例。 (3) 定义静态的MAC/IP地址对,每个实例启动时系统给其分配一个空闲的MAC/IP对,实例终结后释放该MAC/IP对。 实例的私有接口通过桥接器连接到一个被称为虚拟分布式以太网(Virtual Distrubuted Ethernet,VDE)[25]的全虚拟以太网系统,VDE是一个以太网协议的线程级实现。VDE网络通过通用的TUN/TAP接口连接到真正的以太网上,TUN/TAP提供了从Linux内核到用户空间的以太网包通信服务。 一个VDE[25]网络由VDE交换机和它们之间的电缆连接构成,VDE交换机位于节点控制器和集群控制器上,VDE交换机采用生成树协议(spanning tree protocol),它防止环路的同时允许冗余存在于网络之中。如果没有防火墙,VDE网络是完全连接,即VDE交换机和另外的每一个VDE交换机都直接相连,有防火墙的情况下,VDE至少和系统中的一个VDE交换机相连。 为了保证系统的安全,需要对实例实行网络流量隔绝。这些实例可以是运行在相同主机上,也可以运行在同一物理网络中的不同机器上。系统要求任意两个实例之间不能够相互检查和修改彼此的网络通信,具体方法是用虚拟局域网(VLAN)给属于特定用户的实例集打上网络标签,以此来隔绝和转发不同的网络流量。 |