云计算编程有何不同?

译文
云计算 新闻
希望采用或必须采用云计算的Web开发人员要学会的绝不仅仅是几个新工具,专家们解释了需要加强的一些技能,包括工具、可扩展性、安全性、架构设计以及不断增加的基础架构知识。

【2011年12月21日 51CTO外电头条】“云计算”这个标签适用于几项技术,充斥着业界和厂商的炒作。不过大多数人承认,云计算绝不是公用计算(utility computing)和XX即服务这么简单。

这种区别对于软件开发人员来说尤为重要;他们知道,这下一大热门技术很可能会给自己的饭碗带来影响。头脑聪明、关注职业发展的编程人员总是在千方百计提升技能,为下一项不可或缺的技术作好充分的准备。

与“普通的”Web开发相比,云计算开发到底有什么不同?如果编程人员想准备好充分利用任何一种云计算:软件即服务(SaaS)、平台即服务(PaaS)或基础架构即服务(Iaas),那么他应该关注哪些技术呢?如果贵公司之前一向从事Web开发,但现在打算大规模采用云计算,那你又应该关注哪些独特的技能呢?由于SaaS开发人员操心的问题可能与使用虚拟开发环境的人员操心的问题全然不同,而业界把“云计算”视作是一种整体式技术,所以学习过程可能会更让人晕头转向。

我请教了经验丰富的开发人员和开发商(因操心这些问题而夜不能寐的技术人员,而不是营销人员),听听他们有何高见。

“在云计算环境开发应用程序就有点像是从美国到访加拿大。几乎每个方面都一样,但是你会注意到存在一些细小的差异,必须顾及到。”--Standing Cloud公司的David J. Jilk

因而,下面概述了你在探索云计算时需要关注的几个方面,包括工具、可扩展性、安全性、架构设计以及不断增加的基础架构知识。

了解你的工具

我们不妨先把简单的部分搞定。向云计算迁移可能需要你学习新的应用编程接口(API),比如面向谷歌应用引擎、SalesForce.com或者你的应用程序将来依赖的任何软件的API。对于大多数开发人员来说,学习新的API、研究新的数据库工具或者探究新的开源平台是很平常的事,不过你的确需要为此留出时间。

另外,虽然一些开发工具拥有允许部署在云计算的插件,但是编程人员必须学习那些功能特性。Ektron公司的工程主管Alpesh Patel说:“以微软SQL Azure为例,存在‘普通的’Web开发环境没有的技术障碍。”你可能只好尽快熟悉稀疏列(sparse column)、扩展存储过程(extended stored procedure)、服务代理(Service Broker)或通用语言运行时环境(CLR)和CLR用户定义类型。

这些工具或升级版有许多比较新颖,所以你可能要注意它们存在的局限性。Patel说:“根据我本人的经验,微软Windows Azure平台不允许在网站中使用混合语言。网站模板、控件、应用程序代码及其他几种组件都必须作为单一语言来运行。我们只好把原先基于SQL服务代理的队列技术改成自定义的队列解决方案。”#p#

为可扩展性而设计

“云服务的可扩展性完全取决于底层的Web应用程序。如果Web应用程序本身就存在编程方面的瓶颈,那么把该应用程序迁移到云计算环境无助于事。”--rackAID公司的Jeffrey Huckaby

云计算承诺的一个优点是,基础架构很容易扩展。于是,一些开发人员误以为“所以开发人员没必要再考虑扩展性,”但是经验丰富的技术人员对此持有不同的看法。

Marc LaFleur是提供具有语音功能的通讯应用软件的托管服务提供商Parlance Corporation的首席架构师,他解释:“云计算不是相当于用更多的硬件来解决问题。没错,云计算提供了看似没有限制的可扩展性,但是前提是设计的系统其架构采用了可以充分利用可扩展性的方式。如果你的应用程序依赖存储在内存中的会话数据,你很快会发现面临重大瓶颈。”

