在敏捷软件开发中使用虚拟化技术
 

2011-06-10 作者:Nageswararao V. Gokavarapu 来源:IBM

 

简介

虚拟化这种现代技术用于增强系统共享资源的能力,从而确保供给能够轻松地满足业务需求。通过使用虚拟化,让单一物理资源作为许多独立的小资源出现,或者把许多小资源集合成单一的大资源。在传统的软件开发中,按连续的阶段性方式构建复杂的系统,需要在一开始时同时收集所有需求。很难收集相关方面的需求,因为由于市场战略和/或技术条件的变化,需求可能会变化。敏捷开发有助于为软件开发确定需求。本文讨论可以在敏捷产品开发中使用以适应市场需求的各种虚拟化技术。

虚拟化的类型

虚拟化以符合逻辑的方式把系统资源(比如硬件、软件、时间共享等)划分为独立于操作系统的虚拟机。另一种定义方法是,虚拟化让用户可以在一个现有的操作系统中运行多个应用程序。虚拟化的概念是 IBM 在上世纪 60 年代首次引入的,它以符合逻辑的方式把大型机硬件划分为虚拟机,从而同时执行多个任务和应用程序,这可以充分利用大型机硬件并降低费用。

在分布式环境中,虚拟化根据应用程序需求帮助让单一物理资源作为许多独立的小资源出现,或者把许多小资源集合成单一的大资源。无论在后端使用什么类型的虚拟化技术,从最终用户的角度来看,资源看起来都像是单一物理资源。在软件开发生命周期的不同方面(比如服务器、存储、网络、输入/输出和应用程序开发),都可以通过虚拟化有效地利用资源。

服务器虚拟化

服务器虚拟化是对最终用户隐藏服务器资源(比如物理服务器、处理器和操作系统)的过程。服务器虚拟化帮助把一个物理服务器划分为多个隔离的虚拟环境,这些环境被称为虚拟私有服务器、访客、实例、容器或模拟环境。可用于服务器的流行的虚拟化技术包括:

硬件虚拟化

它由虚拟化软件(称为 hypervisor)组成。虚拟化软件通过模拟完整的硬件环境创建虚拟机,允许在一台宿主计算机上同时运行多个操作系统。hypervisor 监视访客操作系统的执行(见 图 1),它捕捉并转发系统调用以操纵由 hypervisor 提供的数据结构。

图 1. 硬件虚拟化示例

按照这种方式,多个操作系统(包括相同操作系统的多个实例)可以共享相同的硬件资源。在上世纪 70 年代,IBM 引入了在硬件上运行的 PR/SM hypervisor(一种 hypervisor),用于跨访客操作系统分配和监视 CPU、直接访问存储设备和内存等系统资源。在这种模型中,访客操作系统在 hypervisor 之上的一层中运行。

准虚拟化

在硬件虚拟化中,hypervisor 向访客操作系统提供底层计算机系统的虚拟化抽象。因此,访客操作系统不需要修改就可以在 hypervisor 上运行。在准虚拟化中,hypervisor 驻留在硬件上,见 图 2。在 hypervisor 和访客操作系统之间有通信机制,用以提高相互协作的性能和效率。

访客操作系统使用虚拟机监视程序 (VMM) 提供的 API 与 hypervisor 通信,从而直接访问底层硬件上的某些资源。2005 年,VMware 提供了一个准虚拟化接口 Virtual Machine Interface (VMI),它在系统管理程序与访客操作系统之间提供通信,而 zSeries 上的 IBM VM 操作系统从 1972 年以来一直使用相似的概念。

图 2. 准虚拟化示例

虚拟化 player

虚拟化 player 在宿主操作系统上运行,向访客操作系统提供完整的硬件虚拟化。这些 player 对连接宿主操作系统的各种硬件进行虚拟化,比如网络适配器、硬盘、USB 驱动器、视频适配器和不同的串行/并行设备,让访客操作系统可以使用它们(见 图 3)。

图 3. 虚拟化 player 示例

在这种模型中,虚拟化 player 在传统的操作系统环境中运行,所以在这些 player 上运行的访客操作系统处于硬件之上的第三层。一些虚拟化 player 提供了保存上下文或者暂停在访客操作系统上运行的任务的功能。如果把访客转移到另一个物理系统上,就可以从暂停的地方恢复执行。VMware 和 Citrix 是虚拟化 player 的示例。

操作系统级虚拟化

在这种模型中,宿主运行单一 OS 内核并向每个访客操作系统导出操作系统功能。访客必须使用与宿主相同的操作系统(见 图 4)。一些宿主操作系统允许访客使用与宿主相同的操作系统的不同发行版。按照这种方法,操作系统的内核允许有多个隔离的用户空间实例。从最终用户的角度来看,每个实例都像是真正的服务器。

