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

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

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

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

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

一年前我所在的项目组一共有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部分镜像

第二,资源的按需分配

虚拟化情况下资源的按需分配是一大重要特性。如果物理资源足够多,那么可以在每台物理机上单独部署一套环境,提供给开发人员使用,但这种方式占用的资源极多,比如我们目前已经保存的镜像环境就有56个,如果使用56台物理机搭建环境的话则是极大的资源浪费。

正是由于测试环境的机器有限,需要虚拟化做到真正的按需分配资源。虚拟机只有在运行时才会占用CPU,内存,网络资源,当虚拟机关机时,其消耗的仅仅是镜像占用的磁盘资源,目前我们每个初始镜像的大小都在1G以内,56个镜像占用的空间都没有超过50g。

同时,工程师在测试时也养成了良好的使用习惯,停止测试时关闭虚拟机,这样现有的10台测试机可以发挥20,甚至40台机器的作用。

资源按需分配的另一点好处是测试人员可以轻松保留以往的测试环境,一年前我们隔壁的项目组有个约20台机器组成的集群,是为很久前的一款产品测试准备的,那款产品还在维护,所以这套测试环境大概每个月使用一次,但因为配置复杂,资源没人敢回收利用,只能由其一直闲置。

而在用了虚拟化技术之后,我们对项目中对应于每个模块发布版本的测试环境,都做了做一份备份,在测试完成后关闭虚拟机,制作镜像保存。在需要的时候再由镜像生成虚拟机进行测试。其代价仅仅是多占用了一些磁盘空间。

第三,高效的快照回放功能

快照回放功能对于测试而言意义极其重大,实际上这也是最受测试工程师们欢迎的功能,没有之一。其主要的应用场景有两点:

第一是用于分支检测的场景。产品从A点有两个选择方向A1和A2,测试工程师选择路径A1,当A1测试完成后需要回到A点进行A2的测试。在以前,我们是通过先重新走到A,再进行下一步操作的。当路径复杂之后,这是一项非常耗时的工作,而且因为两次操作不可能完全一致(比如每步的操作延迟不同)可能会导致无法真正走到A点,从而降低了测试的可靠性。

虚拟化快照是解决这个问题的最佳方案。从我们的实践经验来看,在面对分支选择时,只需要在A点做一份快照,接下来便可以放心的进行A1分支的检测了。当A1检测完毕后,恢复虚拟机至A点快照的状态,接下类就可以顺利的走A2分支了。整个过程非常流程,减少了通过操作恢复A状态的工作,快照的创建和恢复都在1-2分钟内,大大节省了测试时间,也提高了测试可靠性。

第二是故障现场保留。以往测试人员在发现产品bug后,会进入一个两难的境地,该bug很可能无法每次都顺利复现,那么如果继续测试会破坏现场环境;如果保留现场叫RD来查找原因,可能临时找不到RD,而且RD定位问题本身也需要时间,这种情况下环境被占用了,进一步的测试工作就被耽误了。

利用虚拟化快照技术,测试人员只需要在此时进行一次快照,保存完整的虚拟机环境,可以在RD有空时恢复这个快照给RD看,或者直接将虚拟机镜像丢给RD,RD从此镜像生成虚拟机,进行debug工作,原先的测试工作也可以顺利的走下去了。

对于rd而言,有了一份保存bug后的环境,也可以放心的进行各种调试工作了。

第四,特殊环境的模拟

由于测试环境的硬件限制,在很多时候无法模拟出产品的真正应用场景,比如我们正在做的一个网络模块开发,需要测试三块网卡情况下的应用场景,但是测试机只有两块网卡,无法模拟出来。于是我们在Xen的同一个网桥上了里创建3块虚拟网卡,就很好的解决了这个应用场景面临的问题。

另外,我们另一个项目需要进行集群化测试,同样是由于测试环境的硬件限制,无法达到集群化的机器数量要求,于是我们在一台物理机上搭建多台虚拟机,解决了这个问题,最后这个项目是创建了20台虚拟机完成了测试。