为更高的可扩展性设计应用程序需要你了解更多的知识,而不是更少的知识。rackAID公司首席执行官Jeffrey Huckaby说:“我在与许多刚创办的SaaS提供商和社交网站类型的网站合作时,经常遇到并不明白可扩展性概念的开发人员。云服务的可扩展性完全取决于底层的Web应用程序。如果Web应用程序本身就存在编程方面的瓶颈,那么把该应用程序迁移到云计算环境无助于事。”

他建议,应该学会在职能部门之间合理分配工作负载,并且对代码进行正确的分析。Huckaby说:“当你为比较小的负载编写应用程序或者慢慢扩大用户群时,有时间来逐步改进。不过当你推出Facebook应用程序时,可能没有时间来排除故障和困难。使用XDebug之类的代码分析工具,就能收到奇效。”

正如别以为你的代码天生就很安全,同样别以为你的代码具有可扩展性。Servoy公司首席执行官Jan Aleman说:“你开发的应用程序会比之前开发的任何应用程序都来得庞大。你的应用程序一定要有扩展性。与有着这方面经验的人交流交流;搞技术的都喜欢交流。”#p#

安全性

另一个明显的顾虑就是云应用程序及其依赖的数据具有的安全性。

如果使用云计算,你那些内部的安全技术突然用在公司防火墙的外面。Parlance公司的LaFleur说:“当你面对贵公司里面的业务应用程序时,常常使用一种相对简单的安全模式就应付得了。”你的内部系统通常内置了一些集成安全功能,可能还使用活动目录。他说:“然而一旦到了云计算环境,情况就大不一样了。开发人员在开发过程的早期阶段,既要考虑身份验证(‘我就是我所说的那个人’),还要考虑授权(‘我可以访问哪些数据/系统’)。还要了解你的数据可能受制于哪些法律——比如《健康保险可携性及责任性法案》(HIPPA)和《萨班斯-奥克斯利法案》(SOX),这很重要。”

“云计算开发本身与传统开发没有任何不同。不过,它不大容忍得了糟糕的开发方法。”--Parlance公司的Marc LaFleur
 
ICF国际公司的高级分析师Kevin McDonald著有《认清云计算:管理云计算领域的风险》一书。他说:“这些问题并不是云计算开发所固有的,但是在云计算环境会被放大,这是一种意料之外的影响。”他建议,开发人员应该熟悉美国国土安全部的全国网络安全部门等组织机构,该部门在推广内置数据安全性(Build Security In)倡议,并且列出了25个最危险的常见缺陷列表(Top 25 Common Weakness Enumerations)。

对于开发人员来说,云计算安全还意味着要考虑数据安全性,并且选择同时符合贵公司的技术要求和业务要求的提供商。就拿咨询公司TeamEXtension首席执行官Bienvenido David III的经历来说吧,“面临的问题更多地涉及配置和策略,而不是软件开发。”比如说,TeamEXtension将经过AES加密的信用卡号码保存在其数据库中。如果发生了安全泄密事件,支付卡行业数据安全标准(PCI DSS)审计人员需要访问服务器,但是亚马逊的弹性计算云(EC2)不允许访问。他说:“我们无法做到PCI与亚马逊EC2实现一级符合。我们可以把信用卡号码保存在别处,但是这么做带来的问题会多得多。Rackspace Cloud也存在与亚马逊EC2同样的PCI问题,所以它同样没戏。”#p#

重新考虑你的软件架构

 尽管开发人员预计部署到云计算“就像”任何一种类型的Web开发,你的确需要认识到架构方面的差异。Standing Cloud公司首席执行官David J. Jilk解释:“在云计算环境开发应用程序就有点像是从美国到访加拿大。几乎每个方面都一样,但是你会注意到存在一些细小的差异,必须顾及到。”他表示,大多数差异与基础架构和技术堆栈层有关,而不是与应用程序代码本身有关。

Heavy Water软件公司的首席开发人员Anthony Eden表示,内部托管环境往往很稳定,基本上不受外界因素的影响。但是由于资源共享,云计算环境(以及在一定程度上的所有虚拟化环境)显得很混乱。Eden指出:“整个系统的运行可能受到完全不受你控制的因素的影响,而且常常是这样。”他给出的解决办法就是:采用大猩猩工程(gorilla engineering),这是应对不断变化的环境的一种做法。