图 4. 操作系统级虚拟化示例

这些实例相互隔离,内核常常提供资源管理特性以限制每个实例使用的资源。可以跨访客共享宿主操作系统上的二进制代码和库。因此,这种模型更灵活,允许用户在宿主系统上同时创建许多访客。目前有多种操作系统虚拟化技术,比如 AIX V6.1 工作负载分区 (WPAR)、Solaris 10 container 和 HP-UX 11i vPar。

AIX 6.1 提供的 WPAR 特性提供隔离的应用程序环境和对应用程序的资源控制。宿主操作系统可以监视 WPAR 上运行的进程。通过使用共享系统的 WPAR 配置,就不需要在每个 WPAR 上安装软件。在创建的所有 WPAR 上,共享宿主操作系统上安装的软件。在私有 WPAR 配置中,用户可以在 WPAR 中安装必需的软件。可以创建应用程序 WPAR,从而用专用的资源运行应用程序。

网络虚拟化

网络虚拟化把硬件和软件网络资源以及网络功能组合成单一的基于软件的管理实体 — 虚拟网络。网络虚拟化允许动态地重新配置网络,而不需要接触任何线缆或设备。远程地管理支持虚拟化的网络设备,可以重新配置它们。网络虚拟化技术包括硬件级的网络接口卡 (NIC) 和网络级的虚拟 LAN (VLAN)。

存储虚拟化

存储虚拟化把信息的逻辑位置和物理位置分隔开,这有助于业务应用程序更轻松地使用信息,无论物理基础架构如何变动。

图 5. 存储虚拟化示例

存储虚拟化提供包含多个物理存储设备的池,让它们作为单一逻辑存储设备出现,还处理把请求映射到实际物理位置的过程,见 图 5。映射取决于实现的类型:

基于宿主的虚拟化

在基于宿主的虚拟化中,物理设备驱动程序层上面的软件层处理 I/O 请求并把请求转发给特定的物理设备。它还能够把多个厂商提供的磁盘子系统组合成单一的池,可以从单一位置管理这个池。对特定设备的访问由与它相关联的传统物理设备驱动程序处理。尽管它很简单而且支持任何物理设备存储类型,但是不可能实现跨系统数据迁移/复制和跨组织宿主实例同步。IBM SAN Volume Controller 和 FalconStor Software NSS Virtual Appliance 是这种虚拟化的示例。

基于存储设备的虚拟化

基于存储设备的虚拟化可以把多个物理磁盘放在单一阵列中,并根据需求把它划分为多个不同大小的卷。在这种技术中,一个主存储控制器为相同或不同厂商提供的其他存储控制器提供虚拟化服务。尽管它提供存储虚拟化的大多数优点,比如数据迁移和复制,但是只能跨连接的控制器优化存储利用率,因此只能在连接的控制器范围内执行复制/数据迁移。

基于网络的虚拟化

基于网络的虚拟化采用连接计算机网络的文件级计算机数据存储服务器,它们为多个客户机提供数据访问。这些服务器是网络中专门用于存储的单元,没有键盘或显示器,通过网络控制和配置它们。它们包含一个或多个硬盘,硬盘常常布置成逻辑冗余存储容器或 RAID 阵列(廉价/独立磁盘冗余阵列)。这是最常用的虚拟化形式。它为连接它的所有虚拟化存储提供单一管理接口,还可以跨不同类型的设备执行数据复制。

输入/输出 (I/O) 虚拟化

这种方法从物理连接抽象出高层协议,从而简化 I/O 企业环境。这让一个物理适配器卡可以作为多个虚拟网络接口卡 (vNIC) 和虚拟主机总线适配器 (vHBA) 出现,为资源提供网络连接(LAN 和 SAN)。从物理角度来看,虚拟 I/O 用一条线缆替代连接服务器的多条 I/O 线缆,这条线缆为所有网络和存储连接提供共享的传输。服务器 I/O 是成功有效地部署服务器的关键之一,尤其是对于运行多个应用程序的虚拟化服务器。虚拟化服务器需要更大网络带宽,需要连接更多网络和存储。在虚拟化环境中,在一台服务器上运行大量虚拟机会导致 I/O 性能问题。

