在云计算推动下的软件开发

什么是云计算

  对云计算的定义有多种说法。对于到底什么是云计算,至少可以找到100种解释。现阶段广为接受的是美国国家标准与技术研究院(NIST)定义:云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问, 进入可配置的计算资源共享池(资源包括互联网,服务器,存储,应用软件,服务),这些资源能够被快速提供,只需投入很少的管理工作,或与服务供应商进行很少的交互。本文将着重讨论云计算与传统软件开发的联系与相互关系。

  云计算(cloud computing)是一种基于Internet的计算。在云计算中,存储和运算将不再运行在本地计算机或服务器中,而是运行在分布于Internet上的大量计算机上,也就是说,云计算通过把原来由个人计算机和私有数据中心执行的任务转移给分布在Internet上由全体用户共享的大型计算中心来完成,实现了计算机硬件、软件等计算资源及对这些计算资源进行安装、配置与维护等服务资源的充分共享。

  所谓的”云”其实是指分布在Interact中的形形色色的计算中心,包含成千上万甚至几十万、几百万台计算机或服务器。用户不再购买高性能的硬件,也不再购买或开发各种功能的软件,而是使用任何可上网的设备,连接”云”,利用”云”提供的的软件或服务,直接在”云”上处理并存储数据。云计算的应用模式如图l-l所示。

  因此,云计算可以看作是并行计算(Parallel Computing)、分布式计算(Distributed Computing)和网格计算(Grid Computing)的发展。云计算与网格计算的主要区别在于:网格计算侧重于解决计算和存储资源的分配,即将大家提供的计算和存储资源根据各自应用的需要重新分配给大家;而云计算则倾向于计算、存储和应用资源的共享,在云计算中,用户不仅不需要象网格计算那样,提供计算和存储资源,也不需要自己购买或开发应用,所有的一切全都由云服务商提供。

  由于云计算  (cloud computing)是基于互联网的相关服务的增加、使用和交付模式,通常涉及通过互联网来提供动态易扩展且经常是虚拟化的资源。云是网络、万维网的一种比喻说法。过去在图中往往用云来表示电信网,后来也用来表示网络和底层基础设施的抽象。因此,云计算甚至可以让你体验每秒10万亿次的运算能力,拥有这么强大的计算能力可以模拟核爆炸、预知气候变化和市场发展趋势。用户通过个人PC、台式电脑、手机等方式接入数据中心,按自己的需求进行运算。

区别究竟在哪

要了解云计算环境下的软件开发(包括WEB开发),我们就必须要先明白云计算的诸多特点:

(1)     高扩展性。与传统的单一服务器不同,云计算充分调动着位于云端的诸多计算资源,意味着所有的用户、需求都是潜在的,软件的业务规模是可以任意发展的。如果将传统的软件工程比作开发一个固定功能的软件,那基于云计算的软件开发则更像一个Chrome浏览器平台,用户可以自己定制插件和功能。这就给软件开发的过程提出了更高的要求。无论是在撰写文档的过程,还是代码开发的过程,都需要考虑更多的潜在需求。

(2)     虚拟化的超大规模。云计算对应着用户的云需求,这些需求按传统的观念需要传送到主机服务器进行处理,并即时返回到client端。然而,在云计算环境下,一切需求与其使用的具体物理计算资源无关。我们开发人员无需担心需求所需要的具体物理计算资源,而只需要在开发时制定好规则,剩下的计算过程交给云计算来处理。当然地,这就对应着软件开发过程中测试过程的改变。以往的软件工程需要先大致计算潜在客户需求和,设计和测试服务器。其中,服务器压力测试是非常重要的一个环节。如果服务器经常崩溃,那对用户体验来说是致命的破坏。然而,基于云计算的软件开发便可不必担心此类问题。

(3)    接口的变化。软件工程向云计算迁移可能需要开发人员学习新的应用编程接口(API)(比如需要开发面向GOOGLE应用引擎、SalesForce.com或者应用程序将来依赖的任何软件的API)。虽然对于大部分开发人员,API的学习是非常平常的,但在云计算开发中尤为突出。另外,虽然一些开发工具拥有允许部署在云计算的插件,但是编程人员必须学习那些新的功能特性。以微软SQL Azure为例,存在“普通的”Web开发环境没有的技术障碍。但是还是要尽快熟悉稀疏列(sparse column)、扩展存储过程(extended stored procedure)、服务代理(Service Broker)或通用语言运行时环境(CLR)和CLR用户定义类型。这些工具或升级版有许多比较新颖,尤其是目前软件工程开发的概念日新月异,开发人员可能要注意它们存在的局限性和版本的不断革新。

