首页 > 代码库 > 云计算对传统软件工程的影响

云计算对传统软件工程的影响

云计算(cloud computing)对传统软件工程的影响

 

目录
<1> 云计算的概念和理解


<2> 云计算对传统软件工程的影响


<3> 云计算在传统软件工程中充当的角色


<4> 软件使用云计算的实例。


<5> 结束语


<1>云计算的概念和理解
          云计算是什么? 云计算是一种基于因特网,并提供给计算机和其他需要资源的设备以共享的计算处理资源和数据。它的实现无处不在,根据需求可配置计算资源(如,计算机网络,服务器,存储,应用和服务)共享池,这些资源能够被快速提供,只需投入很少的管理工作,或与服务供应商进行很少的交互【1】。
先从一个例子,来讲讲云计算。一家名为Anmiator的小公司成立,因为是几个大学生创建的,所以客流量也不大,几台服务器就可以支撑5000人次的客流量。后来业务做大了,在高峰期有2万5千人访问服务,这么大的流量给使几台服务器宕机,因此公司迫不及待的需要要购置大量服务器,但这样是很不划算的,首先资金来源从哪里来就是一个问题,其次并不总是有这么多的人访问资源,大多数时候服务器是闲置的。公司的负责人史蒂文,最终决定将业务移到亚马逊弹性计算云上,这样一来服务器的费用省了,并且他们的服务器租用量并不是不变的,而是随着流量而变化,当流量大时服务器租用量增大,当流量小时服务器租用量减小,这样既解决了高峰期流量突增的问题,也解决了服务器闲置的问题【2】。

       从这个例子中我们可以归结出云计算的几个突出的特点:
     (1)超大规模:大多数云计算中心都具有相当的规模。从这方面来看,开始大力推动云计算的基本都是大公司。 Google,Amazon 、IBM 、微软、Yahoo等云计算中心拥有几百万台服务器,而且这些服务器不是独立存在的,云计算中心能通过整合和管理这些计算机集群来提供给用户超强的计算能力。
     (2)无限终端:用户在任意位置、使用各种终端获取都可以通过云来获取服务,只需将指令发给云,并由云计算和处理,最终将结果反馈给用户。在这个过程中用户不需要知道云的工作原理或者云是什么,只需通过简单的操作即可获取服务。
     (3)可靠性好:可靠性对云计算来说至关重要,因为如果一旦云计算中心的数据丢失,将会导致灾难性的后果,用户的历史数据就会丢失并且用户的数据安全也无法保证。在这方面,云计算采取了数据备份以及分布式等众多技术来保证可靠性。
     (4)通用性:云计算中心很少为特定的应用存在,但其有效支持业界大多数的主流应用,并且一个“云”可以支撑多个不同类型应用的同时运行,并保证这些服务的运行质量。
     (5)高可扩展性:用户所使用“云”的资源可以根据其应用的需要进行调整和动态伸缩,并且再加上前面所提到的云计算中心本身的超大规模,使得“云”能有效地满足应用和用户大规模增长的需要。
     (6)按需服务:“云”是一个庞大的资源池,用户可以按需购买,就象自来水、电和煤气等公用事业那样根据用户的使用量计费,并无需任何软硬件和设施等方面的前期投入。
     (7)廉价:首先,由于云计算中心本身巨大规模所带来的经济性和资源利用率的提升,其次,“云”大都采用廉价和通用的 X86 节点来构建,因此用户可以充分享受云计算所带来的低成本优势,经常只要花费几百美元就能完成以前需要数万美元才能完成的任务。
      (8)完善的运行与维护机制:稳定才是云计算之所以打入市场的根本原因之一,这很大一部分来源于企业能够完善的运行云并且能够有效的维护。
      (9) 云计算是以用户为中心的。作为一个使用者,一旦你连接到云中,那么那里存放的资源都将变成你的。而且只要你要愿意,不仅数据可以为你所用,而且也可被他人所共享,这点在我们使用百度云下载各种pirate books已经体现的很突出了。
  (10) 云计算是以任务为中心的。云计算的智能型,已经不仅仅局限于有没有指定功能了,而是询问用户应该怎样执行该功能。
  (11) 云计算是可编程的。云计算的本质是能够让机器处理大规模的数据,所以必然要求云计算具有可编程性质【3】。
  (12)云计算模式可以看做是为电厂集中供电模式。云计算是将本来在个人电脑上的计算动作变为到云计算中心执行的动作。在云计算模式下,用户的计算机只需要必要的操作系统,以及刚好支持电脑运行的内存,很少的硬盘空间空间和软件,就可以满足我们的需求。因为用户的计算机除了通过浏览器给“云”发送指令和接受数据外基本上什么都不用做便可以使用云服务提供商的计算资源、存储空间和各种应用软件。这就像是把显示器放在使用者的面前,而把真正用于计算的主机放在了云端。云计算把连接“显示器”和“主机”的电线变成了网络,把“主机”变成云服务提供商的服务器集群。
