1.2 基础设施云介绍

从体系结构层次上看,基础设施云位于云计算平台的底层,是其他各种形式的云的基础。基础设施云是整个云计算生态链的根本所在[3]。因此,本书主要以基础设施云为研究和解构的对象。

工业界和学术界开发了若干典型的基础设施云,如Amazon EC2[6]、Microsoft Azure[5],但是由于绝大多数的商业云并没有披露其设计思路、体系结构和实现方案,因此本节主要以若干典型的开源基础设施云为对象,对其进行对比、分析。

1.2.1 Eucalyptus

Eucalyptus[7]起源于加州大学圣巴巴拉分校[8]计算机科学系的一个研究项目,由VGrADS[9]项目的首席研究员Rich Wolski[4]带领的研究小组设计和实现。它是全球最广泛使用的用于构建私有基础设施云的软件平台,当前正在使用的 Eucalyptus 云已超过 25 000个,其中全球财富排行前100的公司中有超过20%的公司在使用它[60]。Eucalyptus也可以用于构建混合云(Hybird)。

Eucalyptus实现了亚马逊基于Web的服务Aws(Amazon Web Services)的主要功能,即提供虚拟机和存储服务,并与现有的 AWS 服务和工具兼容。Eucalyptus 提供了命令行工具euca2ools,便于用户使用私有云或公有云服务。

Eucalyptus的体系结构如图1.1所示。其中,系统主要包含如下五个组件。

图1.1 Eucalyptus体系结构

① 云控制节点(CLC)。在Eucalyptus系统中,这是主要的控制器组件,负责管理整个系统。它同时也是所有用户和管理员进入 Eucalyptus 的主要入口。所有客户端通过基于SOAP或RESTful的API与CLC通信。由CLC负责将请求传递给相应的组件,并将来自这些组件的响应发送回至该客户端。

② 基于文件接口的存储接入节点Walrus。Walrus采用面向对象的存储模式,提供类似亚马逊S3[57]的接口,即以Get 和Put的方式提供对虚拟机镜像的一致性存储,并对用户数据提供访问控制机制。

③ 集群控制节点(CC)。CC的主要功能包括控制虚拟机的执行,管理虚拟机之间以及虚拟机与外部环境之间的虚拟网络、虚拟机控制器节点(NC)有关的服务,收集和报告关于集群的状态信息等。

④ 存储控制节点(SC)。SC 提供存储块设备级的接口,通过网络存储传输协议,如iSCSI[48,49]和AoE[50]协议,实现弹性存储,为虚拟机提供数据的可持续保存。SC与Walrus联合工作,用于存储和访问虚拟机镜像、内核镜像、RAM 磁盘镜像和用户数据。其中,虚拟机镜像可以是公共的,也可以是私有的,并最初以压缩和加密的格式存储。这些镜像只有在某个节点需要启动一个新的实例并请求访问此镜像时才会被解密。

⑤ 虚拟机控制器节点(NC)。NC控制主机操作系统及相应的虚拟机管理器VMM(如Xen[51]或 QEMU+KVM[52])对虚拟机生命周期进行管理,提供包括启动、终止虚拟机,查看虚拟机状态等功能。

1.2.2 OpenStack

OpenStack[10~12]是由 RackSpace[13]和美国国家航空航天局(NASA)[71]合作研发的云计算平台,主要用于构建私有基础设施云。

