首页 > 代码库 > 云计算对传统软件工程的影响
云计算对传统软件工程的影响
云计算对传统软件工程的影响
什么是云计算?
云计算是一种基于因特网的超级计算模式,在远程的数据中心里,成千上万台电脑和服务器连接成一片电脑云。因此,云计算甚至可以让你体验每秒10万亿次的运算能力,拥有这么强大的计算能力可以模拟核爆炸、预测气候变化和市场发展趋势。用户通过电脑、笔记本、手机等方式接入数据中心,按自己的需求进行运算。
李开复打了一个很形象的比喻:钱庄。最早人们只是把钱放在枕头底下,后来有了钱庄,很安全,不过兑现起来比较麻烦。现在发展到银行可以到任何一个网点取钱,甚至通过ATM,或者国外的渠道。就像用电不需要家家装备发电机,直接从电力公司购买一样。云计算就是这样一种变革——由谷歌、IBM这样的专业网络公司来搭建计算机存储、运算中心,用户通过一根网线借助浏览器就可以很方便的访问,把“云”做为资料存储以及应用服务的中心。
美国国家标准与技术研究院对云计算给出了这样的定义:云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问,进入可配置的计算资源共享池(资源包括网络,服务器,存储,应用软件,服务),这些资源能够被快速提供,只需投入很少的管理工作,或与服务供应商进行很少的交互。
云计算包括哪些层次的服务?
云计算可以认为包括以下几个层次的服务:基础设施即服务(IaaS),平台即服务(PaaS)和软件即服务(SaaS)。
IaaS(Infrastructure-as-a- Service):基础设施即服务。消费者通过Internet可以从完善的计算机基础设施获得服务。
有了IaaS,你可以将硬件外包到别的地方去。IaaS公司会提供场外服务器,存储和网络硬件,你可以租用。节省了维护成本和办公场地,公司可以在任何时候利用这些硬件来运行其应用。一些大的IaaS公司包括Amazon,Microsoft,VMWare等。如今,国内从事IaaS业务的大小公司不下几十家,以阿里云、盛大云、万网云为代表。
PaaS(Platform-as-a- Service):平台即服务。是指将软件研发的平台作为一种服务,以SaaS的模式提交给用户。PaaS公司在网上提供各种开发和分发应用的解决方案,比如虚拟服务器和操作系统。这节省了在硬件上的费用,也让分散的工作室之间的合作变得更加容易。网页应用管理,应用设计,应用虚拟主机,存储,安全以及应用开发协作工具等。一些大的PaaS提供者有Google App Engine,Microsoft Azure。
如今,国内PaaS云平台由四大巨头瓜分。百度BAE从移动端到WEB端再到轻应用都有布局。新浪SAE面向开发者与小白用户,有自己的应用商店,目前托管了较多的优秀应用。阿里云云引擎ACE依托于阿里云IaaS层服务发展起来,规模较小。京东云擎JAE免费对开发者来说是一个福音,其主要的特点是操作简单,产品迭代速度快。
SaaS(Software-as-a- Service):软件即服务。它是一种通过Internet提供软件的模式,用户无需购买软件,而是向提供商租用基于Web的软件,来管理企业经营活动。一些用作商务的SaaS应用包括Citrix的GoToMeeting,Cisco的WebEx,Salesforce的CRM等。
国内专注移动CRM的SaaS应用有:销售易、纷享销客、八百客等。专注移动办公的有:iWorker、今目标、明道等。专注企业IM的有:微信企业号、阿里钉钉、第一企信等。
基础架构即服务为用户提供基本的计算和存储能力,平台即服务和软件即服务则是面向软件资源。云计算的从硬件到软件的3层服务体系创造了新的软件开发模式。
软件开发的历史进程
软件开发经历了程序设计阶段、软件设计阶段和软件工程阶段的演变过程。
1946年~1955年:程序设计阶段。尚无软件的概念,程序设计主要围绕硬件进行开发,规模小,工具简单,程序设计追求节省空间和编程技巧,无文档资料,主要用于科学计算。
1956年~1970年:软件设计阶段。建立了软件的概念。随着计算机技术的发展和普及,软件系统的规模越来越庞大,高级编程语言层出不穷,应用领域不断拓宽,社会对软件的需求量剧增。但软件开发技术没有重大突破,软件产品的质量不高,生产效率低下,产生了“软件危机”。
1970年至今:软件工程阶段。“软件危机”的产生,迫使人们不得不研究、改变软件开发的技术手段和管理方法。
软件工程强调的可维护性和文档化以及对软件生命周期系统化的管理使软件成为一种产品,与硬件分离开来。在软件开发方法上逐渐形成了分析、设计、编码、运行、维护的流程。
云计算对传统软件工程的影响
软件架构的开放性
云计算支持用户在任意位置、使用各种终端获取应用服务。所请求的资源来自“云”,而不是固定的有形的实体。应用在“云”中某处运行,但实际上用户无需了解、也不用担心应用运行的具体位置。只需要一台笔记本或者一个手机,就可以通过网络服务来实现我们需要的一切,甚至包括超级计算这样的任务。
云计算模式下的软件开发和运行环境基本上都是由云计算中心来架构的,这些资源按照开发者的要求进行配置。在开发者一端省去了硬件设施架构、运行环境调试等工作,只需一个浏览器和一些简单的工具就可以实施开发。
软件对象的多样性
在云计算的模式下,软件工程在面向对象的基础上进一步抽象化,提升到面向服务的层次。面向服务也就是将业务流整体分成子业务流,对子业务流级别的模块进行组织设计,并最终形成软件系统整体。面向服务使软件在IT系统结构层次结构系统中更加接近应用。云计算不针对特定的应用,在“云”的支撑下可以构造出千变万化的应用,同一个“云”可以同时支撑不同的应用运行,软件对象趋于多元化。
云计算系统保证了向用户提供可靠的服务,保证用户能够随时随地地访问所需要的服务,并且用户的系统规模变化时,云计算系统能够根据用户的需求自由伸缩,它的高可扩展性也从另一个侧面反映出软件对象的多样性。
软件过程的动态性
与传统的软件体系结构相比,基于云计算的软件体系结构最重要的特点在于其前所未有的开放性和成熟的构件化。云计算应用软件必将大量利用云服务提供管理中问件的现成的软件构件。同时,新研制的软件又将成为后续应用软件开发所能利用的成熟构件。
从生命周期特点看,传统的软件生命周期模型是串行的,本质都是瀑布模型的变形,这样的生命周期模型更易于控制,可以保证在确定时间有确定的结果。但在云计算环境下,并发模型、多重螺旋模型将成为主流。
在软件部署后,交付的都是中间版,软件升级成为常态。软件开发不再是一个封闭的、全局控制的流程,而是存在多个并发和自治的流程,在一个项目中,自底向上、自顶向下有机集成。
开发组织的社会化
在网络环境下,软件开发从封闭的计算机平台走向互通、互联、协作的网络平台环境。软件开发从网络边缘走向网络中心,网络成为虚拟的超级开发平台,这在云计算中得到了最佳的体现。在网络平台出现的情况下,“网构软件”成为软件发展的一种新阶段。
例如,在帮助开发人员在云计算的分布式平台上进行编程的研究方面,有很多研究机构开发了新的编程模式,对MapReduce编程模式进行扩展或者更新。Yahoo公司扩展了MapReduce框架,在MapReduce步骤之后加入一个Merge的步骤,从而形成一个新的MapReduceMerge框架,使用这样的框架应用程序开发人员可以自己提供Merge函数,完成软件开发。
开发人员的大众化
开发者面向业务应用,需求工程成为重点。在PaaS的平台中,开发者有可能写很少的代码甚至不需要代码,而只需按照业务流程对平台中提供的各类资源进行设计和组织即可。这让开发人员的门槛降低了,也让更多人可以接触到软件的开发。
资源部署的虚拟化
云计算的服务架构由IaaS,PaaS和SaaS构成。通过标准架构体系的中间件,屏蔽不同操作系统问的差异性,在虚拟化硬件和操作系统上提供可靠的稳定的业务保障。
例如OpenNebula是一个开源的虚拟架构引擎,主要用来在物理资源池上部署、监控和管理虚拟机VM的运行。内核层完成虚拟机VM的部署、监控和迁移等功能,同时提供一组对物理主机的管理和监控接口。工具层利用内核层提供的接口开发各种管理工具。驱动层使OpenNebula内核能够在不同的虚拟化环境上运行,OpenNebula并不与具体的环境绑定,驱动层屏蔽掉了不同的虚拟环境和存储,向内核层提供了一个统一的功能接口。
结语
云计算促成了软件工程在新时代的进一步发展,在提高效率、降低成本等方面居功至伟,传统的软件工程的开发势必将在云计算的广泛应用下产生变革,复杂程度将产生质的飞跃,或许云计算就是解决软件危机的一颗银弹。但是与此同时,我们也需要关注数据的安全和隐私问题、云计算系统本身的可扩展性、可用性、可靠性,显然需要更深入的研究才能更好地完成云计算在历史进程中的使命。毫无疑问,对于云计算的研究在未来仍将是一个热点。
参考文献
[1]论云计算对软件工程的影响 史杰,解继丽,史少华 《昆明学院学报》 - 2011
[2]云计算:系统实例与研究现状 陈康,郑纬民 《软件学报》, 2009, 20(5):1337-1348
[3]云计算环境下软件工程模式初探 张勇 全国软件测试会议与移动计算、栅格、智能化高级论坛, 2009
[4]云计算研究进展综述 张建勋,古志民,郑超 《计算机应用研究》, 2010, 27(2):429-433
云计算对传统软件工程的影响