技术分享
                                                                                            【图1】
比如我们现在要在一台电脑上写Java程序,我们需要做些准备工作呢?(1)下载jdk(2)配置环境变量(3)一款好用的编辑器(Eclipse或intellij idea)对于Java的初学者,做完这些准备工作是很麻烦的一件事。但有了云计算,让这一切都变的简单了起来。Java在线编译器可以直接让我们开始编写Java程序(打开浏览器即可),而不需要现在任何东西。例如ideone,codepad,compilr等在线编译器都可以快捷的开始编写程序。
技术分享
                                                                                               【图2】
Java 在线编译器和传统编译环境最大的区别在于前者不需要复杂的客户端及复杂的库。Java在线编译器完全摆脱了传统的束缚,将所有的库和应用集成到云端的Web Server上面,实现了云计算。这样在用户的计算机上只需要一个浏览器就可以编写Java,用户将代码提交,通过云计算中心编译并运行然后将结果返回用户。简化流程图如下:

  技术分享

                                                                               【图3】

                     那么云计算主要包含哪些服务形式呢?通常的分类方法是分为IaaS(Infrastructure as a Service,基础设施即服务)、PaaS(Platform as a Service,平台即服务)和SaaS(Software as aService,软件即服务),基本对应于传统IT中的硬件、平台和应用软件。
<2>云计算对传统软件工程的影响
首先从六个方面讨论这个问题:
         (1) 软件架构开放性
          软件架构是什么呢? 软件架构是指基本结构的软件系统,建立这种结构的纪律,这些结构的文档。需要这些结构来思考软件系统。每个结构包括软件元件,其中的关系,以及两个元件和关系的性质,连同理每个元素的引入和配置。该体系结构的软件系统的一个比喻,类似于架构建筑物【4】。
"软件的共享"使得有价值,扩展性强的软件能够被大量的工程使用,传统软件开发已经从封闭走向了开发。云计算使得大量的开发团队能够共享很多的优秀代码和架构,不需要重复的造轮子了,这样一来编写源代码的工作量大大减小了,我们可以想象到,当云计算与软件架构的联系非常紧密的时候,一个工程的主要任务就会是分析需求,而具体编码就会变成从开源架构中选取适合的架构,并从代码库中选取详细代码组合成一个完整的工程。网络在一个团队中起的作用不仅仅是提高团队的沟通能力,而是成为团队工程的开发平。云计算
使得很多软件架构最初的一个团队进行开发转变成任何对该软件感兴趣的人都可以进行开发。这极大的增强了软件架构的开放性。
举一个例子,近年来Github迅速蹿红,该网站就像一个“代码喷泉”,每天都有大量的编程爱好者对其中的项目进行完善和修改,他们以Github为据点。他们为这个社区所做的贡献对整个云计算生态系统都有着极大的价值。
github中为企业的团队项目也提供了服务,GitHub企业版和普通的Github类似,GitHub企业版是专为大型企业的软件开发团队,通过灵活的部署选项,集中权限,以及数以百计的集成,团队能够方便快捷的完成【5】。
技术分享
                                                                                     【图4】

        (2)软件对象的分析和复用
             首先需要介绍一下UML。
技术分享
                                                                                                          【图5】
            UML用类图来(class diagram)来表示类,接口,及其关联。这里可以简单的说,一个工程是由众多的类以及接口,以及类与类之间的关系构成的。通常一个类图可以由下图的模式来进行表示。

技术分享
                                                                           【图6】
                          这说明在传统软件工程中,软件是由众多的模块组成的,我们需要分析这些类的功能,接口的定义,每个类的父类与子类,每个类的前置和后置条件。在云计算软件工程中,只要我们能够将每个模块分析的十分清楚,那么我们就可以通过平计算开发平台找到我们需要的软件模块,只需进行部分改写和连接以及一部分的重写,来完成整个功能【6】。
                          云计算使得传统的软件工程在开发中,更加注重对软件对象的分析和复用,因为在软件开发中。软件体现出了很明显的结构化和模块化(在上面的UML中体现的最为突出)。因此只要我们将软件对象分析清楚,那么我们就成功了一半了。