最后来说说产品部署和运行阶段,虚拟化的意义。

部署、上线阶段第一,增强产品预发布功能

在产品正式上线之前应该有一个预发布的过程,即将产品先在预发布环境上线,跑一段时间稳定后再上线生产环境。因此预发布环境需要模拟生产环境的系统架构,并要保证机器数量,由于硬件资源的限制,这个过程甚至经常被取消掉,从而增大了产品风险。

目前我们团队,基于虚拟机搭建了一套完整的预发布环境,跟生产环境做到了基本一致,在多次的产品上线过程中也现了很多问题,做到了防患于未然。

第二,产品服务能力的动态扩展

产品上线后一天的业务流量往往并不是一个正太分布,而是较为极端,在早晨流量最低,在晚上流量突发很高。以往的业务上线时,一般都按照预计的最大流量上线机器,当流量低时系统资源十分浪费,比如很多物理机器的CPU利用率都在1%以内。而当流量突然增大到预期之外时又非常难以应对,紧急上机器时间不够,也十分容易出错。这是一个让运维人员非常头疼的问题。

我们线上也同样应用的虚拟机,使用虚拟化技术很好的解决了这一问题。现在上线前,只需要准备好业务相关的镜像即可,通过流量和性能监控,随时观察系统的负载概况,在负载低时可以选择关闭几台业务虚拟机,当负载突发时立即通过镜像创建更多的虚拟机提供服务,从而高效的解决了流量变化的问题。

总结

虚拟化技术在产品的整个上线流程中起到了重要的作用,是互联网时代产品开发的有效工具,虚拟化技术的按需分配,快照功能,隔离功能,动态扩展能力等都将为产品开发提供极大的便利。

本文来自:http://www.infoq.com/cn/articles/dh-virtualization-product-development-accelerator

时间: 2024-09-19 03:35:58

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

互联网时代,产品定位就是圈子定位

不同圈子的人会普遍使用不同品牌产品,这在前互联网时代如此,后互联网时代同样如此.例如:MSN VS QQ--商务圈VS生活圈:Evernote VS 有道云笔记--中产圈VS屌丝圈:微信 VS 陌陌--熟人圈VS生人圈等等. 每个人都有自己的圈子,每个圈子的成员都有他们相似或相同的爱好,每个圈子相对来说也都有他们习惯使用的品牌和产品.正所谓物以类聚,人以群分,开法拉利.兰博基尼的人大概不会经常与开夏利的人混在一起,穿戴普拉达.古琦的人大概也不会经常和穿阿迪.耐克的人混在一起. 在前互联网时代,由

移动互联网时代催生产品商圈广阔前景

2010年1月15日,中国互联网络信息中心(CNNIC)发布了<第25次中国互联网络发展状况统计报告>.报告称,截至2009年12月,我国网民规模已达3.84亿,其中手机网民在去年一年内增加了1.2亿,成为我国互联网用户新的增长点.至此,手机网民规模达到了创纪录的2.33亿,占到网民总体的60.8%.这也预示着,由移动网络.手机终端引领的手机网民进入了快速增长期,并将开辟我国互联网发展的新阶段.四大因素促移动互联网时代来临 首先,3G手机上网成为必然的趋势.2009年1月份,3G的正式发牌是通

别把体验不当事(上):互联网时代,以用户为核心造产品

产品体验,为什么越来越重要 有人的地方就有江湖,而江湖中总是盛传着领袖们的传说.和东邪西毒南帝北丐中神通的封神榜类似,在我们所处的IT江湖里,也流传着这样的传说: 「言运营必阿里,言产品必腾讯,言技术必百度」 很难考证这样的大众认识舆论是在怎么样的情况下逐步形成的.谈到阿里,或许能给大家留下深刻印象的总是双11.双12等年复一年的运营活动,而我们也被外部认为是一个强运营的公司. 作为技术人员,虽然我极力想通过一系列文章来表达我厂在技术能力.数据能力.平台能力上对运营活动的强力支撑,但我更想去谈有

