• 1
  • 2
  • 3
  • 4
  • 5
阿里云应用开发 首 页  »  帮助中心  »  云服务器  »  阿里云应用开发
云计算编程有什么不同?
发布日期:2016-7-28 20:7:27

  “云计算”这个标签适用于几项技术,充斥着业界与厂商的炒作。胆识多数人承认,云计算绝不是公用计算(utility computing)与XX即服务这么简单。

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

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

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

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

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

  1、解你的工具

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

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

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

  2、可扩展性而设计

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

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

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

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

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

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

  3、全性

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

  若使用云计算,你那些内部的安全技术突然用在公司防火墙的外面。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问题,所以它同样没戏。”

  4、新考虑你的软件架构

  虽然开发人员预计部署到云计算“就像”任何一种类型的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、开源环境或者微软开发环境。我得出的结论是,你也许可使用自己青睐的任何一种环境,但一些云计算开发工具的早期版本可能会带来诸多局限性。

  5、动态的基础架构而设计

  对许多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。你要更深入地了解业务和云计算用户环境。”

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

  6.是关键

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

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

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

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