本文简单论述了公有云平台和私有云平台的关系,它们之间的异同点,并列举在公有云资源上搭建私有云的软件工具,说明它们采用的技术、以及应用的领域等方面存在的异同。
公有云平台和私有云平台的关系以及异同点
云计算是近年来由集群、网格、分布式和效用计算发展而来的全新计算模式,将IT资源、数据、应用等作为一种服务,通过网络提供给用户。在云计算模式下,用户不必构建和组织这些资源,而是可以直接按需付费使用云计算服务商提供的服务。
公有云、私有云与混合云
根据商业模式或者服务是否公开,云计算可以分为以下三个类别,公有云、私有云和混合云。公有云通常是指由第三方企业提供的云平台服务,构建在互联网之上,任何已付费的用户都可以访问,其基础设施由提供云计算服务的大型运营组织建立和维护,这些运营组织一般是拥有大量计算资源的IT巨头,例如Google、Amazon、IBM、微软等大型企业,这些公司将云计算服务以按需付费的方式销售给一般用户或中小企业群体,用户只需要将请求提交给云计算系统,付费租用所需的资源和服务,而不需要再投入成本建立数据中心、进行系统的维护,可以专心开发核心的应用服务。现有的一些代表性公有云平台包括GAE(谷歌应用引擎)、AWS(亚马逊的Web服务)、微软Azure、IBM蓝云和Salesforce.com的Force.com。这些云由商业提供商提供公共可访问的远程接口,通过这些接口可以在各自的基础设施中创建或管理虚拟机实例。公有云以共享的方式通过互联网提供给用户非常有吸引力的低成本服务,但开放性较高,而且用户失去了对数据和计算的控制权,因此数据安全隐患较为突出。私有云通常构建在局域网内部,云平台的拥有者和消费者都是同一个公司或组织,它属于客户、由客户管理,而且其可访问范围限制在所属客户及其合作者之间。私有云并不是在互联网之上通过公共可访问的接口售卖容量和计算资源,而是部署在企业内部,由用户内部所共享,在管理域中运行服务负载,对计算资源进行统一管理和动态分配,不提供对外服务,为本地用户提供了一个灵活便捷、相对安全可靠且高质量的云基础设施。但私有云平台要求企业组织购买基础设施,建立相应规模的数据中心,并投入人力物力来维护数据中心的正常运转,在一定程度上提高了企业的成本。由于私有云的开放性不高,可能会影响云的标准化,但安全威胁相对较少,可以获得更大的可定制化和组织控制能力。私有云的一个例子是美国国家航空航天局(NASA)构建的私有云,用于研究者在其提供的远程系统上运行气象模型。混合云由公有云和私有云共同构成,通过外部公有云的计算能力补充本地基础设施。不同云平台仍然是独立实体,通过利用标准的或专用的技术实现绑定,彼此之间能够进行数据和应用的移植。例如混合云可以在公有云和私有云之间通过负载均衡技术应付突发负载;应用混合云模式,用户可以将次要的、非敏感的数据和应用部署到公有云上,充分利用公有云在扩展性和成本上的优势,同时将任务关键性的、敏感的数据放在私有云上,保证安全性。
公有云和私有云的相同点
无论是公有云还是私有云,都是利用数据中心的服务器集群和大规模数据库,搭建虚拟化平台,通过按需动态配置硬件、软件和数据集,将弹性资源放在一起,将桌面计算移向基于服务的平台,充分利用其对提供商和用户的低成本和简易性,使用户可以专注于应用的开发,避免了大量的数据移动,可以带来更好的网络带宽利用率。而且,机器虚拟化进一步提高了资源利用率,增加了应用程序灵活性,降低了使用虚拟化数据中心资源的总体成本。公有云和私有云都是在互联网上开发的,并且许多云都是由商业提供商或企业以分布式的方式产生,它们会通过网络互连来达到可扩展的、有效的计算服务。云提供商在不同地区创建平台,这种分布有益于故障容错、降低响应延迟。基于局域网的私有云可以连接到公有云,从而获得额外的资源;在不用用户团体之间开发广泛的服务级协议(SLA),可以在一定程度上提供云平台的用户体验和服务质量。此外,公有云和私有云都用到了网格计算等许多已有的技术。
公有云和私有云的不同点
现阶段公有云和私有云存在着显著的差异。首先,公有云和私有云针对的客户群体和服务层级有所不同,公有云的服务对象是中小企业、初创公司或者是个人,而且一般是以应用或者平台的方式提供;而私有云的服务对象是政府或者是大型公司,服务形式更多是平台或者基础设施,客户可以在此基础上搭建自己专属的平台并开发相关的应用。应用、平台和基础设施分别对应云计算的三个服务层级,SaaS(软件即服务)、PaaS(平台即服务)、IaaS(基础设施即服务)通常,SaaS构建在PaaS之上,PaaS则构建在IaaS之上。SaaS模型将软件应用程序作为服务进行提供,客户可通过浏览器或使用特殊的接口进行访问;PaaS模型在基础设施之上提供操作系统及运行时库支持的平台,客户可以基于该模型来开发和部署自己的应用程序;IaaS则提供基础设施服务,用户可以使用计算、网络、存储、通信等底层资源。因此,对于公有云平台,提供的服务主要集中在上两层,而私有云平台则集中在下两层。在业务场景方面,公有云提供对外互联网业务,而私有云着重于政府企业的内部业务。公有云和私有云的基础设施也存在一定的差异,当企业构建一个私有云平台时,IT基础设施一般属于自己且位于企业内部,采用公有云平台的时候,基础设施则位于第三方的数据中心;不过也有例外,一些服务提供商提出虚拟私有云(VPC)的概念,通过在第三方数据中心内部使用技术手段隔离出来一个专用计算环境,并通过安全通道与企业客户相连接。这是在基础设施的部署位置上的不同,设备自身也有所差异。对于许多大型企业,经过多年的IT建设和技术演变,其基础设施往往采用了不同的技术和平台,也就是说,这些企业的私有云采用的是异构平台环境。对于目前大部分公有云提供商来说,他们的云平台往往是通过廉价和标准的硬件平台来构建的,能够以较好的性价比满足大部分用户的需求;另外,公有云服务提供商往往提供最为大众化的、需求量最为广泛和集中的服务。因此,对于公有云服务来说,其服务和环境一般是同构的。
在技术架构方面,公有云采用自研架构,关注分布式、大集群和可扩展性;私有云一般采用开源架构,更关注高可用、灵活性和可定制化。在安全性方面,公有云的应用和数据在第三方云提供商的数据中心,存在被泄露和篡改的风险,数据安全取决于第三方的技术能力、专业性和信誉度,安全威胁相对较大;私有云可以部署在客户对象的防火墙内,属于客户、由客户管理,在一定程度上和外界隔离,数据的安全性相对较高。在可控性和定制化方面,公有云为第三方提供的标准解决方案或个性化方案,客户不能任意地修改需求;而私有云是为了企业单独使用而构建的,可以定制、与现有系统集成或者从零开发,灵活性较高。在服务质量方面,公有云取决于服务提供商,可能会受到网络等因素的影响;而私有云则是企业自主保证服务质量,可以通过加强监控,保证服务的稳定性。此外,公有云的开放度高、规模大、应用场景广泛,初期成本低,后期业务量增加时,成本也会相应提高;而私有云的初期成本高,随着业务量增加,后期成本低。随着技术的发展,一旦私有云成熟起来并且防护更为安全时,可以将其开放或转化为公有云,因此,公有云和私有云的界限在未来会变得越来越模糊,未来非常有可能大部分云天然就是混合云。
搭建私有云的软件工具,所采用技术和应用领域
目前在公有云资源上搭建私有云的软件工具主要有OpenStack、CloudStack、Eucalyptus、OpenNubela等。
OpenStack
OpenStack是由NASA和Rackspace公司合作研发的云计算平台,两者分别贡献计算代码(Nova)和存储代码(Swift),以Apache许可协议进行授权,是一款完全开放源代码的项目和自由软件。OpenStack采用分布式架构,整个平台按照功能不同分为多个模块项目,每个项目实现独自的功能,项目之间通过消息队列中间件和Restful形式的API进行交互通信,将项目之间的耦合性降到最低。每个项目都可以部署在不同的主机上,进行单独地安装和测试,架构非常的灵活。在项目内部,OpenStack遵循开放的设计原则,底层除了支持开源技术外,还对商业产品提供支持,如虚拟化技术能够用VMware的ESXI或者微软的Hyper-V,存储可以采用IBM或者VMware的产品,网络虚拟化能够使用Cisco或者Nicira的网络设备,而且OpenStack没有将底层的技术实现锁定在某一厂商的产品上,而是通过扩展的形式对其进行支持。OpenStack对外提供丰富和功能强大的API,使得资源可以被用户方便地使用和调度,同时提供和AWS(亚马逊Web服务)兼容的API。OpenStack致力于提供一个既可以用来建设公有云也能建设私有云的通用的开源云计算平台,而且做到云平台的搭建尽量简单方便,同时能够快速地横向扩展;遵循开源、开放的理念,完全由社区主导和维护;不同项目之间几乎没有耦合,可以方便地进行开发定制,但项目要单独安装,部署会比较麻烦。
CloudStack
CloudStack最初由Cloud.com公司开发,在被收购后贡献给Apache软件基金会,采用Apache许可协议。与OpenStack的分布式架构不同,CloudStack采用集中式的单体架构,包括DashBoard/CLI层、CloudStack API、核心引擎层和计算/网络/存储控制层,是典型的分层结构。整个平台只有一个项目构成,不同模块之间通过本地调用进行交互,在一台主机上就可以完成平台的部署,但CloudStack本身未采用面向服务的架构(SOA),组件之间的耦合度较高,平台的扩展性相对弱一些。从开发平台来看,CloudStack使用Java语言API等部分,运行时部署为Tomcat的Servlet;另外还大量使用Python开发与网络和系统管理相关的部分。CloudStack的一套独立Java代码库,涵盖通信、数据管理、事件管理、任务管理和插件管理等部分,基本形成了开发平台。CloudStack同样对外提供自身API和与Amazon AWS兼容的API。总体来说,CloudStack提供高度可用的、能够进行大规模虚拟机部署和管理的开放云平台,在云平台构建时会比较方便,但平台架构比较集中,模块间紧耦合,扩展性不是很好。
Eucalyptus
Eucalyptus是一个与Amazon EC2兼容的IaaS系统,是EC2的一个开源实现,通过集群计算来实现高弹性、实用的云计算服务。Eucalyptus提供许多高级的特性,包括支持VM在Xen或者KVM上运行,用于系统管理以及对用户结算等项目进行云管理,兼容Amazon EC2和S3接口等。Eucalyptus包括云控制器(CLC)、Walrus、集群控制器(CC)、存储控制器(SC)和节点控制器(NC)五个组件。CLC是整个系统的核心,负责高层次的资源调度,例如向CC请求计算资源;Walrus是一个与Amazon S3类似的存储服务,主要用于存储虚拟机映像和用户数据;CC是一个集群的前端,负责协调一个集群内的计算资源,并且管理集群内的网络流量;SC是与Amazon EBS类似的存储块设备服务,可以用来存储业务数据;NC是最终的计算节点,通过调用操作系统层的虚拟化技术来启动和关闭虚拟机。在同一个集群内的所有计算节点必须在同一个子网内,而且一个集群内通常要部署一台存储服务器,为计算节点提供数据存储服务。从组件服务角度看,每个集群中计算和存储服务设计为独立服务,网络仍为计算服务的一部分;从分层角度来看,Eucalyptus在SOA层面做得较好,但缺乏API层设计,技术门槛相对较高,整体上对抽象框架和插件的设计做得不够。
OpenNebula
OpenNebula是欧洲研究学会发起的虚拟基础设备和云端运算计划的虚拟化的开源实现,其核心部分是Front End。OpenNebula主要分为三层,即接口层、核心层和驱动层。接口层提供了原生的XML-RPC接口,同时实现了Amazon EC2等多种API;核心层提供统一的插件管理、请求管理、声明周期管理、Hypervisor管理、网络资源管理和存储资源管理等核心功能;最底层是驱动层,主要与虚拟化软件(KVM、XEN)和物理基础设施交互。在OpenNebula中,计算、存储和网络部分是独立的模块,资源调度也被分离出来支持多种可选的策略和资源额度管理。OpenNebula没有采用SOA的设计,解耦合做的不够,但采用Libvirt所提供的接口远程调用计算节点上虚拟化控制命令,这种设计在系统安装部署阶段会减少很多软件安装配置工作。
平台的应用领域和综合对比
综合对比分析,OpenSack是一个用来管理数据中心级别资源池包括计算资源、网络资源、存储资源的云操作系统,通过授权,用户可以通过Web界面获取资源,同时管理员通过统一的仪表盘对资源调度进行控制;而且OpenStack的应用领域是针对所有类型的云平台,发布一个简单、易扩展、功能丰富的解决方案。CloudStack主要被设计用来发布和管理大型虚拟机网络,以实现一个高可用以及可扩展的IaaS云计算平台,包含了大部分组织需要的功能如虚拟机管理、网络管理、完善的API等;而且支持大部分主流的虚拟化技术,既适用于构建公有云服务,也可搭建私有云和混合云。Eucalyptus是一个用来构建私有云,或者基于AWS API的混合云的开源工具,能够根据应用的工作负载动态地扩容或者缩容;使用Eucalyptus的组织可以将以往使用公有云的经验应用到私有的IT资源上,同时获得更好的数据安全、更好的性能;而且Eucalyptus提供了很多AWS组件的开源实现,用户可以很方便地将AWS应用部署到自由基础设施上。OpenNebula提供对虚拟化数据中心全方位管理、简单的但是功能丰富灵活的完整解决方案,既包含搭建私有云所必须的功能,同时也可以提供公有云的服务,能够对虚拟化数据中心和云基础设施进行管理;其良好的互操作性保证用户能够使用现有的设备进行云计算方面的改造,同时避免与供应商的绑定。