云计算(cloud computing)对传统软件工程的影响git
目录
<1> 云计算的概念和理解github
<2> 云计算对传统软件工程的影响编程
<3> 云计算在传统软件工程中充当的角色api
<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)资源部署的虚拟化
经过虚拟化技术可实现软硬件分离,虚拟化每每意味着平台无关性(这一点咱们能够从JVM中获取启发)。
每每在多种平台上均可以方便的进行资源部署。它包括将单个资源划分红多个虚拟资源的裂分模式,也包括将多个资源整合成一个虚拟资源的聚合模式。
服务器的虚拟化是指"服务器以及使用软件模拟数据存储设备"。这至关于吧服务器隔离开来。每个虚拟服务器做为物理服务器的一部分运行,多个虚拟服务器能够在一台物理服务器上运行。这些虚拟服务器能够是分离的,而且能够单独使用处理。
资源部署要虚拟化的前提是必须保证效率,即虚拟化后程序的运行效率必须大于等于在本地平台上运行的效率。为了更好的理解这一点,咱们介绍一下Hadoop。Hadoop是一个可以让用户轻松架构和使用的分布式计算平台。经过Hadoop用户能够很简单的处理大量数据或者进行开发。经过下图咱们能够知道,资源部署的虚拟化能够保证效率(图中VM>native)。
【图7】架构
(6)下降软件开发的复杂性
开发团队在将服务器和资源配置等交给提供云服务的企业后,只须要负责开发。其余服务器以及计算资源等问题都由提供云服务的企业来负责。用一句话说就是“大家负责开发,其余的都交给咱们(提供云服务的企业)”。
(7)显著下降开发团队的成本
开发团队只需付出相对较低的价格就能够得到云服务公司的服务器和数据处理功能,不须要团队购买硬件(文中的第一个例子就能够说明云计算的便宜)。使用云计算服务,如icloud,比购买通常的物理硬件要便宜得多,那么中小企业就能够摆脱不少没必要要的开支。例如cloud拥有的5GB的免费存储空间已经足够的存储至关一部分中小企业的工做文件备份了,这能够为他们节省不少的经费。不少云服务公司,都对小额的租用采起免费试用的策略,例如Amazon的AWS就是亚马逊提供的专业云计算服务。云计算对于创业团队是一个很大的助力。
【图8】
(8)销售模式,技术模式,管理模式的进步
云计算对传统软件开发的影响是深远的,不管是技术模式仍是管理模式都会发生巨大的变化。在云计算充分发展的将来,软件开发完成后,不须要我的用户手动安装,而是只须要接入某个应用功能服务商即可以完成全自动的安装,我的用户将不涉及任何技术层面的东西了,传统软件开发的技术模式和管理模式也会更加的智能化【7】。
(9)"代码再也不值钱"
随着云计算的发展,团队进行软件开发的时候将极可能不须要进行具体的代码设计,而代码库中的代码愈来愈多,这一点以谷歌为例,它包含了搜索、邮件、地图、文档处理等等功能,总共的代码的行据Google工程部经理 Rachel Potvin透露,是20亿行。软件开发团队只须要从海量的代码库中寻找特定的功能模块,最终进行构件间的组合,这同时也使得软件的架构分析在软件开发中也来越重要。app
<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