通过从物理连接抽象出高层协议,I/O 虚拟化可以提供比传统 NIC 和 HBA 卡架构更大的灵活性、更高的利用率和更快的供给。虚拟 I/O 技术可以动态地扩展和收缩,常常可以把连接服务器的多个网络和存储连接替换为一条线缆,这条线缆可以传输多种类型的通信流,因为配置更改是在软件而不是硬件中实现的。由于使用更少的卡、线缆和交换机端口,虚拟 I/O 可以降低成本并简化服务器管理,同时仍然实现出色的网络 I/O 性能。

客户机虚拟化

通过使用客户机虚拟化,用户的整个 PC 环境在数据中心中的共享服务器或专用的刀片服务器上运行,图形化显示输出发送到远程访问设备。客户机虚拟化的优点是,提供更高的数据安全性,更容易管理,减少最终用户的停机时间,确保业务连续性。

应用程序虚拟化

应用程序虚拟化是指把程序的执行与程序的显示分隔开;换句话说,程序在服务器上运行,但是把图形化输出发送到远程客户机设备。最终用户看到程序的完整图形化显示,能够用输入设备与程序交互。

桌面虚拟化

在桌面虚拟化中,用户的整个 PC 环境在中心服务器上运行,图形化显示输出发送到客户机设备。桌面虚拟化常常使用廉价的客户机设备提供最终用户显示和交互。这些瘦客户机可以是低成本的设备,只具有很有限的计算能力,没有本地磁盘存储。这可以显著降低每个职员最终用户设备的成本。

虚拟化的优点

虚拟化的重要优点包括:

  • 尽可能充分地发挥服务器硬件的处理能力。
  • 通过在单一物理服务器上驻留多个访客系统,数据中心可以供给更多服务器。
  • 虚拟化会减少物理服务器的总数,所以会降低能源成本。这会显著降低公司的总能源成本。
  • 基础架构更灵活,需要的工作人员更少,这会降低 IT 运营成本。
  • 虚拟化可以快速地分配资源,这会提高服务质量,让业务更快地开展起来。
  • 在任何情况下,虚拟机都可以在几秒或几分钟内轻松地转移到另一台服务器上,从而实现可靠的灾难恢复。
  • 客户机虚拟化允许在集中的服务器上维护客户机软件映像,因此可以简化升级并定期应用补丁。
  • 虚拟化让公司可以把能源、机器数量、冷却系统和使用的机器总数减少 90%,让 IT 更绿色。

敏捷软件开发过程

在本节中,讨论传统的瀑布模型和敏捷软件开发模型,重点介绍敏捷过程的好处。

传统的瀑布模型

传统的瀑布式软件开发的基本思想是,只要可以在一开始时收集所有需求,就可以按连续的阶段性方式构建复杂的软件系统。
一个阶段完成的设计作为下一阶段的一部分。最终,把整个设计实现为生产质量的软件。瀑布模型最大的障碍就是它的基本假设:在项目一开始时可以准确、适当地收集所有项目需求。这常常会导致产品功能错位或被用户误解。

传统方法的局限性

这种方法只用一次循环构建复杂的系统,并不重新考察相关方面的需求,但是由于市场战略和/或技术条件的变化,需求可能会变化。

敏捷开发过程的步骤见 图 6。这个过程从项目批准开始,然后是迭代前计划。接下来是迭代计划、执行和结束,根据项目的需求,这些步骤可能会重复多次。最后是迭代后计划和发布。

图 6. 敏捷开发过程

敏捷方法

敏捷软件开发方法更强调保证生产力和价值,而不是处理和记录开销和工件。敏捷方法强调快速行动、频繁的小规模发布、连续集成和测试,并通过让用户直接参与开发过程促进需求演化(见 图 7)。很多人认为敏捷方法背弃了成熟、可靠、久经考验的传统瀑布式软件开发方法,这种观念是错误的。尽管瀑布式方法常常被称为 “传统和古老的”,但是直到 1970 年 Winston W. Royce (1929–1995) 的一篇文章才首次提出了这个概念,当时软件工程与其他工程学科相比还处于幼年时期。

敏捷软件开发的哲学基础由四种敏捷价值构成。这些价值是:

人员和交互比过程和工具更重要。

任何组织最重要的方面都是它的人员。职员的智力水平和生产力决定组织的智力水平和生产力。如果操作工具和过程的人不称职,那么即使是最好的工具和过程也没有用。Belbin 的团队模型很好地说明了了解人员的需求可以提高组织的生产力。这个模型是由 Meredith Belbin 博士设计的,用来衡量在研究 Henley Management College 的众多团队时发现的九种团队角色的偏好。

有效的软件比全面的文档更重要。

软件开发生命周期的最终目的是开发软件或有效的产品,而不是文档;如果不是这样,它就该称为文档开发生命周期或文档组织了。准备文档很重要,应该完成,但是这个任务应该简化。应该清楚地理解以上原则的两重性。
客户协作比合同谈判更重要。