(4)     更高强度的安全性挑战。云计算在给用户带来成本降低、管理信息便利的同时,云计算的安全问题也日益凸显,云计算意味着用户数据转移到用户掌控范围之外,其安全风险涉及到诸多方面:数据泄露、数据传输过程、用户难以监管等。逐个来说,云平台的环境使得数据集中存储,一旦云平台遭到攻击被破坏,那么就会造成数据丢失和隐私泄露的严重后果,云服务提供商拥有超级用户角色,如果没有严格的监管或者这种超级用户角色的权限被滥用,就会增加用户数据泄露风险。数据泄露往往发生在数据传输过程,这对软件开发过程中的加密算法、动态密码等方面提出了更高的要求。然而道高一尺魔高一丈,需要防范用户信息的泄露,编程人员需要不断地提高自己防御性编程意识,并还要具备一定的密码学知识。当然,在用户使用过程中,用户对云计算软件的监控也是另一个尖锐的安全问题。用户在使用云服务时用户数据的控制权会转移到云服务提供商手中,用户可能无法知道自己的数据存放在哪里,也不知道云服务提供商是否对数据进行了正确的保护:比如云平台是否隔离了多个用户的数据、云服务提供商是否按照用户要求删除了数据、是否对存储位置进行了清洗、云服务提供商是否周期性地对存储的数据进行完整性检查等。这又是一个亟待解决和规范化的问题。作为软件开发工程领域,需要制定严格的规则和标准(例如在用户使用手册、开发文档中加入相关说明或解决方案)。

云计算对软件工程的促进与弥补

  对于传统的软件行业,最令开发组织头疼的问题莫过于盗版问题。这一问题在中国等发展中国家非常严重。事实上,各个行业的“盗版、假货、山寨”层出不穷,然而由于软件行业的复制低成本和高利润,使得这一问题尤为突出。如何能解决这一问题?一方面需要法律的严惩,另一方面,我们可以转换思维,为什么客户会选择盗版?一次成本过高!那么,云计算便可解决这一问题。对于传统软件开说,其项目的最大初始化成本主要包含三部分:授权成本、培训成本和服务器的部署。然而,云计算的开发更为敏捷,也不需要一开始就购置庞大的服务器设备。这就可以将“首付”转化为软件后期维护、升级的“贷款”。对于企业和个人来说,分期支付小额的维护费用也是更容易接受的,这样就不会去铤而走险购买盗版软件。反而,盗版软件缺乏后期的维护,在软件升级上也会出现非常大的问题。

  除此以外,基于云计算的软件之间可以很好的交互,这无疑大大提高部署各种软件的各个部门之间的工作效率。比如,传统环境下,某公司的财务、生产、人事管理软件之间无法友好的工作,形成了一个一个的信息孤岛。随着时间推移,也许公司会采取跨部门的软件系统,但这意味着更庞大的软件系统、更复杂的软件管理和维护,无疑大大增加的人力物力成本。云计算的强大交互性、互联性便是解决这一问题的最好方案。

未来的发展

  从短期来看,云计算所带来的各项变化对个人影响还是较小,云计算技术首先会部署到各大企业用于提高生产力效率。对于软件开发公司,广泛地聘用有大数据、数据挖掘、网络安全背景的程序员则是大势所趋,也是公司在未来软件开发行业的核心竞争力所在。

当然,云计算的未来发展也面临着各种挑战。在安全问题越来越重要的今天,如何能阻止图谋不轨的人对网络信息的截获,是整个软件开发行业亟待解决的问题。只有将此问题解决,云计算才能真正完成从概念到服务性产业的跃进和转变。

谈谈云计算本身

  谈了这么多,一直在聊云计算和传统软件开发的区别与联系。既然云计算是时代发展的潮流,我们不妨来单纯地探讨一下云计算本身。

云计算服务的三种模式:IAAS    PAAS   SAAS

  其实云也是分层的。任何一个在互联网上提供其服务的公司都可以叫做云计算公司。其实云计算分几层的,分别是Infrastructure(基础设施)-as-a-Service,Platform(平台)-as-a-Service,Software(软件)-as-a-Service。基础设施在最下端,平台在中间,软件在顶端。别的一些“软”的层可以在这些层上面添加。如果用通俗易懂的例子来阐述这三种模式的区别,那么用吃披萨的例子再好不过了。就像下面这张图:

 

  传统的软件开发本地部署就像在家自己做,从厨具(烤炉、铁板、煤气)到食材(奶酪、cheese、蔬菜、肉蛋)都得自己准备,还需要有专业的烹饪技巧。Iaas(基础设施即服务)就像从披萨店里买回承平,自己回家加热就好。但毕竟还是在自己的餐桌上享用。PaaS(平台即服务)类似于外卖,只需要打个电话,就可以享用,相比之前就更为简捷,但终究还是在自己的餐桌上。而SaaS(软件即服务)就是直接“下馆子”了。什么都不需要准备就行。

