虚拟化——互联网时代的产品开发加速器

2019-04-17    来源:infoq.com

容器云强势上线!快速搭建集群,上万Linux镜像随意使用

高技术高竞争的互联网时代,对产品的交付时间逐步变短,而对交付质量的要求逐步提高,各种新创意、新产品层出不穷,市场允许的产品推出周期也越来越短,传统的软件开发模型已经无法跟上当前的需求,高效、便捷、可迭代的产品开发模式也越来越为人们所关注,虚拟化技术正是体现这种开发模式最重要的工具。

从功能上讲,虚拟化的优势一是提高资源的利用率;二是提供多样化的配置管理;三是提供快照的保存和恢复功能;四是提供产品动态扩展的能力,这些也都是互联网产品开发模式所需要的重要特性。

我通过一年前的项目经历和目前应用虚拟化技术后的项目经历的对比,来说说虚拟化技术如何在开发、测试、上线部署各个过程中的作用。

简要介绍一下当时跟现在的开发条件。

一年前我所在的项目组一共有6台开发机,2台测试机,6个开发人员和2个测试人员,机器由团队公用,每个开发人员会被分配一个以自己名字命名的独立账号,开发人员使用这个账号登录系统并进行开发工作。相信这也是大部分公司的标准配置。

现在我所在的项目组有10台开发测试机,在功能上没有做特别的区分,一共有24名开发兼测试人员,没有专门的测试人员。开发人员通过登录属于自己的虚拟机进行开发工作。

开发阶段的作用

虚拟化在开发阶段的作用有两个关键点:

第一,快速的环境搭建

开发初始,需要一个资源分配的过程,而开发人员往往无法得到需要的灵活的硬件资源,一般可以得到的是一个账号,和一个确定操作系统的机器,这有三个原因,首先是硬件资源有限,无法保证每个开发人员能有一台独立的开发机,只能采用公用机器,通过不同账号进行隔离的方式;其次由于机器共同使用,多人同时开发,所以无法依照自己的意愿进行环境调整;第三是因为服务器进行操作系统变更的代价很高。如果开发确实需要定制的环境,需要变更操作系统,在我们以前的团队里,需要提交单独的变更单,经重重审核后到系统工程师,系统工程师到周五安排下周的操作,所以从提起申请到操作一般要经历一周时间。即使进入实际操作阶段,系统重装耗费的时间也很长,安装系统的时间占用在30分钟左右,服务器系统重启的时间在8-15分钟,重新下载和配置软件的时间在1小时-3小时不等。总体说来,重建一次系统环境至少需要半天时间。

在这种情况下,开发人员在开发伊始就没有得到期望的良好开发环境,只能在整个开发过程中带着镣铐跳舞。

再来看一下目前的状况,我们应用Xen虚拟化技术,很好的解决了这些问题。开发人员在开发进行之初,提交需要的环境配置列表,配置管理人员按照开发的请求,从镜像库里选择对应的虚拟机镜像,再找一台合适的物理机由该镜像生成虚拟机,交付给开发人员使用,虽然硬件资源依然有限,但由于虚拟机所占的物理资源较少,可以保障每个开发人员都拥有自己独立操控的环境。而整个虚拟机的创建时间在1-5分钟即可完成。

由于拥有的是独立的一台虚拟机,其资源跟其他的开发人员完全隔离,开发人员可以自主进行系统配置。在需要的时候也可以随时进行重装请求,重装操作非常简单,删除虚拟机,从镜像库生成一台新的虚拟机即可,原先需要一周多提供的初始系统现在在1-5分钟即可完成。

图一:目前一个开发人员的的开发测试机

第二,独立的运行环境

在以前的配置下,由于系统被多人共用,或者已历经开发多个项目的时候,很多系统环境参数已经经过了多轮配置,导致整个开发环境暗流汹涌,隐藏着诸多冲突因素。同时,由于多个账号同时使用,分属于不同账号的模块之间也会产生冲突,最常见的如端口冲突,这往往通过开发人员之间协调好彼此模块使用的端口号解决,但也不可避免的遗留下一些问题,比如我们遇到过一次故障,就是开发在提交产品时忘了修改内部某个模块的通信端口导致的。还有一次开发人员在程序出错之后花费了大量时间精力查找原因,最后悲催的发现是另一个开发人员在系统上做了某个工具库的升级。此外,由于某个开发人员的程序问题把机器跑死从而导致其他程序无法运行的问题更是家常便饭。

迁移到虚拟化的环境下,共享开发环境的问题也迎刃而解。由于虚拟机自身的独立性,每台虚拟机都是一整套完整而隔离的系统,虚拟机之间有充分的隔离,开发人员不用再担心端口问题,系统参数问题等,用自己的机器自然对系统的一切变化均了然于心,当出现bug时,开发人员也可以把时间精力集中在程序功能的调试上。

测试阶段的作用

开发完成后进入到测试阶段,虚拟化的重要性更加显现,虚拟化在测试中的重要性体现在四个方面:

第一,灵活的环境选择

测试人员首先需要有一套良好的测试环境。在以往的测试中,需要由测试人员提出环境申请,在测试机器上重装系统,按照测试要求配置好系统参数。在物理机上操作,一般1天左右,测试人员可以拿到自己需要的环境。但由于测试的多样性,如果说开发阶段一天时间准备好环境还能接受的话,对于测试来说这是非常难以容忍的,因为测试更强调环境的多样性。例如我们的产品需要同时提供对Windows环境,Linux环境的支持,以及对Windows和Linux的各个不同的发行版的支持。这种情况下,每次产品测试都是一个痛苦的过程,系统工程师需要根据测试进度随时重装系统,以便提供出不同环境配置的机器,而测试则等待系统工程师提供好环境后才能进行下一个环境的测试。

即使环境已经提供,每个环境里还需要加上不同的应用组合,比如前端产品需要测试对主流浏览器的支持情况,浏览器包括IE,firefox,chrome,safari,opera等等,对于每款浏览器还需要考虑不同版本,如IE6,IE7,IE8等。更可怕的是,同类型的很多浏览器不能同时装在一个系统里,IE系列即是如此,这种情况导致了测试环境的变更极其频繁,系统工程师往往不堪重负,测试工程师则抱怨需要的系统环境迟迟不能提供。

在我们当前的项目组里,该问题已经不复存在。虚拟化系统里早已创建好对应于多个不同操作系统的模板,例如CentOS 5.4,Ubuntu 10.04,Windows 2003 Server,Windows 2008 Server,Windows xp,Windows 7等等,在测试需要的时候可以由模板迅速生成对应的虚拟机,每个虚拟机的生成时间在1-5分钟。同时,对应不同的应用和环境的组合,也单独生成一个模板,比如Windows 2003 server+IIS的模板,Windows xp + IE8的模板,需要时轻轻点击生成虚拟机,一套可用环境就出现了。模板的形式见图二和图三。

图二:截取的Windows部分镜像

图三:截取的Linux部分镜像

标签: 加速器 产品 

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。

上一篇:增强应用“可用性”的10条设计原则

下一篇:中型项目管理中所涉及到的一些文档整理