LaFleur提醒,不要把可扩展性误认为是系统性能。设计应用程序时要考虑到网络延迟。可扩展系统在负载状态下更可靠,而且可以保持相对一致的性能;但是也要承认到这一点:如果迁移到云计算,性能会受到影响,而且还会出现间歇性故障。你的应用程序应该能从容处理中断问题。

“想真正将Web服务适当地实施到云计算中,开发人员就要着眼于‘函数方面’,而不是着眼于‘对象方面’。”--Limewire公司的John Pavley

LaFleur说:“云计算中的数据库也许能够以异常快的速度从存储系统中获取数据,但是这些数据仍得传送到客户端应用程序。”他发现,尽量减小传送的数据量常常会给性能带来重大影响。如果你只需要100个记录中的三个字段,就要确保你获取的仅仅是这些内容;他表示,更好的做法是,分成每批25个获取并显示那些记录。

这可能要有不同的理念。Limewire公司的工程副总裁John Pavley说:“想真正将Web服务适当地实施到云计算中,开发人员就要着眼于‘函数方面’,而不是着眼于‘对象方面’。函数式编程意味着动态定义针对没有状态的数据执行操作的函数,可以根据需要,将函数均匀地分发到任何数量的云服务器。遗憾的是,至少大多数开发人员一贯以来着眼于‘对象’,对象是指将数据绑定在单一Java类或C#类里面的有状态实体。很难针对对象实行负载均衡,它们到头来给你的云计算环境带来了人为的限制。”

这给你选择的工具和语言带来了影响(前面关于学用新工具的第一点有所提及)。Pavley说:“通过Perl、Python和JavaScript等编程语言,使用无状态函数进行扩展要容易得多。”但是其他开发人员向我详细解释了他们选择的编程语言为什么是最佳选择,他们致力于Java、开源环境或微软开发环境。我得出的结论是,你也许可以使用自己青睐的任何一种环境,不过一些云计算开发工具的早期版本可能会带来诸多局限性。#p#

为动态的基础架构而设计

对于许多Web开发人来说,与服务器有关的任何工作都交给运营部门处理。不过你进入到云计算环境后,预计要比以前更深入地了解系统管理员面临的问题。甚至出现了一个新的术语来形容关注数据中心的编程人员:dev-op。

“以亚马逊EC2为例,你需要根据带宽、内存和处理器来付费,所以开发人员在开发应用程序时,要关注这些因素。”--Ektron公司的Alpesh Patel

 云基础架构从诸多方面告诉了你应该如何设计软件、编写代码,其中一个方面是你如何付费给云平台提供商。SunGard可用性服务公司企业云基础架构服务部门的首席架构师Chip Childers指出:“你在云计算环境中使用的基础架构的每一个部分都需要你付费。”

Childers表示,为了降低成本,“开发人员应该在‘少就是多’开发方面加强技能,比如在减少内存和处理器使用量等方面。认真分析你应用程序的性能,检查有无资源泄漏的现象,并且建立模型,弄清楚每一个服务器实例可以支持多少个用户。”

这种做法适用于大多数云计算平台。Ektron公司的Patel说:“以亚马逊EC2为例,你需要根据带宽、内存和处理器来付费,所以开发人员在开发应用程序时,要关注这些因素。”相似的是,微软Windows Azure按照计算实例和资源使用量来收费。Patel解释:“这些都被计量;要是提供商发现某个应用程序在大量消耗资源,那么该应用程序会被隔离起来。我们在内存和处理器使用方面进行了全面的测试,以避免应用程序被隔离以及支付不必要的费用。”

据Huckaby声称,云计算开发新手还在为数据一致性概念而纠结。他说:“你开始有多个应用服务器和云计算实例时——它们可以根据负载大小来启用或停用,你就得确保应用程序能够合理地传送和获取数据。你不希望应用程序实例关闭后,被剥夺了数据或者丢失了数据。”

