什么是云计算
对云计算的定义有多种说法。对于到底什么是云计算,至少可以找到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) 更高强度的安全性挑战。云计算在给用户带来成本降低、管理信息便利的同时,云计算的安全问题也日益凸显,云计算意味着用户数据转移到用户掌控范围之外,其安全风险涉及到诸多方面:数据泄露、数据传输过程、用户难以监管等。逐个来说,云平台的环境使得数据集中存储,一旦云平台遭到攻击被破坏,那么就会造成数据丢失和隐私泄露的严重后果,云服务提供商拥有超级用户角色,如果没有严格的监管或者这种超级用户角色的权限被滥用,就会增加用户数据泄露风险。数据泄露往往发生在数据传输过程,这对软件开发过程中的加密算法、动态密码等方面提出了更高的要求。然而道高一尺魔高一丈,需要防范用户信息的泄露,编程人员需要不断地提高自己防御性编程意识,并还要具备一定的密码学知识。当然,在用户使用过程中,用户对云计算软件的监控也是另一个尖锐的安全问题。用户在使用云服务时用户数据的控制权会转移到云服务提供商手中,用户可能无法知道自己的数据存放在哪里,也不知道云服务提供商是否对数据进行了正确的保护:比如云平台是否隔离了多个用户的数据、云服务提供商是否按照用户要求删除了数据、是否对存储位置进行了清洗、云服务提供商是否周期性地对存储的数据进行完整性检查等。这又是一个亟待解决和规范化的问题。作为软件开发工程领域,需要制定严格的规则和标准(例如在用户使用手册、开发文档中加入相关说明或解决方案)。
云计算对软件工程的促进与弥补
对于传统的软件行业,最令开发组织头疼的问题莫过于盗版问题。这一问题在中国等发展中国家非常严重。事实上,各个行业的“盗版、假货、山寨”层出不穷,然而由于软件行业的复制低成本和高利润,使得这一问题尤为突出。如何能解决这一问题?一方面需要法律的严惩,另一方面,我们可以转换思维,为什么客户会选择盗版?一次成本过高!那么,云计算便可解决这一问题。对于传统软件开说,其项目的最大初始化成本主要包含三部分:授权成本、培训成本和服务器的部署。然而,云计算的开发更为敏捷,也不需要一开始就购置庞大的服务器设备。这就可以将“首付”转化为软件后期维护、升级的“贷款”。对于企业和个人来说,分期支付小额的维护费用也是更容易接受的,这样就不会去铤而走险购买盗版软件。反而,盗版软件缺乏后期的维护,在软件升级上也会出现非常大的问题。
除此以外,基于云计算的软件之间可以很好的交互,这无疑大大提高部署各种软件的各个部门之间的工作效率。比如,传统环境下,某公司的财务、生产、人事管理软件之间无法友好的工作,形成了一个一个的信息孤岛。随着时间推移,也许公司会采取跨部门的软件系统,但这意味着更庞大的软件系统、更复杂的软件管理和维护,无疑大大增加的人力物力成本。云计算的强大交互性、互联性便是解决这一问题的最好方案。
未来的发展
从短期来看,云计算所带来的各项变化对个人影响还是较小,云计算技术首先会部署到各大企业用于提高生产力效率。对于软件开发公司,广泛地聘用有大数据、数据挖掘、网络安全背景的程序员则是大势所趋,也是公司在未来软件开发行业的核心竞争力所在。
当然,云计算的未来发展也面临着各种挑战。在安全问题越来越重要的今天,如何能阻止图谋不轨的人对网络信息的截获,是整个软件开发行业亟待解决的问题。只有将此问题解决,云计算才能真正完成从概念到服务性产业的跃进和转变。
参考文献
[1] 宋小荣.浅析云计算与传统软件行业的相互影响.郑州:郑州大学教育技术中心,2011.
[2]王金金.云计算服务模式下的知识产权保护研究.合肥:中国科学技术大学.2014.
[3]郭晶晶.云计算及其安全性分析.信息安全,2012.
[4] Kevin McDonald. 认清云计算:管理云计算领域的风险(译).