云计算对传统软件工程的影响
云计算的概念
云计算包括IT工业,开发平台和软件工程。虽然“云”可以指代很多不同的东西对于不同的人,但是对于IT工业来说,它提供了一个可拓展容量和计算能力的方法去开发。
云计算是以数据为中心的一种数据密集型的超级计算,在数据存储,数据管理,编程模式,并发控制,系统管理等方面具有自身独特的技术。云计算的出现,改变了信息服务的提供方式,“云”中的资源在使用者看来是可以无限扩展的,并且可以及时获取,随时扩展和缩小,按需使用,计时付费。云计算分为三种主要类型:基础设施即服务(IaaS),平台即服务(PaaS)和软件即服务(SaaS)。
IaaS即以服务的形式交付计算机基础设施,作为最底层和最基础的服务,IaaS将基础设施(计算资源和存储)作为服务出租,代表了一种作为标准化服务在网上提供基本存储和计算能力的手段。IaaS是作为服务计算的最原始的形式来提供服务的。
IaaS之上的服务是PaaS,PaaS是可描述为一个完整的虚拟平台,它包括一个或多个服务器(在一组物理服务器上虚拟而成)、操作系统以及特定的应用程序(如支撑基于Web的应用程序的Apache和MySQL)。PaaS是一种无须下载或安装,即可通过互联网发送操作系统和相关服务的模式,云计算应用的开发平台也可作为一种PaaS提供,用分布在不同地区的开发团队可以共同完成某些软件的开发项目,使用者也能够从不同公司的庞大平台资源中获得服务,另一方面,通过使用由单一供应商提供的基础架构服务,中小型企业可减少对硬件设施和平台维护的收入,通过程序集成开发,信息化总体费用可大大降低。
在PaaS之上的是可以提供给终端用户的应用程序,这一层被称作SaaS。它是从一个集中的系统来部署软件,并使之在一台本地计算机上(或从“云”中远程地)运行的一个软件模型。SaaS是一种通过互联网提供软件的模式,软件厂商将应用软件统一部署在自己的服务器上,用户可以根据自己实际需求,通过互联网向厂商订购所需的应用软件服务,按订购的服务多少和时间长短向厂商支付费用,并通过互联网获得厂商提供的服务。这样,用户不用再购买软件,而改为向供应商租用基于web的软件服务,来管理企业经营活动,且无需对软件进行维护,服务提供商会全权管理和维护软件。
对传统软件工程的影响
软件架构的开放性
虚拟化是云计算中的一个重要技术,有了虚拟化技术,软件开发者就不必纠结于软件的开发环境,而是可以通过向云计算服务提供商定制属于自己的系统,可选的软件架构也有很大的选择空间。一个好的软件架构对可靠性,安全性,可伸缩性,可定制性,可拓展性,可维护性都有和严格的要求,而云计算正好可以很好地满足这个要求。
云计算提供商一般都是具有很强的技术实力的公司,所以在环境可靠性上肯定比普通开发者要做的好得多,同时他们还有最厉害的网络攻防专家来保障软件运行的时候不会被外部恶意攻击,安全性有很大的保障。对于可伸缩性,可定制性和可拓展性这些都是云计算最重要的特性,服务商根据软件开发者的要求来定制专属于某一开发者的环境,使得软件开发不再像之前那样要在软件开发的一开始就订好整个软件的开销,而是可以在开发过程中动态地确定,这样既保证了软件开发过程的高效,又做到了尽可能地利用资源。当软件开发商将软件放到云计算服务商的机器上运行之后,不必实时监视着机器,遇到问题服务商会给开发者提供尽可能大的帮助,使得软件的维护变得不再那么复杂。
软件对象的多样性
同一个云计算服务提供商可以提供不同的平台去为服务请求者提供定制的服务,使得软件开发人员可以根据不同的使用情景来选择最合适的开发环境,面对不同的需求可以拿出最好的解决方案,使得软件的对象可以多样性。
软件过程的动态性
软件开发的过程中,需求可能是在不断地变化,比如刚开始预期的使用人数只有一万人,但是当软件上线之后发现该软件很受欢迎,使用人数达到了一百万,大大超过了之前软件设计容量,于是通过云计算,可以对软件的运行环境进行动态扩充,只要对软件稍作修改变可以使得软件继续顺利运行。而在传统的软件开发过程中,软件使用者对软件的需求也是在不断地改变,需求的改变则可能会导致软件架构的改变,运用云计算的动态性,可以动态改变软件的运行环境,尽量减少整个软件结构所需要的改动。同时对于在开发过程中选择更改架构的程序,也只需要改变本地代码就可以了,对于云端服务器只要进行简单的设置就可以顺利的让程序运行。
开发组织的社会性
传统的软件工程开发更多地是将软件工程师集中起来进行开发以求最大的开发效率,开发组织大部分都局限在某一个具体公司里,组织之外的人想要参与进项目是很复杂麻烦的,而在云计算的时代,由于服务器在云端,只需要通过远程操作云服务器就能完成软件的开发部署工作,所以软件工程师可以身处世界各地而共同完成同一个工程,这使得开发变得更加包容与开放,所有人不再需要一直待在一起,只要互相之间进行约定,每个人按时完成自己所负责的工作就可以了,这使得开发组织可以变得很大,github上有好多开源的项目就是由全世界各个地方的人一起开发的。
开发人员的大众化
传统的软件开发在软件开发之前的阶段就需要许多的准备工作,需要很多资金来搭建运行环境,这使得很多资金不足的独立开发人员在开发软件之前便止步于资金问题,而现在有了云计算,人人都可以量力而行地租用自己所需要的设备,使得商业化编程不再只是某些大公司的专利,人人都可以运用自己的技术来实现自己的应用,开发人员趋向于大众化。一个人只要掌握了编程的技术,资源配置之类的都不需要担心,云计算服务商已经为我们包装好了一个安全稳定的运行环境。
资源部署的虚拟化
在传统软件工程中,开发者如果需要增加资源使用,或者是开发前期对系统能力的估计错误,导致必须去购买很多的设备,但是这样很有可能会使得资源的浪费或者面临出现突发情况时服务器不够使用的情况,而在现在的云计算系统里,所有的资源都是虚拟的,需要多少就向云服务提供商租借多少,如果遇到突发情况还可以临时租借服务器,在不再使用之后就返回给服务商,这样就使得对资源的利用率达到了最大化,同时也使得程序能够永远保持在最高的运行效率。例如电商就经常遇到节假日或者购物节的时候访客流量突然上升的情况,如果去购买服务器显然是不划算的,毕竟平时用不到这么多的服务器,所以选择再特殊时期向云服务商租借,过期再退租可以使得自身利益最大化。
总结
现在云计算已经走过了婴儿期,越来越多的人开始意识到云计算的好处,并且已经开始接受并采用云计算,因为它可以改变人们工作生活的方式,对于软件工程行业也是如此。云计算服务器为开发人员提供了更加宽广的开发平台,在这之上开发人员可以更加高效地构建应用,而传统的软件工程行业则会受到诸多的限制使得开发过程没有现在这样高效便捷。所以推广云计算的使用是很有必要的,它使得我们开发人员可以专注于业务的实现而从复杂的运行环境中抽身出来,使得软件变得更加可靠。