移动互联网产品开发的教训

在技术团队办公区整面墙的白板上一直写着三组词:Breaking Things(打破事物).Clarity(清晰).Simple (简单).这是 2013 年年中写下的,这是对整个产品技术团队的期许,其中首要.也最重要的是,随时准备"打破一切". 从"打破一切"开始,记录一下过去两年多的在内容与技术间跨界的 9 条体会与教训,是的,多数都是教训. 1. 乐于"打破事物",永远不要害怕"打破事物" "Breaking T

详解互联网产品开发中的“快”字诀

当今互联网的发展,已不是大鱼吃小鱼的时代,而是快鱼吃慢鱼的时代.互联网产品的制胜原则就是一个字--"快".在各种形态的产品研发中,我们始终贯彻如一的价值观之一就是"快",我们应该如何来理解和诠释"快"?又会从哪些方面来执行贯彻这个原则呢? 一.快速迭代,快做快发 互联网产品不同于传统软件开发,我们面对的是上亿用户这样一个庞大的使用群体,他们是谁,有什么喜好,有何种习惯,会怎样使用我们的产品,是否喜欢我们的产品--这些情况我们并不能准确地知道.因此

雷军手稿:小米MIUI互联网产品开发模式

这些天在看小米联合创始人黎万强写的<参与感:小米口碑营销内部手册>一书,打算写个读后感,参加我和机械工业出版社合作的"悟道产品经理"读书写书活动.这篇文章,算一个草稿吧,欢迎大家看完后回复交流. 雷军的手稿 今天的标题<从雷军手稿解读:小米MIUI互联网产品开发模式>,标题有些大,源于书中的雷军关于互联网思维的手稿.原图如下: 之所以从这个手稿开始说产品的发版,是因为BLUES在YY语音产品团队的经历,有个关于YY创始人李学凌的小故事. 李学凌的产品观 在YY语

《Android和PHP开发最佳实践》一1.1 移动互联网时代的来临

1.1 移动互联网时代的来临 2011年,Android操作系统就已经占领了全球智能手机市场份额的半壁江山,霸主的地位彰显无遗(如图1-1所示).在国内,随着各大手机厂商的更新换代,Android操作系统的占有率也在火速上升中:中国移动公司已经早早推出了自己基于Android的OMS系统和OPhone,甚至连各大互联网巨头也在纷纷推出自己基于Android的手机产品.据统计,2012年内全球智能手机市场增长率达到49%,中国移动互联网用户量已经突破4亿,手机用户量也已经超越了PC. 看到这里,相

LKK洛可可贾伟:互联网时代下的产品创新纬度

当前,中国制造业转型存在挑战与机会并存.工业4.0和工业大数据等新的工业技术的不断涌现,让"中国制造"迎来了全新的发展机遇.在此背景下,本届中国制造千人会(MIC1000)首次聚齐来自学界,产业界,互联网业和金融行业等不同领域的30位重量级嘉宾,共同探讨制造业7大关键性问题. LKK洛可可创新设计集团创始人.董事长贾伟指出,制造的核心是效能的提升,是想象力的提升.当前马上要进入到想象力经济时代,农业时代,没有无路人们走出一条路,工业时代修出公路,互联网时代修出互联网高速公路. LKK洛

PC互联网时代,地图是个边缘产品

PC互联网时代,地图是个边缘产品.移动互联网的时代,地图则不再是单纯的指路工具,而已演化位本地生活信息的综合服务平台和手机端的入口. 在全额收购高德后,阿里顺利完成移动互联网基础服务中的位置服务建设,也终于可以安全放心的开展其O2O战略. 不难想象,阿里下一步就该是把旗下的团购.打车.地图.电商等进行有效整合,建立一个线下的"淘宝+天猫",形成一个覆盖本地生活上下游产业链的全新生态体系. 只是,同样被阿里投资过.拥有本地商户最多的美团,会不会成为下一个"高德",被阿