云计算带给我们的海量数据,能帮我们提高工作效率,并可以提供给我们大量的用户体验和用户需求。如果相对孤立地研发,没有数据支持,那我们的开发就具有很大的盲目性。但是云平台的开发工具、开发环境、开发平台将为传统软件开发、异地开发等带来便利。并且我们可以利用云计算实现异地开发,沟通交流等功能,并且不怕代码丢失,或工作环境突然崩溃等意外情况,因为我们的编译器和文档也可以直接进行在线编辑。
        (3)软件过程动态性和开发组织社会化(这两者之间有一定的联系因此合并成一个标题)
   通过云计算使得传统软件工程的开发更加的大众化,以及更加有效率的开发,并为并行开发提供了方便,开发组织往往是由一群对同一个项目感兴趣的志同道合的软件开发者组成,他们可能来自于世界各地。并且对于一个项目一个团队中很可能在短时间内更迭多个版本(动态性),并且最终得到稳定版本。
        (4)开发人员大众化
     云计算使得传统软件开发者的队伍大大增加,利用云计算,开发团队将整个团队的项目上传到了代码托管平台,并且可以邀请对此感兴趣并乐于开发的编程爱好者共同进行开发,开发人员从一个团队,到万众开发,许多模块功能的代码(这一点在前文的软件对象的分析部分已经讲过了)公布在gitHub上或者osChina等代码托管平台上,可以快速有效的并且完善的完成。这一点云计算也使得软件更加的开源化。这一点云计算和代码托管不谋而合,对于很多主张开源的开发者来说,云计算使得开发者利用代码托管平台将自己开发的应用与其他开发者分享,而且还可以利用代码托管平台获得其他的开发组件,这些开发组件或者其他乐于共同开发的编程爱好者提交的代码可以让开发者非常快速地找到一个有效的解决方案。这样就可以让应用开发变得更加便捷,并且可以通过悬赏的方式鼓励大家参与到项目中来。
除了上文提到的gitHub,还有osChina等众多的代码托管平台。
         (5)资源部署的虚拟化
          通过虚拟化技术可实现软件应用与底层硬件相隔离,虚拟化往往意味着平台无关性。
往往在多种平台上都可以方便的进行资源部署。它包括将单个资源划分成多个虚拟资源的裂分模式,也包括将多个资源整合成一个虚拟资源的聚合模式。
服务器的虚拟化是指服务器以及使用软件模拟数据存储设备。这是服务器的分裂或隔离。每一个虚拟服务器作为物理服务器的一部分运行,多个虚拟服务器可以在一台物理服务器上运行。这些虚拟服务器可以是分离的,并且可以单独使用处理。
资源部署要虚拟化的前提是必须保证效率,即虚拟化后程序的运行效率必须大于等于在本地平台上运行的效率。为了更好的理解这一点,我们介绍一下Hadoop。Hadoop是一个能够让用户轻松架构和使用的分布式计算平台。通过Hadoop用户可以很简单的处理大量数据或者进行开发。通过下图我们可以知道,资源部署的虚拟化可以保证效率(图中VM>native)。
技术分享
                                                                                                   【图7】

          (6)降低软件开发的复杂性
开发团队在将服务器和资源配置等交给提供云服务的企业后,只需要负责开发。其他服务器以及计算资源等问题都由提供云服务的企业来负责。用一句话说就是“你们负责开发,其他的都交给我们(提供云服务的企业)”。
          (7)显著降低开发团队的成本
