云计算对传统软件工程的影响
在计算机科学这个日新月异的领域,新技术的不断成熟和发展总是无时无刻不在向传统领域发起着挑战和冲击。云计算,这一名词自2006年初次提出起,短短十年内已经成为信息技术领域最重要的发展之一。在借鉴传统分布式计算思想的基础上,它融合了并行计算,虚拟化,互联网,大规模资源管理等一系列技术,实现了对软硬件资源的集中化,动态化和弹性化管控,建立了从硬件资源到软件应用的整合一体的全新服务模式。而作为传统领域且已经发展成为工业流水线格局的软件工程,在云计算掀起的这股浪潮中会受到怎样的影响呢?
云计算采用计算机集群构成数据中心,并以服务的形式交付给用户,使得用户可以像使用水,电一样按需购买云计算资源。与其说云计算是“计算”,倒不如说是一种“模式”,一种资源付费共享,交互使用的模式。具体而言,云计算的核心服务可以分为三个子层:基础设施即服务层(IaaS),平台即服务层(PaaS),软件即服务层(SaaS)。
IaaS提供硬件基础设施部署服务,为用户提供实体或虚拟的计算,存储和网络资源。需要硬件资源的用户通过IaaS服务平台上传数据,程序代码和环境配置。比较著名的IaaS系统实例Amazon EC2(Elastic Compute Cloud)通过简单的web服务界面,提供给用户对计算资源的绝对控制,使用者可以弹性地运行自己的Amazon机器映像档,而且可以在这个虚拟机器上运行任何自己想要的软件或应用程式。同样提供IaaS服务的Eucalyptus则是一种开源的软件基础结构,用来通过计算集群或工作站群实现弹性的、实用的云计算。
而国内IaaS的第一阵营则由阿里云,盛大云,万网云组成,阿里云独立研发的飞天开放平台Apsara,负责管理数据中心Linux集群的物理资源,控制分布式程序运行,隐藏下层故障恢复和数据冗余等细节,从而将数以千计甚至万计的服务器联成一台“超级计算机”,并且将这台超级计算机的存储资源和计算资源,以公共服务的方式提供给互联网上的用户;盛大云仿照Amazo的AWS模式,推出按需计费的云主机、第一家面向公有云专门开发的Key-Value云存储、第一家云硬盘、第一家自助化的CDN加速产品、永久免费的云监控、以及视频云、网站云、数据库云、移动云服务等产品。
PaaS是云计算应用程序运行环境,提供应用程序的部署与管理服务,它服务的对象为程序开发者,使用者上传数据,程序代码,可以进行海量数据的处理,资源管理与调度。Google App Engine,Microsoft Azure和Hadoop都是PaaS的著名系统实例。Google App Engine 是一种让用户可以在 Google 的基础架构上运行自己的网络应用程序。Google App Engine 应用程序易于构建和维护,并可根据用户程序的访问量和数据存储需要的增长轻松扩展。使用 Google App Engine,将不再需要维护服务器:用户只需上传应用程序,它便可立即为该程序的用户提供服务;Microsoft Azure的主要目标是为开发者提供一个平台,帮助开发可运行在云服务器、数据中心、Web和PC上的应用程序。云计算的开发者能使用微软全球数据中心的储存、计算能力和网络基础服务。Azure服务平台包括了以下主要组件:Windows Azure;Microsoft SQL数据库服务,Microsoft .Net服务;用于分享、储存和同步文件的Live服务;针对商业的Microsoft SharePoint和Microsoft Dynamics CRM服务。而Hadoop是一个由Apache基金会所开发的分布式系统基础架构。它的核心框架就是HDFS和Mapreduce,用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
国内PaaS的四大巨头分别为百度BAE,新浪SAE,阿里云云引擎ACE,京东引擎JAE。百度应用引擎(BAE)是百度推出的网络应用开发平台。基于BAE架构,使开发者不需要维护任何服务器,只需要简单的上传应用程序,就可以为用户提供服务。BAE有能力将原本单机的LAMP架构,变成分布式架构。开发者可以基于BAE平台进行PHP、Java、Python、Nodejs应用的开发、编译、发布、调试。同时BAE平台也提供了大量的云服务给开发者,包括fetch URL、task queue、SQL、memcache。SAE则由新浪开发,提供了一系列分布式计算、存储服务供开发者使用,包括分布式文件存储、分布式数据库集群、分布式缓存、分布式定时服务等,这些服务将大大降低开发者的开发成本。而阿里云的ACE相较其他PaaS厂商则处于刚起步阶段,更多依托的是阿里云的IaaS层服务,规模较小。
而SaaS是基于云计算基础平台所开发的应用程序,提供基于互联网的应用程序服务。它服务于企业和需要软件应用的用户。最著名 的当属Google Apps,Google Apps 是 Google 提供的一项“软件即服务”产品,用于企业消息传输、协作和安全。各种规模的企业都在使用Google Apps,以便员工之间保持联系,提高工作效率并降低 IT 成本。通过 Google Apps API,开发人员可以扩展 Google Apps 的功能,与其他系统集成或为其公司和其他业务构建新的应用程序。同样提供SaaS服务的还有Salesforce Crm,基于其开发的产品在线CRM是一个在全球范围内拥有用户数最多的在线客户关系管理平台。用于销售、服务、营销和呼叫中心运营的简单易用的基于 Web 的 CRM 解决方案,可以简化客户关系管理并提升客户满意度。 借助 Salesforce CRM,组织可以获得空前的生产力、收入增长以及企业智慧。
相比于IaaS和PaaS,SaaS在国内的发展可能并没有那么受人瞩目。北森融合了人才管理专业技术和云计算技术,为大中型企业提供覆盖招聘、绩效、核心人力、员工调查等人才管理业务全流程的一体化SaaS软件及服务,为企业提供科学的人才管理洞察,持续优化人才管理决策 。致力于提供CRM(客户关系管理)服务提供的有八百客和销售易这样的厂商,八百客提供的800APP管理平台中涵盖了很多内容,其中包括市场管理、销售管理和服务管理,还可以根据客户需要量身定制适合企业发展的在线管理软件。而销售易更加针对移动端CRM,一改传统CRM流程和表单的设计与体验,销售易首次以“人”(销售人员)为中心,融合销售流程,销售知识库,团队协作以及日常办公等核心功能于一体,通过便捷易用的移动端为销售人员提供销售管理和客户管理的应用服务。
综合来说,云计算具有以下特点:服务弹性化,资源池化,按需服务,服务可计费,泛在接入。正是因为云计算具有上述特性,使得用户只需连上互联网就可以源源不断地使用计算机资源。简而言之,云计算实现了“互联网即计算机”的构想。在云计算这一概念提出伊始,就是为了解决大数据时代计算能力与资源不匹配,成本高,且资源利用率低等这样一系列问题。在云计算不断成熟发展的今天,软件工程领域也因为这项新的技术的推动下不断改变,接下来笔者将从以下几个方面分析云计算对传统软件工程带来的影响。
一.软件开发的抽象程度和开放程度不断提高
云计算的服务架构由IaaS,PaaS和SaaS构成,其中的PaaS层通过标准架构体系的中间件,可以屏蔽不同操作系统间的差异性,在虚拟化硬件和操作系统上提供可靠的保障,在云计算的模式下,软件工程在面向对象的基础上进一步抽象化,提升到面向服务的层次。面向服务也就是将业务流整体分成子业务流,对子业务流级别的模块进行组织设计,并最终形成软件系统整体。基于云计算的开发平台,软件的开发将不再像往常一样,在面向服务这样更高层次的抽象基础上,开发人员可能只需要写很少甚至不写代码,对现有资源加以组织和设计就能完成业务流程。
二.更高程度的软件复用
云计算服务平台为软件开发人员提供了大量开放的,高成熟度的开发构件,随着软件构件的成熟度不断提高,软件复用也必将更为广泛。而软件复用一直是提高软件开发效率和克服软件危机的重要途径,软件复用的流行一方面帮助使用者提高了软件开发效率,降低了软件开发的时间成本开支,提高了软件开发的绩效,另一方面软件反复使用的过程也是一个对软件不断完善,不断改进的过程,软件出错的概率不断减小,软件的可信度也随之得到提高,就比如开源的linux在几十年的时间通过全世界的使用被反复修改,这才奠定了如今其在操作系统领域难以撼动的地位和可信度。
三.开发面向应用,需求成为重点
在软件开发的传统瀑布模型中,软件开发者需要一样花费大量的时间精力集中在建模和底层架构的实现,而迫于软件开发期限的压力,最终功能的实现很难与需求达到完美契合。在云计算基础上对于软件开发层次的进一步抽象下,开发人员不必再像往常一样在需求和设计之间协调,而可以腾出更多时间直面客户需求,软件开发将变为需求导向,需求在软件开发中将占据愈发重要的地位。
四.开发人员大众化
云计算和其提供的平台服务的出现,不仅仅极大地方便了软件开发人员,也在一定程度上降低了程序开发的门槛。云平台的普及使得软件的开发不仅仅由拥有高性能硬件设施的大公司和专业的技术人员组成,也使得业余甚至其他行业的从业人员,跨过硬件设施架构,环境配置等专业门槛,单单通过浏览器和简单的工具也能参与到软件的开发中来。云计算打破了开发者和用户之间的绝对壁垒,使得软件的开发变得更加平民化,大众化。特别是对一些大规模数据量和高密度信息量的项目工程,云计算带来的开发门槛降低使得项目的开发进度得以显著加快,开发成本得到降低。
五.降低软件开发耦合程度
软件发展的过程就是一个不断提高抽象程度的过程,在传统软件开发过程中,各个开发环节间的耦合程度虽然逐渐有所缓解,但仍旧因为耦合程度过高带来了不少麻烦和问题,相比于传统软件工程的全局控制的封闭流程,云计算带来的面向服务的体系结构的出现极大程度解决了这个问题。它能够将异构平台上应用程序不同的功能部件(服务)通过定义好的接口与规范,以松耦合的方式整合到一起。软件开发中的各个流程将向着更加独立,并发的形式逐渐转变。
六.软件测试云端化
传统软件测试是通过开发者的本地测试,运行环境配置复杂且受到硬件环境和软件环境的影响,各种配置参数的组合给测试人员添加繁复测试负担的同时,也带来了人力物力的极大耗费。云计算为软件的测试通过“云”搭建测试环境,提供各种测试工具。测试人员通过云测试平台,提交测试脚本即可展开测试,而软件和硬件环境的配置则可以交给服务商来完成,测试人员可以专注于软件自身的性能在不同环境下的测试,而不必与各种各样的测试环境配置和测试工具打交道。同时,云测试平台的共享化也会使测试结果和质量更为可信。
七.云计算带来的信息安全问题
云计算所使用的虚拟化技术,资源池技术导致计算环境内服务器,存储器等硬件设备被高度整合和共享,同时,大量的数据存储和计算操作都在云端进行,这就势必要进行用户原始数据的传输,且将在云端被保存,网络传输过程中数据是否安全,云端的数据如何防止恶意泄露和攻击,这些云计算带来的信息安全问题值得我们在软件开发过程中得到足够的重视和警惕。
总结:云计算作为新兴的技术浪潮,势必会对传统软件工程领域带来冲击和影响,它在充分利用计算资源,降低开发成本等方面展现出了无可比拟的优势,但同时也带来了信息安全的问题。所以,传统的软件工程模式不可能一下子被完全推到,新旧交织,多元并存将会是未来软件工程发展的长期状态。毫无疑问,云计算的兴起为软件工程注入了新的血液,推动软件工程走向一个新的历史性转折点,但如何把这把锋利的武器用好,还需要我们未来不断小心的尝试和探索。
参考文献:
[1]史杰,谢丽君,史少华.论云计算对软件工程的影响[J].昆明学院学报,2011(06)
[2]罗军舟,金嘉晖,宋爱波,东方 .云计算:体系架构与关键技术[J].通信学报,2011(07)
[3]林 利,石文昌 .构建云计算平台的开源软件综述[J].计算机科学,2012(11)
[4]王伟军,姜毅,刘 蕤,Kari Smolander.云计算环境下软件测试研究进展.现代图书情报技术,2012(11)