开源云计算平台CloudStack实战
上QQ阅读APP看书,第一时间看更新

1.5 主流开源云平台介绍

1.5.1 OpenStack

OpenStack是开源IaaS云平台的后起之秀,在短短几年时间内拥有庞大的社区和良好的生态环境,吸引了大量的公司和开发者围绕其进行云计算开发。图1.6为OpenStack逻辑架构图。

图1.6 OpenStack E版逻辑架构图

OpenStack整体架构分3层,最上层为应用程序和管理Portal(Horizon)、API等接入层;核心层包括计算服务(Nova)、存储服务(包括对象存储服务Swift和块存储服务Cinder)和网络服务(Quantum);第3层为共享服务,现在为账户权限管理服务(Keystone)和镜像服务(Glance)。其中Quantum和Cinder是最新加入核心服务中的OpenStack孵化项目。

在Essex及以前版本,存储EBS(Elastic Block Service,弹性块存储服务)和Nova-Volume耦合在一起,网络服务也与Nova-Network绑定。在Folsom版本中,EBS和Network从Nova中独立为新的服务(Cinder和Quantum)。Nova通过API来调用新的Cinder和Quantum服务。我们可以看到,OpenStack在SOA和服务化组件解耦上是做得最好的。

Nova包含API Server(含CloudController)、Nova-Scheduler、Nova-Compute、Nova-Volume和Nova-Network等几部分,所有组件通过RabbitMQ来通信,使用数据库来保存数据。同时Nova中大量采用了框架与插件的设计,如Scheduler支持插件开发新的调度算法,Compute部分支持通过插件使用不同的Hypervisor,Network和Volume部分也通过插件支持不同厂商的技术和设备。Cinder和Quantum等服务也采取了与Nova类似的整体架构和插件设计方法。

从开发平台的角度来看,OpenStack做得也很好。首先,OpenStack所有服务均采用Python开发;其次,所有服务采用类似的软件架构和内部实现技术,比如服务端程序使用WSGI,数据库ORM使用SQLAlchemy,配置文件解析和日志等也采用相同的组件。基于OpenStack有很好的开发平台,我们看到开发人员可以很容易参与多个组件的开发。

1.5.2 Eucalyptus

Eucalyptus是最早试图克隆AWS的开源IaaS云平台,整体架构如图1.7所示。Eucalyptus由云控制器(CLC)、Walrus、集群控制器(CC)、存储控制器(SC)和节点控制器(NC)组成,它们相互协作共同提供所需的云服务。组件间使用支持WS-Security的SOAP消息实现安全的通信。Eucalyptus对外提供兼容AWS的SOAP和Query接口,不提供其他API。

图1.7 Eucalyptus架构

从分层的角度来看,Eucalyptus缺乏API层设计,CLC是全局资源管理层,集群服务(CC和SC)为底层资源管理层。CLC、CC和NC(Node Controller)三层结构不是软件架构层面的分层,只能看作一种为了管理较大规模集群的工程化方法。

从组件服务角度看,每个集群中将计算和存储服务设计为独立服务,网络仍位于计算服务的一部分。尽管Eucalyptus在代码实现上是将网络部分独立出来的,但整体上并未按照独立的服务来设计,整体设计解耦不够。

CLC是Eucalyptus的核心,包括虚拟机控制、存储卷管理、网络资源(Address)管理、镜像管理、快照管理、Keypair管理和元数据管理等服务模块。开源ESB产品Mule将所有的服务编排起来,通过Eucalyptus服务对外统一提供EC2和EBS服务。由此可以看到,Eucalyptus在SOA层面上做得较好。但ESB技术门槛高,对设计开发人员要求较高。同时,因为Eucalyptus只在很少的地方支持插件(如多Hypervisor支持的插件),所以整体上对抽象框架和插件的设计做得不多。

从开发平台的角度来看,Eucalyptus的主要开发语言为Java和C。CLC采用开源ESB Mule为核心编排服务,架构较新颖,但CC和NC采用Apache +CGI的软件架构,基于Axis/C来实现Web Service。整体来看,Eucalyptus还没有开发平台化的趋势。

1.5.3 OpenNebula

OpenNebula是Reservoir项目的一部分,是2005年欧洲研究学会发起的虚拟基础设备和云端运算计划的虚拟化管理层的开源实现。OpenNebula的核心部分是Front End,即ONE。其架构如图1.8所示。

图1.8 OpenNebula系统架构图

OpenNebula明显分为三层,即接口层、核心层和驱动层。接口层提供了原生的XML-RPC接口,同时实现了EC2、OCCI和OpenNebula Cloud API(OCA)等多种API,为用户提供了多种选择。

核心层的OpenNebula core提供统一的Hook插件管理、Request请求管理、VM生命周期管理、Hypervisor管理、网络资源管理和存储资源管理等核心功能。core配合Scheduler对外提供计算和存储网络资源管理服务。

最底层是由各种Driver构成的驱动层与虚拟化软件(KVM、XEN)和物理基础设施交互。需要说明的是,图1.8中的驱动层没有画出DataStore、NetworkManager等多个驱动。一些前端模块如监控、用户界面(Sunstone Portal和Self Service Portal)也未在图1.8中画出。很明显,OpenNebula在分层和框架加插件设计这两点做得很好。

在OpenNebula中,计算、存储和网络部分是ONE中独立的模块,资源调度也被分离出来通过requirement和matcher支持多种可选的策略和资源额度管理,也支持调度引擎Haizer来提供lease(租约)的高级资源调度能力。

显然,OpenNebula没有采用SOA的设计,没有将计算、存储和网络设计为独立组件,解耦做得还不够。值得注意的是,OpenNebula用Libvirt所提供的接口远程调用计算节点上的虚拟化控制命令。这种Agentless的设计在系统安装部署阶段会减少很多软件安装配置工作,是一个设计亮点。

从开发平台的角度来看,OpenNebula采用C++实现核心ONE,使用Ruby开发的各种Driver来实现具体的功能。整体系统只有一个核心部件,故在开发平台上做得很少。

1.5.4 各个开源云平台的综合比较

前文中分别介绍了目前主流的IaaS开源云平台的设计和架构特点,下文我们从分层结构、组件化、扩展性和开发平台几个方面比较这些IaaS开源云平台,如表1.1所示。

表1.1 开源云平台综合比较

从表中可以看出,目前CloudStack和OpenStack两大平台的优势明显。CloudStack在经过大量商业客户公有云的部署后,其功能已趋于稳定成熟,成为Apache开源项目后,其松耦合设计也已排上日程,设计上大有迎头赶上的趋势。OpenStack现状是功能不够完整且商业支持不够,另外,其转为基金会运作后能否保持现在的发展趋势也是大家非常关注的。在实际的云平台选择过程中,大家要从自身的角度出发,综合考虑功能和系统的架构与设计、未来发展等因素。

CloudStack的优势在于更早地进入开源云平台领域,并且拥有许多商用成功案例。由于初始目标就是实现商业应用,CloudStack具有良好的易用性,功能更加丰富,可直接应用于生产环境。在基础功能相同的前提下,CloudStack的部署和维护更加容易。OpenStack的安装和配置相对复杂,适合具有强大开发能力和技术人才资源的大型企业使用。如果企业希望通过有限的资源投入来构建开源IaaS框架,CloudStack是一个不错的选择。