在敏捷开发周期中,相关方面的不断反馈是非常重要的基本组成部分。很多时候,客户在项目开始时并不寻求或需要某些东西,但是后来提出了要求,因为业务需求、市场战略等发生了变化。因此,一定要让他们参与产品开发并不断反馈。合同谈判不能替代客户协作;应该尊重并顺应客户交流的两重性。

响应变化比遵守计划更重要。

响应变化需要时间。市场、业务需求、技术甚至相关方面理解正在开发的系统的方式都会发生变化。因此,软件也应该反映这些变化。计划会强烈影响活动的过程和性质,但是计划应该是切实可行、灵活和可延展的,能够适应变化。

我们看到上面的四种价值都有两个部分。第一部分代表敏捷的价值,第二部分代表传统瀑布方法的价值。应该非常明确地理解一点:尽管我们应该重视传统价值,但是应该更重视敏捷价值。我们不应该放弃传统方法,但是也不应该过分依赖它。

图 7. 详细的敏捷开发过程

最常用的敏捷软件开发技术如下:

极限编程 (Extreme Programming, XP)
这种敏捷软件开发方法的目的是提高软件质量以及对客户、业务、市场需求变化的敏捷性。重要的 XP 规则和概念包括 “配对编程”(我创造了 “配对测试” 这个新词)、“培养有效的用户用例”、“度量项目速度” 和 “连续集成”。

Scrum
Scrum 是用于项目管理和开发的迭代式渐进模型。Scrum 概念包括产品 backlog、sprint backlog、产品 bur down 图表和

Scrum Master。

在敏捷开发中使用虚拟化技术

虚拟化支持两个动态目标:更快更有效地响应业务变化和提高 IT 资产利用率。有效的虚拟化可以把本地和远程资源连接和集成起来,最终形成隐藏在通用接口和资源存储库背后的各种实现。

集成虚拟化和敏捷技术是向实效计算发展的初步措施,在实效计算中可以在需要时通过 IT 基础架构自动地转移数据和计算能力。服务器和桌面计算能力等 IT 资源的虚拟化会满足市场对灵活性的需求。众所周知,有效的虚拟化可以提高资产利用率,让服务器、存储、网络和其他功能更模块化,由此提高可重用性。它还通过在需要时部署计算能力提高系统吞吐量和可靠性,还可以提高未充分使用的资源的利用率。

图 8. 在敏捷软件开发中使用操作系统虚拟化技术的示例

虚拟化可以应用于软件开发生命周期的不同阶段,而且根据用法的不同,每种虚拟化技术有不同的优点。硬件、网络、存储、I/O 和桌面虚拟化技术具有前面提到的优点,可以在任何软件开发模型中应用它们。操作系统虚拟化对于敏捷开发尤其有好处,因为它可以在不影响现有操作的情况下按需提供资源。因为敏捷开发强调依赖于原则,在软件开发生命周期的不同层次上消除浪费,通过使用操作系统虚拟化技术,可以让测试和开发等团队共享物理系统,还可以根据特定的需求设置系统。

敏捷开发包含简短的迭代,每个迭代最后都要执行测试认证。可以通过使用共享的操作系统实例节省设置测试机器的时间,因为这种技术在全局系统上安装软件,可以在所有共享的操作系统实例上使用这些软件,需要的工作量非常小。它还有助于减少所需的物理服务器数量和设置服务器所需的时间。这种技术还有助于为测试设置全新的环境,有助于在安装和功能检验期间探测一次性问题。

结束语

在敏捷软件开发中应用虚拟化技术可以在不同的阶段更好地消除资源浪费,由此改进能源效率、灾难恢复、机器使用量、冷却机制、开发时间和产品质量。



由外而内看敏捷软件开发
架敏捷开发中史诗故事与用户
看板任务管理
面向全球化的有效敏捷交付
小型团队快速开发方法
DevOps,不是一个传说!
更多...   


统一过程及应用
敏捷过程实践
基于XP/RUP的迭代开发
软件开发过程指南
SCRUM过程实践
敏捷测试-简单而可行


某博彩企业 产品经理与产品管理
北京 研发团队与工作管理
广东金赋信息 敏捷开发过程与项目管理
某支付平台 软件配置管理与发布管理
富士 软件外包项目管理与进度管理
塞孚耐 基于Scrum的敏捷开发
更多...   
 
 
 
 
 

组织简介 | 联系我们 |   Copyright 2002 ®  UML软件工程组织 京ICP备10020922号

京公海网安备110108001071号