OpenStack以Python编程语言编写,整合Tornado网页服务器[88]、Nebula运算平台[89],使用 Twisted(http://twistedmatrix.com/trac/)软件框架,遵循 Open Virtualization Format、AMQP、SQLAlchemy等标准,支持的虚拟机管理器包括QEMU+KVM、Xen、VirtualBox、VMware、Hyper-V。OpenStack用户可以注册云服务、查看使用情况以及账单,开发商和开发人员可以创建和存储自定义的镜像,启动、监控、停止虚拟机,操作人员可以配置和操作基础设施云。

OpenStack的体系结构如图1.2所示。该结构定义了三个层(表现层、逻辑层、资源层)和两个正交领域(集成域和管理域)。

图1.2 OpenStack的体系结构

① 表现层,组件与用户交互,接收并显示用户的信息。在这一层,为非开发人员提供了一个 Web 图形界面,为开发人员提供了 API。另外,在这一层,还存在负载均衡、控制台代理、安全、命名服务。

② 逻辑层,为云和控制功能提供情报。这层包括业务流程(复杂任务的工作流程)、调度(确定作业对资源的映射)、政策(配额等)、镜像注册(镜像的元数据)、日志(事件和计量)。

③ 资源层,包括实际的计算、网络和存储资源,以提供给客户。这一层提供的服务,可能是服务器、网络交换机、网络附加存储或其他资源。

④ 集成域,云平台需要自己集成一些功能,该结构假设云服务提供商已经集成了用户身份认证(Customer Identity)和计费系统(Billing System)。

⑤ 管理域,提供访问云平台管理域的API,并且提供一些协助管理的监控功能。

该体系结构包含以下五个主要组件。

① nova-api:提供对外的接口。它提供了一个为所有的 API 查询(OpenStackAPI 或EC2API)的端点,引发多数业务流程的活动(如运行一个实例),并实施一些政策(主要是配额检查)。

② nova-schedule:根据当前资源使用情况,决定计算分布到哪台计算节点上。目前实现很简单,已支持插件方式扩展,方便日后采用更复杂的算法。

③ nova-compute:接收队列中的动作,然后执行一系列的系统命令(类似启动KVM实例),同时更新数据库中的状态。

④ nova-volume:给虚拟机分配额外持久化的存储,管理持久卷的创建、连接和分离,它可以使用多种卷,如iSCSI、AoE。

⑤ nova-network:接受队列中的网络任务,然后执行任务管理网络(如设立桥接接口或更改iptables规则)。

OpenStack当前包括三个项目,分别是:

① Swift提供对象存储。

② Glance提供虚拟机镜像的发现、存储和检索。

③ Nova提供虚拟机服务,类似于Rackspace Cloud Servers或亚马逊EC2。

随着 OpenStack 的发展,将来可能会出现更多的项目,如 Web 接口和队列服务。OpenStack 各组件之间相互独立,可以方便对代码进行分析和测试。存储模块 Swift,采用基于对象的存储,通过可升级的对象存储,以存储海量的数据。虚拟网络模块负责公共 IP分配、VPN的连接和防火墙规则的设定,弹性分配和管理虚拟网络资源。通过AMQP这一消息协议框架接受和响应用户的请求。

1.2.3 Scalr

Scalr[14]是基于 Web 的云计算管理平台,用于管理亚马逊弹性计算云(图 1.3)。该项目于2008年4月由Intridea[15]启动,旨在为MediaPlug[16](媒体共享服务)提供可扩展的基础设施。Scalr可以使用预置负载平衡器(pound或nginx)、应用服务器(如Apache)、数据库(如MySQL)的虚拟服务器建立集群。Scalr API分为Java API,Web服务(用于封装API),以及Web客户端和控制台客户端,用户可以通过编写程序调用Scalr API发送请求信息。

图1.3 Scalr体系结构图

Scalr能够提供高可靠的、实时的、容错的服务,使用户得到一个高性能的计算和应用框架。通过管理亚马逊的云计算平台,Scalr 展现了良好的自我扩展和自我修复的性能,它通过提供给用户一个处理大容量数据的命令,可以使网站和Web应用支持千万级别的负载。

Scalr为AMI提供了四种角色[63,86],用来建立和管理服务器农场。它们分别是WWW、APP、MySQL以及BASE。其中WWW服务器是负载均衡器(通常是nginx),负责将请求转发给APP中的实例。APP服务器实例运行着Apache、tomcat或者Rails Framework,Scalr监控和管理这些服务器。MySQL 数据库管理数据库从服务器,并且负责数据之间的同步, Scalr 监控数据库主从服务器,当主服务器异常关闭的时候,就将一个从服务器作为主服务器。BASE是一个普通的AMI,可以用来生成其他角色。

上述四个角色构成一个服务器农场,Scalr 监控用户应用服务器的数据流,通过轮训每个服务器的响应判断是否开启新的应用服务器,当一类服务器的平均负载超过设定值的时候,Scalr就会为服务器农场加入一个新的服务器,当APP服务器异常关闭的时候,就重新开启一个服务器以取代原来的服务器。

数据库是由数据库主服务器管理的,当数据库负载过重时,Scalr 就会为数据库集群开启一个从服务器。应用服务器从从服务器读取数据,这就减轻了主服务器的负载。

1.2.4 Nimbus

Nimbus[17,64]是由芝加哥大学计算研究所[18]的 Kate Keahey[84]研究员创建并带领进行的项目。该项目特别为科学研究机构提供“基础设施即服务”的云计算解决方案,支持代理认证、批处理作业调度、尽力分配策略等功能。

Nimbus专注于为科学研究需要优化基础设置,也能支持许多非科研应用。Nimbus允许用户租赁远程资源部署虚拟机,通过一系列配置构建所需要的计算环境。Nimbus 还提供名为Cumulus的云存储服务,兼容亚马逊S3的REST API。另外,Nimbus平台集成了一系列工具,可以将运行在 Nimbus、OpenStack、Amazon 等不同基础设施云上的虚拟机配置成虚拟集群,允许客户端云启用“一键式”集群节点的安全配置,为其本身的运作提供新的网络和安全环境。

Nimbus的体系结构如图1.4所示。

图1.4 Nimbus的体系结构

客户端提供功能接口,方便用户使用云的各种功能。Nimbus共有3个客户端:

① 云客户端只提供一组常用功能接口,主要用于用户注册、虚拟机创建和启动等,使用简便,常作为终端用户工具。

② 工作区客户端提供访问工作区服务功能的全部接口,特别是提供了丰富的网络选项,比较复杂难以使用,通常需要自定义脚本进行封装。

③ 任何兼容亚马逊EC2服务的客户端。

如图1.4所示,不同客户端连接不同服务接口,调用弹性计算服务和云存储服务。

工作区服务允许远程客户端部署管理虚拟机组,包括基于 WS 的协议前端和基于虚拟机的工作区资源管理器,支持两种前端:一种基于 WSRF[79],另一种基于亚马逊 EC2 WSDL。工作区服务前端服务使用 Web 应用开发框架 Spring[81],利用其“依赖注入”[82]特性进一步减少服务端组件的耦合性,定制或者改变服务端接口的运行时行为。利用该特性,资源管理 API 可以对上述两种前端接收的服务进行桥接适配,转向不同的远程计算资源。如图1.4所示,通过工作区服务调用Nimbus云的计算资源或者通过IaaS网关调用EC2和其他云平台计算资源。

工作区资源管理器(Workspace Resource Manager)实现虚拟机租约在基础设施上的“即时”部署。工作区向导(Workspace Pilot)扩展当前本地资源管理器(LRM),如Torque[65]或者 SGE[66],可以整合虚拟机和已配置的资源协同处理作业,目前可使用 PBS[80]进行批处理调度。

工作区控制器使用工作区资源管理器调度的计算资源启动虚拟机,或者停止和暂停已启动的虚拟机;实现了虚拟机镜像的重建和管理;虚拟机安全连网等。目前利用虚拟化管理工具libvirt对各种虚拟机管理器的兼容,工作区控制器支持Xen和QEMU两种虚拟机管理器。

IaaS网关允许客户端用PKI证书访问其他使用不同证书的IaaS云平台,目前可用于为特定的工程映射X509 PKI证书和EC2账号,使得一些科研工程能够运行在亚马逊EC2上。

Nimbus 云存储服务又叫 Cumulus,对云磁盘空间提供安全管理,为用户提供其所拥有和发布虚拟机镜像的“库”视图,结合globus GridFTP [67]支持任何SAN等GridFTP可接入的网络文件系统。Cumulus使用Boto[83]实现对亚马逊S3接口的兼容,并使用开源的事件驱动网络编程框架twisted.web[78]实现Web服务。

各模块之间使用SSH实现Nimbus服务和各虚拟机管理器节点安全互连,并使用一个用GSI[85]提供认证和授权的基本设施,实现对虚拟机镜像、虚拟机磁盘完整性检查、隐私性保护等功能。

1.2.5 Xen云平台(XCP)

XCP[25,26]来源于Citrix XenServer[24]项目,由Mike McClurg负责该项目的完成和维护。Xen.org于2009年11月发布了XCP 0.1,现在的最新版本为XCP 1.1[68]

XCP是一个基于Xen hypervisor[69]的开源企业级服务器虚拟化和云计算平台,可以为中小企业提供完整的私有云解决方案。同时,XCP 提供了一套针对于云计算可扩展性的API,使其他开源云平台,如Eucalyptus、OpenNebula、OpenStack、Nimbus等更方便地使用Xen hypervisor。XCP支持Windows的半虚拟化实现,支持容灾,支持生成虚拟机快照、检查点以及虚拟机迁移。

XCP满足了云提供商的需求,通过Xen hypervisor的隔离功能和多租户功能与增强的安全、存储、网络虚拟化技术的结合,提供丰富的虚拟基础设施云服务。同时,XCP 也满足了普通用户对私有云的安全性、可用性和性能方便的需求,并有效与公有云隔离。XCP 能够增强服务器负载,为企业用户在电力、设备冷却和管理方面节约成本,提供可持续的计算能力,最大化地利用现有硬件并提高可靠性水平。

XCP的体系结构如图1.5所示。Xen是XCP启动之后第一个加载的软件,运行在64位模式下(要求XCP物理机也是64位Linux系统),负责虚拟化CPU、中断和物理机内存。Xen是一个非常轻量级的软件层,没有任何设备驱动程序以外的串行端口。

图1.5 XCP的体系结构

控制域(Control Domain)接下来启动,它是XCP的一个32位嵌入式版本Linux虚拟机,具有额外的特权保证控制域可以控制物理机硬件设备并且能够创建其他普通虚拟机。控制域包括物理机硬件驱动、由Open vSwitch[73]实现的富虚拟网络特性和对云存储设施的支持。

XAPI是一个运行在控制域中使用OCaml[87]实现的管理栈,负责配置和控制XCP物理机以及 XCP 资源池,并且统筹其中的资源。它包括一个分布式数据库和控制软件,负责在XCP的管理接口监听由XAPI客户端发出的控制指令。

存储管理器接口(SMAPI)同样运行在控制域中,并且对不同的后台存储形式,如FC、iSCSI、基于文件的 VHD 磁盘或者本地存储等提供了一致性访问接口。XCP 定义了一种称为存储库(Storage Repository,SR)的容器来描述一个存储虚拟磁盘镜像(VDI)的特定存储目标。VDI是虚拟磁盘的抽象模型,它包含虚拟磁盘的内容。SMAPI允许VDI支持多种SR存储类型,包括内置的对 IDE、SATA、SCSI、SAS 本地存储的支持,以及对 iSCSI、NFS、SAS、光纤通道(Fibre Channel,FC)远程连接存储的支持。SR支持储存资源随需分配、VDI快照和快速复制,这些特性由一个基于微软VHD[70]技术标准的软件栈实现。

控制域中可以配置三种网络类型,即管理网络、存储网络和虚拟机网络。用户可以使用同一个物理网卡来支持这三种网络,也可以每一个网络使用一个单独的网卡,来提高安全性。管理网络用于控制XAPI发送的请求、虚拟机活迁移、虚拟机导入导出、热修复、资源池元数据备份、发送邮件预警、资源池内通信。存储网络用于SMAPI获取基于网络的存储内容,存储数据流是不经过加密的,并且也经过控制域,所以为了保证可靠性和安全性,有必要将存储数据流和管理数据流进行隔离(使用不同的网卡)。对于虚拟机网络,首先要说明的是,XCP 中有三种代表网络实体的服务器端软件对象,包括 PIF——代表 XCP物理机的物理网络接口、VIF——代表XCP虚拟机的虚拟网络接口、network—代表XCP物理机的虚拟以太网交换机。每一个 XCP 物理机可以拥有一个或者多个 network 对象,这就表示每个物理机上可以包括一个或多个虚拟网络。没有与PIF互连的network对象代表XCP的内部网络,用于提供XCP虚拟机之间的互连,确保虚拟机与外界网络的隔绝。与PIF连接的network对象代表XCP的外部网络,提供了一个VIF和PIF之间的网桥,可以使外部网络通过PIF的网卡访问物理机的可用资源。

XCP 可以在一台物理机上运行多个虚拟机,每个虚拟机为其中运行的操作系统提供完全隔离的计算环境、存储环境和网络环境。多个 XCP 物理机能够集成为一个资源池(XCP规定一个资源池最多由12个物理机组成),资源池可以作为一个物理机集群的独立管理单元。XCP 支持资源池内的虚拟机负载均衡,当用户开启一个虚拟机、恢复断电虚拟机、迁移虚拟机时都会用到XCP的虚拟机负载均衡。XCP可以决定在哪个物理机上开启该虚拟机是最佳的,以达到资源的均衡利用,防止某些XCP物理机成为“热点”。

1.2.6 Ganeti

Ganeti [27~29]是由Google公司基于Xen和KVM以及其他开源软件开发的一款虚拟集群环境管理工具,包括3个子项目[41]:Ganeti Instance Image、Ganeti Web Manager、Twisted VNCAuthProxy。

Ganeti Instance Image定义Ganeti可以使用文件系统转储或tarball镜像来配置虚拟机,能够在不需要外部工具的情况下实现虚拟机的安装[45]。Ganeti Web Manager是一个基于Web的应用,允许管理员通过它管理 Ganeti 和提供 VNC 或 SSH 方式访问虚拟机。Twisted VNCAuthProxy作为VNC服务的中间人认证代理,是通过VNC连接虚拟机的网关。同时, Ganeti 的存储管理允许网络 RAID1[42]虚拟磁盘,可以通过 DRBD(Distributed Replicated Block Device)[43]在物理主机间进行磁盘数据同步。

Ganeti的体系结构如图1.6所示,其中,系统主要包含三类组件,分别是:

图1.6 Ganeti体系结构

① 外部客户端。客户端Ganeti Web Manager[77]通过RAPI(Remote API)协议(通过HTTP使用JSON协议[76])与管理节点的ganeti-rapi守护进程交互,调用管理节点中的操作来实现虚拟机的管理功能。

② 管理节点。管理节点执行客户端发出的虚拟机管理请求:管理节点守护进程从ganeti-rapi守护进程获取请求,并为请求建立队列。另外,管理节点使用命令行接口CLI对命令进行分类和执行。CLI和ganeti-rapi守护进程通过LUXI API与管理节点守护进程进行交互,管理节点守护进程和普通节点守护进程通过RPC(Remote Procedure Call)进行交互[44],并通过OpenSSL[75]对RPC层进行加密。

③ 普通节点。由四个组件组成:RPC监听器、磁盘管理、网络管理和虚拟机管理器。普通节点从 RPC 监听器获取请求,并将结果返回给请求者;磁盘管理包括逻辑卷管理、文件管理和网络RAID1(使用DRBD进行数据同步,如图1.7所示);网络管理对虚拟机实例的网络配置进行管理;虚拟机管理器管理程序管理多个本地虚拟机。

图1.7 DRBD数据同步示意图

1.2.7 OpenNebula

OpenNebula[30,31]是一款 OpenNebula.org 开发的开源项目,该项目是由 Ignacio M. Llorente[61]和Rubén S. Montero[62]在2005年启动,并于2008年3月首次公开发布,到目前为止,该项目的合作者包括dsa-research.org、C12G Labs、Microsoft等[46]。OpenNebula提供灵活的体系架构、接口和模块,可以与多种类型的数据中心相结合。它支持 Xen、QEMU+KVM和VMware,并提供Amazon EC2接口。

OpenNebula 具有管理私有云、公有云以及混合云的能力,包括物理资源管理、虚拟设备管理、虚拟网络管理以及存储管理,并可依据定位策略整合物理机资源和远端云资源[47],相当于在云上又做了一层虚拟化,如图1.8所示。

图1.8 OpenNebula体系结构

OpenNebula体系结构如图1.8所示,其中,OpenNebula提供四种系统接口接收客户端请求,客户端接口通过 XML-RPC 与其他模块进行交互;用户认证模块接收包含用户信息的XML-RPC,通过访问控制列表ACL对用户身份进行验证;请求管理器对XML-RPC请求进行处理和协调,并转发给其他模块;物理主机管理模块通过ganglia[74]或SSH直接连接并管理所有普通节点,如其对应的物理资源和所使用的虚拟机管理器等;调度器根据用户请求和物理主机的情况选择合适的普通节点用于启动虚拟机,是 OpenNebula 的负载均衡模块;调度器选择合适的普通节点后,存储和镜像模块向镜像库发送 https 请求,镜像库通过SCP 向指定的普通节点分发镜像文件;虚拟化模块直接与普通节点的虚拟机管理器交互,对虚拟机的整个生命周期进行管理;虚拟网络模块使用组件Etables[72]和Open vSwitch[73]对虚拟网络进行管理。

1.2.8 Enomalism

Enomalism[32, 34]由Enomaly Inc. [33]公司开发,它的第一版本于2005年发布,意在提供一种自服务(Self-Service)的基础设施云。后来,该系统改名为OpenECP[55]。Enomalism提供了一个功能类似于EC2的公有云。它基于Linux,支持Xen、KVM和VMware虚拟机管理器。Enomalism可以将企业数据中心与公共云计算服务集成起来,并通过统一的控制台管理内外资源。它的使用者包括[35]中国网络电视台、中国银行(私有云)、City Network(公共云,北欧)、Orange/法国电信(垂直云计算)等。

Enomalism体系结构如图1.9所示,其中,使用iptables[56]作为系统的网络入口和数据包过滤器;使用turbogears[54]作为前端接入系统,并对外提供RESTful模式网络服务API;使用 libvirt 虚拟化库[53]为基础做虚拟机管理器调度和适配;针对每个用户使用私有的VLAN;基于Hadoop[58]和pNFS [59]建立分布式文件系统。

图1.9 Enomalism体系结构