这些工作有一些侧重于技术和设计,但是专业云计算环境还需要开发人员更加关注流程、流程和策略。Solutionary公司的行业解决方案副总裁Pamela Fusco还是云安全联盟(Cloud Security Alliance)的创始成员,她建议开发人员要列出应用程序的重要级别(很重要、比较重要、不大重要),从而确保云服务提供商可以满足所需的服务级别协议(SLA)。

这不仅仅是数据中心工作人员的问题,不过许多开发人员习惯于这么认为。你的应用程序将驻留在网络上的什么地方?Fusco表示,自定义应用程序需要自定义的支持和关注,所以云计算环境中太多的特别定制会导致SLA问题。她说:“不仅仅要了解如何编写、编写什么,还要了解基本的业务要求、云服务提供商支持合同和SLA。你要更深入地了解业务和云计算用户环境。”#p#

“不仅仅要了解如何编写、编写什么,还要了解基本的业务要求、云服务提供商支持合同和SLA。你要更深入地了解业务和云计算用户环境。”--Solutionary公司的Pamela Fusco

服务是关键

“普通的”Web开发人员在某种程度上也许可以忽视Web服务,但是云计算开发会让你极其熟悉这些概念。

这是企业开发人员可能比新兴公司的开发人员更有优势的一个方面。据LaFleur声称,“如果开发人员深入了解面向服务的架构(SOA),那么他面对云计算环境时要得心应手得多。把整体式应用程序分解成独立服务的意义不仅仅在于方便重复使用(重复使用是SOA支持者通常大力吹嘘的优点)。合理实施的SOA系统让你可以充分利用云计算的可扩展性。”

Java企业架构师Alexander Katrompas说:“Web应用程序与任何企业应用程序(包括云计算环境中的企业应用程序)最大的区别在于,业务逻辑层与Web服务层实现了严格分离。典型的Web应用程序更关注交付内容,而企业应用程序关注的是处理和持久性。”他表示,从企业环境迁移到云计算环境需要了解大规模分布式计算和负载均衡,这需要严谨的企业架构。Katrompas补充说:“虽然大多数人认为云计算是一场‘革命’,但是完全是营销炒作。云计算其实是企业模式的一种演进,它本身是Web应用程序模式的扩展而已。”

LaFleur表示,最终,“云计算开发本身与传统开发没有任何不同。不过,它不大容忍得了糟糕的开发方法。”多年来,开发人员一直被告知要注意可扩展性和安全性等方面。他说:“实际情况是,大多数开发人员依赖通过隐藏手法来改进硬件和安全的做法。云计算毫不留情地揭露了这些糟糕做法的真面目。”

原文链接:http://www.itworld.com/career/121228/programming-cloud-computing-whats-different
 

责任编辑:鸢玮 来源: 51CTO
相关推荐

2023-12-12 11:45:54

云服务数据科学家云计算

2022-02-25 23:44:44

云计算DRP安全

2012-02-29 09:50:52

云计算虚拟化

2018-06-22 23:55:59

云计算备份灾难恢复

2016-12-15 15:26:17

与计算

2018-06-26 10:59:31

虚拟化云计算核心技术

2017-01-20 15:00:27

数据中心云计算

2013-07-24 09:29:35

云就绪应用DevOps工具分布式网络

2021-12-02 14:10:34

ChromeChromium浏览器

2010-04-27 13:58:09

云计算虚拟化

2011-03-17 17:59:33

云环境中开发

2020-09-25 18:10:06

Python 开发编程语言

2015-06-17 17:30:42

微软中国电信Windows Azu

2019-05-06 07:53:13

AnthosAzure Stack容器

2017-05-31 14:52:53

虚拟机Docker容器

2016-12-22 16:21:37

Windows微软盗版系统

2021-07-02 15:28:55

LTE5G网络

2012-04-16 10:37:45

IBM惠普云计算

2016-05-06 15:59:41

2017-01-13 16:26:56

开发
点赞
收藏

51CTO技术栈公众号