好了,那么我们换一种说法。对于一家技术公司,拥有着强大的开发人员和硬件资源,就像一个既会做pizza又有烤箱的cooker,即拥有着础设施(infrastructure)、平台(platform)和软件(software)。

 

  这其实就是云计算的三个分层,基础设施在最下端,平台在中间而软件在顶端。分别是IaaS、PaaS和SaaS。但是,不是所有公司都拥有这么强大的开发能力。如果只是为了达成某些商业目的而不是技术成就(事实上这也是大部分商业软件开发公司的目的),那完全不需要去买服务器,或者别的高昂的硬件来控制本地应用,即本地部署。其实完全可以考虑云服务供应商,也就是元计算的三个层次:IaaS、PaaS和SaaS,就像pizza店提供三种服务:买成品回家做、外卖和到披萨店吃。

I AAS    PAAS   SAAS一些具体的细节

基于IaaS: Infrastructure-as-a-Service(基础设施即服务):

  我们便可以将硬件外包到别的地方,IaaS公司可以提供场外服务器,存储和网络硬件供租用。这无疑大大节省了维护成本和办公场地,公司可以在任何时候运行这些租用的硬件来运行。比如,Amazon,Micorsoft等公司就会提供IaaS服务。这些公司提供的不仅仅是IaaS,他们还会将其计算能力出租出来供租户host网站。

基于PaaS: Platform-as-a-Service(平台即服务):

  某些时候,PaaS也叫作中间件。公司的许多开发都已在这一层进行从而节约时间和资源。PaaS公司在网上提供各种开发和分发应用的解决方案,比如虚拟服务器、操作系统等。这会节省软件开发公司在硬件上的费用,也让分散的工作小组之间合作变得更加容易(因为互相不用了解彼此底层的东西)。比如:Google App Engine、Microsoft Azure,还包括最近兴起的公司比如AppFog、Mendix等。很明显地感觉到PaaS公司要么是老牌公司分出的新部门,要么是新成立的startup,是非常新颖的概念。

基于SaaS: Software-as-a-Service(软件即服务)

  Web、Web还是Web!只能说,这是未来一个软件工程发展的很好的方向。就像Google的chrome一样,我们在浏览器里下载很多的插件。最近新兴起的微信小程序,就是SaaS很好的例子。软件可以直接基于微信运行,好像微信就像传统的操作系统一样。使用简单的Javascript语言,了解SaaS的接口文档,便可以轻松地进行编程。

关于虚拟化技术

虚拟化技术又是另一个非常大的话题了,看到有评论里要博主讨论一下,还是简要地说几句我所了解的内容:我所了解的有spark、hadoop、openstack、cloudstack等。当然,这些虚拟化技术也不是同一个层级的,比如如果把openstack比作windows操作系统,那hadoop像office套件。说起hadoop,虽然它历史非常悠久我认为它短期内应该不会被淘汰。Spark现在虽然比较火,但是in memory的model局限性很大。如果data size超过内存的size,速度就是大幅度下降。总之Spark在某些特定领域表现很好,但是数据量一大,尤其是在做reduce like的job时候,对内存要求极高,且不稳定。对于大量的data,spark需要调整参数才能适应。而Hadoop MapReduce的intermediate data on disk较稳定,也较为通用。

说到openstack和cloudstack,我想用两张图标来对比一下:

基本情况的对比:

 

架构的对比:

 

但openstack目前在国内发展的不错,支持厂家也多。OpenStack是Rackspace和NASA共同研发的,Rackspace本身在IaaS领域就很有知名度,而且因为有众多领军企业都加入到OpenStack当中来。比如sina就有团队对openstack中的swift做的比较多。

参考文献

[1] 宋小荣.浅析云计算与传统软件行业的相互影响.郑州:郑州大学教育技术中心,2011.

[2]王金金.云计算服务模式下的知识产权保护研究.合肥:中国科学技术大学.2014.

[3]郭晶晶.云计算及其安全性分析.信息安全,2012.

[4] Kevin McDonald. 认清云计算:管理云计算领域的风险(译).

转载于:https://www.cnblogs.com/twistfate/p/5980129.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值