一 项目背景
为公司其他部门提供的虚拟机运行在Vmware,Citrix的产品上,它们各自都是由相应的客户端管理虚拟机。为了能够通过WEB方式对虚拟机进行统一化管理,我们开始寻找已有产品的官方解决方案,但是Vmware,Citrix官方的虚拟化WEB管理工具都是需要付费购买。本身Vmware,Citrix的产品也不是开源的,从公司的利益以及其他技术方面的角度考虑,我们将采用开源的虚拟化平台软件来完全更换现有的商用虚拟化平台软件。
二 开源虚拟化管理程序的选用
熟知的开源虚拟化管理程序有XEN和KVM两种。
1.XEN介绍
XEN是一个开放源代码的虚拟机管理程序。由剑桥大学开发,它打算在单个计算上运行多达128个具有完全功能的操作系统。在旧的处理器上运行XEN,操作系统必需进行显式地修改以在XEN上运行。这使得XEN无需特殊硬件平台支持,就能达到高性能的虚拟化。
XEN通过一种叫做半虚拟化的技术获得高性能的表现。在比较旧的硬件平台上,没有CPU的虚拟化支持,XEN可以通过半虚拟化获得比较高的性能。半虚拟化使用虚拟机管理程序分享存取底层的硬件,但是它的客户操作系统集成了虚拟化方面的代码,该方法无需重新编译或引起陷阱,因为操作系统自身能够与虚拟化管理程序进行很好地协作,半虚拟化技术的优点是性能高,特别是I/0方面,但是操作系统需要进行更改,用户体验方面不强。
XEN也支持全虚拟化技术。全虚拟化技术也称为原始虚拟化技术。它使用虚拟机协调客户操作系统和原始硬件。全虚拟化最大的优点是操作系统不需经过任何修改,但是性能方面不如半虚拟化。
2.KVM介绍
KVM全称是Kernel-based Virtual Machine,即基于内核的虚拟机。KVM项目代表下一代开源虚拟化。该项目的目标是通过建立在先前的技术和充分利用当今的硬件条件下创造出一个现代的虚拟化管理程序。KVM以一种可加载模块的方式移植到linux内核中,它将linux转换成一种可以裸机安装的虚拟化管理程序。KVM项目已证实有两种关键的设计原则帮助它迅速地成为一个可靠的,高性能的虚拟化管理程序,并且凭借这两点它打败了其他开源虚拟化管理程序。
首先,因为KVM是在硬件支持虚拟化出现后被设计的,所以它没必要植入特有的硬件所提供的特性。KVM虚拟化管理程序需要CPU支持Intel VT-X 或者 AMD-V,然后通过CPU的这种特性来虚拟出CPU.
通过需要硬件支持而不是尽可能的优化硬件,KVM可以设计出一种以优化好的虚拟化管理程序解决方案,而不需要安装以支持旧的硬件的软件包,或者需要修改客户机操作系统。
其次,KVM项目组尊崇一条格言,”不做重复发明”。为了能够虚拟出CPU和内存,虚拟化管理程序需要许多组件,例如,内存管理器,进程调度器,I/O堆栈,设备驱动程序,安全管理器,网络堆栈。实际上,虚拟化管理程序是一个特别的操作系统,区别于实际的操作系统在于,它是为了运行虚拟机,而不是应用程序。因为Linux内核已经包含了
一个虚拟化管理程序所需的核心组件,所以没必要从头开始写所有的组件。KVM项目组在2006年11月向Linux 内核社区提交了KVM的代码,并且在2007年1月,KVM将被包含在Linux 2.6.20 内核中。
除了得到社区的支持外,KVM还得到一些软件行业先锋的支持,包括Red Hat, AMD , HP ,IBM, Intel, Novell, Siemens, SGI等。
3.XEN和 KVM的对比
是较早出现的虚拟化技术,XEN是”第一类”运行在裸机上的虚拟化管理程序,也是当前许多商业化公司的基础技术。 XEN
XEN的优点
作为开源的虚拟化技术,对比XEN和KVM可以看到,XEN的优势在于:更好的可用资源,平台支持,可管理性,实施,动态迁移,和性能基准。
可用资源:XEN比KVM早出现4年之久,随着Citrix,Noverll,Oracle等在市场领域的实施,比较容易找到精通XEN的IT技术人员。
平台支持:XEN在新版中支持更多的主机和客户机操作系统。
可管理性:有调查显示,对比XEN和KVM,XEN有更广泛的第三方配给,备份,存储管理,P2V,容量规划,性能监控,进程自动化,安全等。
实施:XEN的运行和管理都是在较低级别的(Ring 0)。对于新建的虚拟机,客户机
不像KVM那样共享内存块,CPU指令或者任何底层的Linux操作系统。
KVM的优点
即使没有实施广泛的XEN和KVM性能基准研究测试,仍然有足够的理由说明Linux的领导者(Red Hat 和 Ubuntu)对待KVM的态度的原因。其中最重要的原因就是KVM是Linux内核中的一部分,而XEN只是运行在Linux内核下的一个产品而已。之所以这一个原因很重要,是因为在过去XEN工作环境的补丁包不能够和Linux内核兼容,但是实施KVM的话,这个问题就可以得到解决。另外一个选择KVM的原因是KVM在Linux内核内部部署,这样可以很容易控制虚拟化进程。
XEN的拥护者声称KVM不如XEN技术成熟,并且缺少某些关键特性,如动态迁移和半虚拟化支持。XEN工作环境中的泛虚拟化技术可以使虚拟机的操作更加高效,因为半虚拟化技术直接硬件硬件进行交互。然而使用半虚拟化技术需要修改操作系统,默认Windows的安装不支持半虚拟化技术。至于动态迁移,KVM也可以做到,只要安装正确的版本就行。
从另一角度来说,KVM更加灵活。由于操作系统直接整合到Linux内核的虚拟化管理程序中,在任何场景下都可以直接和硬件进行交互,而不需要修改虚拟化的操作系统。这一点对虚拟化运行来讲KVM是一个更快的解决方案。KVM需要CPU具有物理地址扩展功能,这将不是问题,因为现在大多数服务器的CPU都具有此功能。
作出选择
基于以上分析,结合现有硬件条件以及其他各方面因素综合考虑,我们将采用KVM
作为虚拟化管理程序来大量部署。
三 开源虚拟化管理程序WEB管理工具的选用
基于项目的需求,我们渴望选用一款优秀的软件,能够通过WEB方式对虚拟机进行方便的管理。我们期望它具有以下几个要点:
●最好是免费开源的,如若要收费希望费用是比较合算的
●界面比较友好,能够通过WEB对虚拟机进行部署,开机,关机,重启,备份,迁移,远程桌面查看等
●最好是能够具有多用户权限,能够进行多用户管理。
●能够清晰明了的查看虚拟机宿主机的状态,包括CPU使用率,内存使用率,能够查看虚拟机的CPU使用率,内存使用率。
●可以基于模板的方式部署虚拟机。
●提供二次开发接口,方便以后作二次开发
●较好的安全机制,能够安全的通过WEB连接。
●扩展性要强。
从KVM的官方网站上可以看到基于WEB方式的管理工具还是有很多,例如,RHEV,
Proxmox VE,ConVirt,oVirt,OpenNode,openQRM,CloudStack等。经过了解和测试,最终我们选出两种相对比较优秀又是开源产品的管理工具,ConVirt和CloudStack。
1.CloudStack介绍
CloudStack是一个用Java编写的开源软件,它被设计成一个能够部署和管理由虚拟机构成的大型网络,高可用,可扩展的云平台。CloudStack目前支持大部分流行虚拟化管理程序,Vmware,Oracle,KVM,XenCenter和XEN云平台。CloudStack提供三种管理方式,易用的WEB接口,命令行和功能强大的RESTful API。
在测试过程中,发现CloudStack不能支持本地存储和通过本地ISO镜像来部署。CloudStack是采用第一存储设备来存储虚拟硬盘,第二存储设备来存储ISO镜像和虚拟硬盘备份。CloudStack支持以模板方式安装虚拟机和ISO镜像安装虚拟机,使用ISO镜像来安装需要通过HTTP方式从服务器上下载到第二存储设备,但是速度相当慢,基于这些原因我们将不采用CloudStack。
2.ConVirt介绍
ConVirt是一个多层结构的基于WEB的应用程序,它能够对虚拟化环境进行部署,管理和监控。ConVirt是一个独立的,完整的解决方案,无论是管理一台独立工作站上的几台虚拟机,还是管理一个数据中心里成百台服务器上运行的成千台虚拟机,它都可以很好地管理。
以下是ConVirt的一些显著特性
●同时可以管理XEN和KVM虚拟化环境
●可以基于模板方式部署
●界面友好的仪表盘
●动态迁移
●可以管理VM的整个生命周期
●方便的存储和网络管理功能
●支持多种操作平台
●所有的操作都可以在WEB接口中执行
●允许多个管理员管理同一个虚拟化环境
●提供对服务器和虚拟机的历史数据进行分析
交互式的WEB接口
ConVirt提供一个高可用的交互式接口。
历史数据分析
异步任务执行引擎
信息丰富的仪表盘
四 部署
1. CMS部署
CMS即ConVirt Management Server。由于CMS的安装需要python2.5以上的版本支持,而RHEL5.x/CentOS 5.x的python版本是2.4,为了减少因为软件依赖性带来的问题,我们将采用CentOS6.x作为CMS服务器。值得注意的是,倘若一台CMS上的MySQL数据库中数据量过大后,我们将对MySQL数据库进行分离。
2. Convirt宿主机部署
就目前的需求来说,我们不能采用PXE方式自动宿主机,因为PXE方式需要DHCP的支持,同时也由于在替换一部分宿主机的同时,另外一些虚拟机需要运行,所以我们将初步采用U盘引导+网络安装+Kickstart的方式逐台替换。具体步骤详见< 3. 存储及网络管理 提供多种存储方式,可以将虚拟硬盘,操作系统模板和操作系统ISO镜像存储到本地硬盘,也可以存储到NFS服务器上。初始配置对每台运行的Windows 2003分配至少50GB的虚拟磁盘空间,如若需要扩展,将采用NFS服务器和用Samba或OpenNAS作为备用存储。ConVirt 网络地址采用静态IP地址,配置公司内网地址。 在软件项目开发管理过程中,不仅要努力实现项目的范围、时间、成本和质量等目标,还必须协调整个项目过程,以满足项目参与者及其他利益相关者的需要和期望;随着软件规模和所涉及的领域不断地扩大,软件项目的管理越来越困难。纵观所有失败的软件项目,基本原因是不能管理其软件过程,在无纪律的、混乱的项目状态下,组织不可能从较好的方法和工具中获益。严谨的软件过程控制与管理不仅可以在每个阶段回顾和纠正项目的偏差,识别软件项目的风险甚至果断中止项目,而且可以将人才流动所带来的不利影响减少到最小。要进行有效的过程控制,必须明确软件项目管理流程。 软件项目管理总体流程设计为项目搜寻、立项、售前、合同生成和合同执行等5个主 要阶段,分别以P1、P2、P3、P4、P5表示;同时设计了立项完成、合同签定、功能定义、软件开发、项目验收等5个里程碑,分别以TM1、TM2、TM3、TM4、TM5表示,如图1所示。在这些流程中,合同执行流程是软件项目管理的核心,其主要过程有:产品定义、软件开发、测试执行、内部验收、项目实施与验收、项目维护。 图1 软件项目管理总体流程 软件项目管理总体流程分析 1项目搜寻 项目搜寻是项目立项的基础,项目搜寻阶段的主要任务包括市场信息收集,用户需求跟踪,对潜在的项目进行分析和筛选。 2项目立项 立项阶段的主要任务是确认立项的理由,提出立项建议,提供合适的资金和资源,使立项建议成为正式项目。 3 项目售前 售前阶段从项目立项开始到项目合同的签定结束,主要工作有:制定与客户的交流计划,详细了解客户的背景资料,了解客户启动项目的缘由、目的和期望,编制项目方案建议书,准备合同蓝本。 4合同生成 合同生成阶段的主要工作有:项目方案的评估与确定,技术合同、商务合同的商定、评估与签署。 5合同执行 合同执行是软件项目管理流程的重点,可分为软件开发、测试执行;内部验收、项目验收、系统维护等五个基本工作过程。 5.1软件开发 软件开发阶段分为:需求调研、系统分析、系统设计、编码、单元测试等过程。主要从三个方面进行管理: 1) 制定项目计划。软件项目计划是一个用来协调所有其他计划,以指导项目执行和控制的可操作文件。它体现了对客户需求的理解,是开展项目活动的基础,也是软件项目跟踪与监控的依据。 2) 确定开发过程。根据软件项目和项目组的实际情况,建立起一个稳定、可控的软件开发过程模型,并按照该过程来进行软件开发。 3) 加强过程控制。过程控制主要包括过程管理、变更控制和配置管理。 5.2测试与执行 项目测试的目的是检查系统是否符合项目合同与任务书规定的要求。项目测试分集成测试和系统测试,主要进行功能测试、健壮性测试、性能—效率测试、用户界面测试、安全性测试、压力测试、可靠性测试、安装/反安装测试等。测试过程在模拟运行环境中进行。 5.3内部验收 项目完成集成测试和系统测试后进行项目内部验收,主要有三个步骤:1)文档准备。项目经理提交内部验收计划、项目开发总结报告、产品发布清单;财务主管提交项目财务预算报告。2)内部验收测试。内部验收测试的测试内容与方法虽然与系统测试基本相同,但应站在用户验收的角度进行,因为它是试运行的基础,通过这一步,为用户验收作充分 的准备。3)内部评审。对提交的所有文档及测试结果进行内部评审,完成项目开发总结报告。 5.4项目试运行与验收 试运行与用户验收阶段的主要任务是,使所有的工作产品得到用户的确认。主要工作有: 1) 验收前的准备。项目经理负责检查产品的完整性,包括文档、介质和中间产品等,以确保现场实施的成功;负责应用软件的现场安装调试,完成安装调试总结报告;负责制定用户验收计划,并得到客户的确认。 2) 用户进行验收测试和系统试运行,进行文档和系统的移交。 3) 用户确认。项目经理负责与客户协调,协助用户进行项目验收,形成用户验收报告。 当今,好的组合项目管理已经成为了保证新产品研发成功的关键因素,但是在现在即使大型的团队协助中我们仍然在规避好的组合管理这种方法和话题。通过这篇文章可能会给大家一些启示和借鉴。另外本文不是完全对应翻译,有些内容是个人理解后增加的内容。 在新产品研发的过程中,涉及到项目选择决策和资源高效分配等诸多问题,要有效的解决这些问题必须要引入一种专业和系统的方法论,因此在这里我们引入了项目组合管理的概念,也提出了10条组合管理中的最佳实践。 1.专注于项目端到端数据的完整性 如果项目本身的执行数据不准确和完整,那么世界上最好的项目选择系统也毫无价值。缺乏良好和早期的信息是所有公司在进行新产品开发中头疼的事情,新产品开发项目已经开始了,但他们往往还不能清晰准确的获取到客户的需求,客户对价格的敏感度以及客户对产品构想的交互和认同度。 在我们的调查分析报告中,可以明确的看到在新产品开发开始前就进行了充分的前期市场调研和用户需求分析的的公司取了巨大的成功。关于客户的需求和问题,客户对产品价格的敏锐度,客户对产品的交互反映,关于要研制产品的价格,功能等方面的竞争力分析,市场规模和潜在风险等各个方面的内容都是新产品研发正式开始前就必须要进行的,从下面的对比图上也可以清晰的看到成功的公司和最差的公司间一般都存在着2-3倍以上的差距。 要为组合管理中的项目选择和决策获取有效的数据,首先要做的就是决定我们需要进行决策的依据和数据,目标和出入口准则都进行了明确的定义。如果我们不清楚我们决策的目标和依据,那么就无法指导我们制定更加详细的数据收集和分析计划。 第二点就是在新产品开发过程中,工作量的重心应该是从后往前移动,在新产品开发真正开始前的前端工作反而需要成为我们管理的重点。在丰田的高效产品开发七要素中,前端装载(Front-Loaded)流程就是核心要素之一,这使得丰田能够最小化产品开发过程中的偏差和变更,保证开发过程的质量和效率。 2.开发一个想法落地和实施的具体流程,并使流程能够推行实施 在新产品开发正式开始的前端,我们需要进行各种市场和研发相关的活动,通过这些活动可以使我们的想法真正得以实施和落地。比如初期的概念原型,市场评估分析,技术评估分析,市场调研,概念测试,业务和财务目标分析诸多活动都可能是在前期就必须进行和完成,因此针对这些活动我们必须要制定相应的流程支持,并明确的定义各种活动间的依赖关系,活动的具体产出物,活动完成和阶段结束间的关系。 另外,我们设置这些重要的阶段和关卡的目的,不仅仅是进行项目的回顾和里程碑点的坚持。这些阶段点更多的是一些赌注点和决定项目的生死点。对于产品开发和项目执行过程中逐渐暴露出来的收益预期不佳或风险增大的项目都可能成为组合管理中被砍掉的项目,以满足企业总体的战略目标和需求。 3.采用一种增量的承诺实现的方法 当我们购买产品或做一项投资的时候,我们为了降低风险往往也采用了一种增量渐进的方式。开始只是投入一小点资金,当看到资金投入产生的结果并对结果进行分析后,再确定是否需要继续投入还是放弃。因为我们清楚的知道,在前面做出是否放弃的决策容易,但一旦倾家荡产的陷入其中之后,要再做出这种是否放弃的决策将异常困难。 在我们公司,项目就像急速的火车,一旦驶出站台就不断的提速。而我们设置了很多的车站,这些车站可以让火车慢下来或停止下来。但是一旦火车达到了最终目的地,正如我们产品开发完成已经投入市场,我们就很难让它们在停止下来,或者说这个时候的停止将已经造成的巨大的损失。 在快速的产品开发过程中,我们不断的犯错误,或者我们只有通过不断的进行才能够使问题暴露出来和日渐明晰。因此让我们的想法实施和落地的流程必须是一个增量的承诺实现的过程。在整个过程中我们不断的降低和量化项目的风险,提高整个项目的可视性。 4.知道什么时候离开 在很多企业中,尽管在整个产品研发流程中建立了相应的阶段决策点和关卡放行点,但是管理层仍然缺乏这种意愿和机制以终止掉当前运行不佳的项目。管理层必须充分意识到,能够正确的下决心杀掉不佳的项目反而是新产品研发成功的关键,这种决策将我整个公司省一大笔钱和减少一大堆的麻烦。 5.某中规格和大小并不能适合所有项目 如果你的财务顾问采用相同的方法来评价和选择你的不同投资,比如股票,债券和实物资产等,那你最好是重新选择了一个顾问。对于不同的投资我们必须采用不同的评价准则和策略,在我们的新产品开发项目中也同样如此。对于小型增量维护型项目,新产品开发项目和平台型项目有太多的不同点和差异,而解决方法就是要根据项目的特征进行重新的分类。 我们大致可以分为小型增量维护型项目,新产品开发项目,平台型项目和客户定制型 项目等几大类型。由于项目类型的不同他们需要采用不同的项目决策目标,生命周期模型,质量控制标准和具体的过程定义。比如对于维护改进型项目由于项目本身已经较成熟我们控制的重点是财务和成本控制,而对于平台型和新产品开发项目我们控制的重点可能则是产品的质量。 6.选择项目并不存在简单直接的最佳方式或方法 在战争时代,高级军官为了决定敌军无线电的准确信号,他们需要在某一个可能区域画一个三角形,设置三个检测点,仅仅是因为一个检测点往往并不能得到全面准确的信息。在新产品开发中,当我们努力去做出项目选择和淘汰决策的时候,我们意识到所有的方法都显得不可靠。我们需要考虑的是多种项目选择方法相互结合以做出准确可靠的决定。我们可以用三种以上的选择方法进行综合比较和决策。 7.尝试使用记分卡-一种高效当经常被忽视的方法 记分卡方法的拥护者强调在新产品开发中,为了保证新产品开发的成功很多的定性因素和要素都是已知的。比如产品开发中的风险,产品市场前景和吸引力,技术,遇到的竞争等等。我们可以讲这些要素制作到打分卡中,并根据企业的业务目标和战略绝对每一个因素的权重,最终来得到每个项目的总分。这种方法是一种更加科学的结构化决策的方法,可以帮助我们进行项目的选择。 8.使用成功准则和法则 宝洁公司是应用成功准则的典范,它们为新产品开发或项目的每一个重要的阶段都指定详细的成功准则,并获取到管理层和项目团队的认同。这些法则成为了判断项目是淘汰 还是继续的简单实用的选择法则。 注意这些成功准则并不是简单的定性法则,而是一系列的可以量化和用数据说话的判断规则。其中包括了利润,成本,上市时间和进度,首年销售额等多项指标。这些准则也不是一成不变,而是可以根据客户和市场目标导向进行裁剪。 9.使用正确的财务判断法则 许多财务人员在进行投资收益分析的时候喜欢采用NPV净现值方法,因为NPV承认了资金的时间价值,但是为了防止NPV方法被误用需要注意的是: 首先对于周期短和规模小的项目不适合采用该方法,直接采用销售成本分析等方法将显得更加简单有效。 其次对于新产品开发的项目,有用存在太多的不确定性和风险,应该采用通过概率系数修正后的NPV方法进行评估。举例来说,对于预期的财务收益应该都是增加了决策树分析和蒙特卡洛模拟后增加了不确定性和风险系数后的指标。 另外可以使用生产率指标作为NPV指标的扩展,通常由于企业资源的约束,项目都必须要进行优先级的排序以获取资源。生产率指标是基于TOC约束理论演变过来的财务方法,这种方法的目的就是在存在资源约束的情况下,是组合项目的价值得到最大化。 10.定期回顾和复审项目组合,以重新标定优先等级 项目选择和淘汰的过程并不是仅仅存在于项目开始的时候,也存在于项目执行过程中。我们通常需要在大的阶段或里程碑点对选择的项目进行回顾,对项目执行中的各个重要状 态参数进行复审,以确定项目执行是否正常,风险是否根据量化和明晰,将这些逐步已经量化的参数重新放入到选择准则中后进行计算,就可以得到组合中各个项目新的优先级。 因篇幅问题不能全部显示,请点此查看更多更全内容