开发团队只需付出相对较低的价格就可以获得云服务公司的服务器和数据处理功能,不需要团队购买硬件(文中的第一个例子就可以说明云计算的便宜)。使用云计算服务,如icloud,比购买一般的物理硬件要便宜得多,那么中小企业就可以摆脱很多不必要的开支。例如cloud拥有的5GB的免费存储空间已经足够的存储相当一部分中小企业的工作文件备份了,这可以为他们节省很多的经费。很多云服务公司,都对小额的租用采取免费试用的策略,例如Amazon的AWS就是亚马逊提供的专业云计算服务。
技术分享
                                                                                             【图8】
           (8)销售模式,技术模式,管理模式的进步
           云计算对传统软件开发的影响是深远的,无论是技术模式还是管理模式都会发生巨大的变化。在云计算充分发展的未来,软件开发完成后,不需要个人用户手动安装,而是只需要接入某个应用功能服务商便可以完成全自动的安装,个人用户将不涉及任何技术层面的东西了,传统软件开发的技术模式和管理模式也会更加的智能化【7】。
            (9)"代码不再值钱"
               随着云计算的发展,团队进行软件开发的时候将很可能不需要进行具体的代码设计,而代码库中的代码越来越多,这一点以谷歌为例,它包含了搜索、邮件、地图、文档处理等等功能,总共的代码的行据Google工程部经理 Rachel Potvin透露,是20亿行。软件开发团队只需要从海量的代码库中寻找特定的功能模块,最终进行构件间的组合,这同时也使得软件的架构分析在软件开发中也来越重要。

<4>软件使用云计算的实例。
    云计算有很多成功的案例,这里举两个例子。
    (1)IBM为中国中化集团公司打造的企业云计算平台
   中石化面临的困境是,调整业务的时候都需要进行信息同步,而这个过程遭遇资源瓶颈,孤立的数据中心令全球化的运作难以为继。中石化希望能够尽可能的进行数据共享和整合。IBM Cloud Labs 和GTS为中化搭建了企业云计算平台,该平台能够支持中化员工访问整合的资源共享池,并且支持运行大数据处理应用
    (2)甲骨文ERP云帮助上海海天天盈捷纺织科技有限公司打造云计算平台
  海天轻纺集团是一家集研发、生产、商贸及投资为一体的高科技纺织企业集团,。甲骨文在该公司搭建的云计算平台,帮助进行财务、采用、项目组合管理和供应链管理【8】。
技术分享

                                                                                            【图9】
<5>结束语
            云计算的发展仍然在继续。随着更多公司和个人对云计算的使用,很多工作的新模式将被创造出来。将会大大改善传统软件工程的开发模式,甚至在会给传统软件开发带来革命性的进步。
<6>引用文献及插图
【1】:美国国家标准与技术研究院(NIST):" Cloud computing is a type of Internet-based computing that provides shared computer processing resources and data to computers and other devices on demand. It is a model for enabling ubiquitous, on-demand access to a shared pool of configurable computing resources (e.g., computer networks, servers, storage, applications and services), which can be rapidly provisioned and released with minimal management effort."
【2】:《云计算---深刻改变未来》 作者:张为民
【3】:《CloudComputingWebBasedApplications》 (美)MICHAEL MILLER
原话为
"Cloud computing is User-centeric .Once you as a user are connected to the cloud,whatever is stored there----documents,messages,images,applications,whatever becomes yours.In addition,not only is the data yours,but you can also share it...."
"Cloud computing is task-centric......"
"Cloud computing is Programmable......"
【4】:wikipedia 原话为"Software architecture refers to the fundamental structures of a software system, the discipline of creating such structures, and the documentation of these structures. These structures are needed to reason about the software system. Each structure comprises software elements, relations among them, and properties of both elements and relations,[1] along with rationale for the introduction and configuration of each element."
【5】:来源于gitHub Enterpries 网站的Features介绍 原文为 "GitHub Enterprise is the on-premises version of GitHub.com. With flexible deployment options, centralized permissions, and hundreds of integrations, you and your team can enjoy the best parts of working with GitHub without compromising on the features your business needs."
【6】:书名《Applying UML and Patterns 》 作者:Craig Larman。 来自于第16.1章,原文为"The UML includes class diagrams to illustrate classes, interfaces, and their associations. They are used for static object modeling.................."
【7】:书名《问道云计算》 作者:王鹏,来源第6章。
其他参考书籍:
【8】:取自2015年度云计算应用案例TOP100
【9】:《云计算宝典:技术与实践》
其他参考
【10】:《OpenStack Cloud Computing Cookbook 2012》
引用图片:
【图1】:《云计算发展的几个关键问题》作者:张铭芮
【图2】:自行截图
【图3】:自行绘制
【图4】:github enterprise网站截图
【图5】:UML官网
【图6】:来源于《Applying UML and Patterns 》 16.1章的插图。
【图7】:来源于PPT《虚拟化和云计算让Hadoop变得简单》
【图8】:来源于https://aws.amazon.com/cn/free/
【图9】:来源于2015年度云计算应用案例TOP100

 

云计算对传统软件工程的影响