云计算对传统软件工程的影响
这篇文章是原来上软件工程课的时候的调研作业,原博客在这里
“软件工程”最早起源于1968年秋NATO(北约)科技委员会关于摆脱“软件危机”的讨论,是研究如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验证明正确的管理技术和当前能够得到的最好技术方法结合起来并应用于实践的软件开发方法。
可以说软件工程对大型软件项目开发和现今互联网逐渐成形有着不可磨灭的贡献。不过前面也说到软件工程是将现如今所能够获得最好的技术和管理技术结合,这个属性注定了软件工程在新的技术环境下会不断发展以适应当前技术的进步,尽最大的可能提高软件开发过程的效率和质量。近几年,云计算技术逐渐从概念走向实用,为软件开发提供了新的可能。在这样的环境下,传统软件工程也受到了一定程度的影响。
云计算
云计算这个词是2006年中Google提出的,但是其概念却早在上世纪60年代就有人提出,“应当把计算能力作为一种像水和电一样的公用事业提供给用户”。换句话说,云计算就是以虚拟化技术(硬件资源抽象为计算能力)为基础,以网络为载体,以用户为主体并为其提供基础架构、平台、软件等服务形式,整合大规模可扩展的计算、存储、数据、应用等分布式计算资源进行协同工作的超级计算服务模式。
早期由于虚拟化技术不成熟、互联网技术欠缺、网络带宽有限等等限制因素导致云计算仅仅只能作为一种概念。而现如今软硬件的发展,云计算不仅成为了可用的技术,还为企业创造大量的收入。亚马逊2015年AWS云服务的营收为79亿美元,今年的营收预计将占亚马逊营收的7%。正是因为云计算有着如此大的市场,现在大量企业开始涉足云服务领域,现在的主流云服务有亚马逊的AWS、微软的Azure,国内的阿里云、腾讯云等。通过这些提供商,我们能够实现将资源池(包括网络、存储、硬件服务器、软件工具等资源)像水和电一样使用。
服务层次
当前云计算的服务层次通常分为三种: 通过网络、存储、硬件处理器作为标准化服务提供、按需付费的基础设施即服务(Infrastructure as a Service,IaaS),典型代表如亚马逊AWS的弹性计算云EC2和简单存储服务 S3。通过IaaS,我们可以很方便地租用云服务提供商的基础设施,然后通过廉价的计算终端进行访问控制,进行大规模的集群运算从而达到高性能计算机的计算能力。
通过提供相应的开发语言、编程环境或者是开发工具给用户,充当平台的平台即服务(Platform as a Service,PaaS)。典型代表如 Google App Engine(GAE),Django Web应用框架。通过PaaS服务,我们只需要上传程序代码和数据,不用去关注底层的网络、存储、环境配置等等问题。
通过提供完整的基于云计算基础平台开发的应用程序的软件即服务(Software as a Service,SaaS)。典型代表有Salesforce 公司提供的在线客户关系管理CRM(Client Relationship Management)服务,Zoho Office,Webex,谷歌的Gmail等。通过SaaS,我们利用云平台上提供的应用程序进行快速简便的软件开发。例如,不少公司通过Gmail建立自己的企业电子邮件,能够在短时间内建立起安全可靠、服务完善的邮件系统。
由上图所示,一般而言,SaaS建立在PaaS的基础之上,而PaaS则建立在IaaS的基础之上。而它们三者之间的差异主要体现在功能范围和侧重点上。
其中IaaS提供满足租户需求的硬件资源,包括存储空间、计算能力、网络带宽等, 重点在于保证硬件资源的性能和可靠性,同时在此基础之上,再提供按需付费、可度量资源池、根据用户需求调度分配硬件资源的功能;
PaaS则不仅仅关注底层硬件资源的整合,还需要提供能够供用户进行开发、调试应用的平台环境,重点在保证计算平台和底层硬件环境的协调和平台功能的完整性;
SaaS则不仅需要实现底层资源的充分利用,还必须通过部署一个或多个应用软件环境,为用户提供可定制化的应用服务,重点在于根据不同用户的需求为其提供不同的独特的、定制化的软件环境;
因此也可以将IaaS、PaaS、SaaS看成是三种不同层次的服务。这种层次极为分明的服务在实际生活中也十分普遍。IaaS相当于买了一栋商品房,但是却没有装修,也没有购置家具、电器,这些都需要自己去完成;PaaS相当于是租房,房子已经装修好了,但是相应的家具、电器没有,需要根据自己的需求去购置;SaaS则相当于是住酒店,装修好了,相应的生活设施也都准备好了,可以直接使用。
特点
1、按需自助式服务:用户可以根据自身实际需求扩展和使用云计算资源,具有快速提供资源和服务的能力。能通过网络方便地进行计算能力的申请、 配置和调用,服务商可以及时进行资源的分配和回收。
2、广泛的网络访问:通过互联网提供自助式服务,使用者可以直接通过互联网访问和控制相应的资源,不需要部署相关的复杂硬件设施和应用软件,也不需要了解所使用资源的物理位置和配置等信息。这就可以实现高性能计算能力仅通过网络访问即可获取。
3、资源池方式供应:供应商的计算资源汇集在一起,通过使用多租户模式将不同的物理和虚拟资源动态分配多个消费者,并根据消费者的需求重新分配资源。各个客户分配有专门独立的资源,客户通常不需要任何控制或知道所提供资源的确切位置,就可以使用一个更高级别抽象的云计算资源。
4、快速弹性使用:快速部署资源或获得服务。服务商的计算能力根据用户需求变化能够快速而弹性地实现资源供应。云计算平台可以按客户需求快速部署和提供资源。通常情况下资源和服务可以是无限的,可以是任何购买数量或在任何时候。云计算业务使用则按资源的使用量计费,实现按需弹性分配。
5、可度量的服务:云服务系统可以根据服务类型提供相应的计量方式, 云自动控制系统通过利用一些适当的抽象服务(如存储、处理、带宽和活动用户帐户)的计量能力来优化资源利用率, 还可以监测、 控制和管理资源使用过程. 同时,能为供应者和服务消费者之间提供透明服务。这点也为云服务商的盈利提供了保证。
云计算带来的影响
云计算有着鲜明的特点和服务模式,云计算模式下的软件工程则需要充分发挥这些特点的优势,将这些模式整合到软件开发的设计中。这必然会造成软件开发中多方面的改变,以下是列举的几点。
开发方法
传统的软件开发工程中,一般采用分层方式对计算系统资源进行管理,具体体现在“应用―中间件/数据库―操作系统―硬件服务器”模式中。由于在项目中,这种资源架构是软件工程设计开发模式的先决条件,且项目中常常会对这四层资源全部进行管理,这就造成了软件开发会不可避免出现耦合过紧的情况。这对于软件开发的效率有很大的影响。
现今软件工程中很常见的一种开发方式是面向对象开发。这种开发方式能够在一定程度上减少耦合过紧带来的影响,但依旧存在一些不足。而在云计算环境下进行软件开发,则可以在面向对象开发的基础上进一步抽象,可以提升到面向服务开发的层次,根据不同的业务需求划分子业务,对子业务流级别的模块进行组织设计,并最终形成软件系统整体。面向服务使软件在 IT 系统结构层次结构系统中更加接近应用。
体系结构
基于云计算的软件项目会因为云计算的特性而具有很强的开放性和更加成熟的构件化。用户可以通过互联网来获取相应的软件服务,这时系统的开放性便会成为软件开发的一个重点。软件的体系结构会朝着更便捷、更简洁的方向发展。同时更加成熟的构件化也会驱使软件增强封装性,从而成为后续应用软件中的基础和构件。
此外,云计算应用软件体系结构在本质上是完全分布式的,由客户端,服务端,管理端,开发端,测试端等多种软件构件有机集成,多种应用共享公共软件构件。应用之间仍然有清晰的逻辑边界,但是由于云平台的特性,导致应用之间不再有截然分开的物理边界。
部署/运行/维护
云计算给软件部署、运行管理和维护带来了高度的灵活性。对于一个特定的应用,软件部署、运行管理、维护和开发过程是并行的。第一次部署的可能只是一小部分功能,在随后的软件升级中不断完善。由于云计算模式极大的降低了软件构件之间的耦合程度,软件的客户端、服务端、管理端等构件完全以并发独立的方式部署和管理,甚至软件运行的基础设施也可以在用户透明的方式完成升级换代和重新部署,
云计算软件可以按照用户需求随时运行,软件运行平台采用成熟的虚拟化技术。在客户端,可以产生多种虚拟环境,如Windows、Linux、Mac OS甚至是浏览器等,用户可以根据自己的喜好来选择。在服务器端,可以把大规模的服务器系统虚拟化为单一处理单元和连续的存储单元,降低用户端的管理复杂程度。
云计算软件运行的最底层的硬件系统和基础软件系统由专业的计算机信息系统集成商统一维护管理对用户(包括云平台使用人员和真正的用户)来说,完全可以不关心底层软硬件的细节。
总结
总的来说,现在云计算技术仍在完善和发展阶段,仍旧存在很大的发展空间(确实最近Amazon、Microsoft、阿里巴巴都在加大对云服务的资金投入)。虽然在某些领域(如前端开发)的软件开发中云计算技术已经有着很大的影响,但其作用绝不会局限于此。相信随着它的发展,更好的计算机软件系统构建,更安全的软件数据保存,更便捷的信息处理,各种系统的优化也将随之而来,云终端系统、硬件系统、系统管理以及虚拟机系统也必然将因为云计算的发展而得到更高的提升。
参考资料
[1] Wikipedia,Cloud Computing
[2] Wikipedia,软件工程
[3] 张勇. 云计算环境下软件工程模式初探[A]. 太原: 北方自动控制技术研究所,2009
[4] 贾昆霖. 云计算发展对软件工程构建系统的影响分析[A]. 电子技术与软件工程,2011
[5] 史杰 解继丽. 论云计算对软件工程的影响[A]. 昆明学院学报,2011