第2章 基础设施云对比分析
2.1 基础设施云对比分析概述
为了使读者能对基础设施云有更加深刻的了解,本节对若干典型的开源基础设施云基本信息、虚拟运行环境、虚拟网络、云存储、云安全等进行详细分析(表2.1)。
表2.1 基础设施云基本信息表
表2.1总结了当前主流的开源云系统的基本信息。其中,开发语言多集中在C、Java、Python 等主流编程语言上,并且多数云系统的开发语言不只一种。究其原因是因为 IaaS 系统规模比较庞大,一般需要划分模块设计实现,模块间耦合度非常小。同时考虑模块的需求和各编程语言的特点,选取不同的编程语言对特定模块进行开发,如 C 语言支持系统调用,速度较快,多用来做底层开发;Java 或 Python 等高级语言进行外围开发和模块互连,以Nimbus为例,大部分使用Java语言编写,但考虑到Python的I/O速度比Java快4、5倍,所以它的存储模块Cumulus采用Python语言编写。值得注意的是,几乎所有IaaS云系统都用到了Python语言,甚至全部由Python语言开发,如OpenStack和Enomaly ECP,这是因为Python语言的简单易用、快速开发和高性能越来越受到关注。
IaaS云系统的物理服务器操作系统基本全部选择Linux,主要原因是Linux的高安全性和高稳定性使其更适合作为网络服务器;Linux 是免费的,这会带来更小的成本开销;Linux是开源的,可以根据需求灵活定制应用。
1.开源协议
本书调研的IaaS云系统皆为开源系统,使用的开源协议包括Apache、GPL和LGPL。Apache Licence是对商业应用友好的许可。使用者可以在需要的时候修改代码来满足需要并作为开源或商业产品发布、销售。而 GPL 要求任何对源代码的修改都必须开源,并不得用于商业活动,因此如果需要从事商业活动,建议使用 Apache 许可证的基础设施云平台。LGPL 是 GPL 的一个为主要类库使用设计的开源协议,LGPL 允许商业软件通过类库引用(link)方式使用LGPL类库而不需要开源商业软件的代码。这使得采用LGPL协议的开源代码可以被商业软件作为类库引用并发布和销售。
2.管理接口
所有IaaS云系统都提供基于Web的管理接口,以BS架构提供可视化界面对云进行管理成为了趋势。
3.可扩展性
IaaS 云系统基本的组织结构都是集群,尽管各自名称不同。集群管理可以很方便地对系统规模进行扩展,并且方便对集群内的虚拟机或主机进行管理。然而,集群管理也有它的缺点,如配置复杂可能是集群的最大缺点,建立集群框架、管理主机间的连通性、配置共享存储都需要考虑整个集群的结构,另外集群中各主机间发生着大量的、复杂的交互,这也会给软件更新和系统升级带来困难因素。
4.模块互连
大部分IaaS云系统选择简单对象访问协议(SOAP)作为模块互连的协议,SOAP是一种轻量的、简单的、基于 XML 的协议,可以和许多网络协议和格式结合使用,并且, SOAP与编程语言无关,可以使用任何语言来完成,这也是它被选择作为模块连接协议的重要原因。另外,XCP和Ganeti使用远程API或远程过程调用完成模块间互连。基础设施云虚拟化运行环境对比如表2.2所示。
表2.2 基础设施云虚拟化运行环境对比
5.多租户
本书所调研的IaaS云系统都支持多租户,这也是云系统与个人虚拟化工具的区别。
6.虚拟机管理器适配
除了XCP外,其他IaaS都使用libvirt做虚拟机管理器适配,libvirt为多种虚拟化工具提供了一套方便、可靠的编程接口,符合云系统支持多种虚拟机管理器的需求,所以使用libvirt做虚拟机管理器适配已成为了趋势。XCP之所以未使用libvirt是因为它是Xen公司开发,主要针对Xen一种虚拟机管理器,不需要进行适配。
7.虚拟管理器
Xen和QEMU+KVM成为了主流的虚拟机管理器。各云系统选择Xen的原因除了其开源外,还因为它具有很好的平台支持、可管理性、实施、动态迁移和性能基准;选择 KVM因为从Linux 2.6.20开始内核中已经开始集成KVM,其本身也具有很好的虚拟化性能。
8.支持的客户操作系统
所有的云都支持Linux操作系统,而Nimbus不支持Windows操作系统,部分支持MAC OS,基础设施云需要考虑提供Windows与Linux两种常规操作系统,而伴随着MAC OS的流行,云也将支持该系统。
9.对外接口
鉴于EC2的影响力,IaaS云系统在提供自己的对外接口时,大多也提供了兼容EC2的接口。另外,大部分所调研的云系统选择RESTful架构,REST的原则规定客户端和服务器之间的交互在请求之间是无状态的,如果服务器在请求之间的任何时间点重启,客户端不会得到通知,此外无状态请求可以由任何可用服务器回答,这十分适合云计算的环境。各个IaaS也根据各自的特点选择适当的接口,如WSRF、XVP、OGF-OCCI、vCloud等。
10.虚拟机IP地址分配与管理
虚拟机的IP均以静态地址进行分配,从而方便IP地址管理,另外为了使外部地址能有效利用,一般都用NAT对内外地址进行转发(表2.3)。
表2.3 基础设施云虚拟网络对比
11.隔离性
由于VLAN的配置、管理方便,基础设施云主要通过VLAN对虚拟机组成的网络进行流量控制,使其广播数据包能有效隔离,有效缓解云环境中大量虚拟机带来的网络压力。另外,云环境中多租户特性也需要VLAN进行访问控制。
12.访问控制
由于基础设施云的多租户特性,基础设施云就必须对各个租户的虚拟机进行访问授权控制。iptables、ebtables和Firewall为基础设施云中访问控制的组件,ebtables在数据链路层提供包过滤功能,而iptables在网络层进行过滤。
13.存储模式和存储网络协议
基础设施云中的存储以文件为主,使用 SAN 或 NAS 实现多服务器共享一个阵列子系统,实现数据的共享和集中管理,进而达到基础设施云中快速、大容量和安全可靠的数据存储(表2.4)。此外,考虑到扩展性、负载平衡、灾难恢复等因素,云平台倾向于使用面向对象的存储模式。在存储协议上使用iSCSI、AOE、NFS等进行传输。另外,NFS适用于较少的客户端访问相对较小的数据集的情况,可是如果大量的客户端需要访问数据或太大的数据集时,NFS服务器很快就变成了一个瓶颈,抑制了系统性能,而pNFS从根本上消除了这个瓶颈,因此ECP使用pNFS协议进行传输。
表2.4 基础设施云存储对比
14.元数据存储和管理
基础设施云中的元数据普遍使用关系型数据库进行存储和管理。
15.存储对外接口
鉴于S3的影响力,大多数开源云都会提供兼容S3的接口,其他接口则与存储网络协议相关。
16.内部安全策略
为了保证内部安全通信,IaaS 云平台普遍使用到三种安全机制:WS-Security,SSL 和SSH公钥认证(表2.5)。WS-Security制定了基于SOAP的扩展以创建一个安全的Web服务,它将安全策略应用于消息本身,通过对消息进行签名、加密实现消息安全传输;而SSL 是将安全传输策略应用到传输层的数据段,进而间接地实现基于消息的安全传输;另外,IaaS节点间通过SSH公钥认证的方式验证通信的合法性。
表2.5 基础设施云安全策略对比
17.外部安全策略
IaaS云系统多使用X509对用户身份进行认证,并通过SSH公钥认证的方式,使用户方便地访问自己的虚拟机。此外,XCP、Ganeti、OpenNebula 还具有 LDAP(Lightweight Directory Access Protocol,轻量目录访问协议)认证机制,LDAP目录下必须通过某种认证过程来建立客户端对于会话的权限。