3月13日外电头条:云服务颠覆开发传统观念
云服务的主机放置在Internet上,用户直接从Internet的服务器集群上获取应用和服务,这样的部署可以让开发人员不必再过多关心底层架构问题,但其中有一些新的细微差别是他们必须处理的。这些问题包括改变数据库的开发方式,无状态的重点应用,以及对不同框架进行处理。【51CTO.com编者注,无状态即statelessness,是指云提供无状态的服务,这种服务是短连接的,比如Session,云里不会保留一个会话状态信息,云计算技术中包含了维护应用程序状态变化的机制。 】
云服务固有的无状态性和服务器故障
“在云计算中,软件本身能够提供应用所需要的资源,这是最大的变化,”Sun公司云计算CTO Lew Tucker说。通过使用API,开发人员可以为云应用编写程序,并直接向云提供商要求更多的资源。
开发人员需要进行冗余设计,因为云服务中的服务器是平均分配的,微软Azure云平台副总裁Amitabh Srivistava表示,“如果你不为云应用设计冗余的话,服务器出错几乎是不可避免的。”
云应用必须按照无状态搭建,Srivistava说。“如果你拥有固定的状态,就会出现问题。云服务的模型则是:如果有的应用失效了,你可以移除它并取而代之,”当然这需要无状态设计,他指出:在云中“没有任何概念的本地磁盘,也没有真正的登录。云中所有的一切应用都被无状态无形地包裹着。”
Tucker指出,“简单的云应用绝对应该是无状态的。然而,很多有趣的应用总是免不了记录一些状态,这就是为什么我们仍然需要数据库或对象商店来存储一些东西”。某些项目比如用户信息可以存储起来。但是,具有规模的应用程序比如网络前端,在云中依然是无状态的。
云应用的另一个差异是应用的组件可以在不同的云中运行。例如,一个应用可以调用Facebook的表现层,把数据储存在Amazon的S3上,而逻辑运算则完全可以放置在其他地方,Tucker说,“以前,人们一般都会在自己的服务器上把整个应用开发出来,现在不需要这样了。”
这些事情意味着,建设云应用需要新的系统架构和新的思维方法,需要把云服务的巨大规模重点考虑进来。Tucker说,“这里没有魔法,构建可扩展的云应用需要坚实的工程基础和设计”。
云平台可以提供帮助。Tucker说,比如Google App Engine就为受限应用自动提供了扩展性,另外一些平台提供了横向的应用设计模式,比如Amazon的弹性云计算平台EC2提供了Multiple Availability Zones,开发人员从设计开始就可以把应用分散到多个地点上。
不一样的云数据库
抽象和无状态的使用也影响到数据库。例如,Azure平台提出了一个非标准关系数据库的模型,可以从另一个角度建立数据库。咨询公司Benjamin Day Consulting总裁Ben Day指出,Azure的存储引擎不使用标准的关系数据库,因此“如果仍然按照标准的关系型数据库来开发标准的应用,很多工作可能会变得没有意义,”他举了一个关系型数据库存储过程的例子,其中的查询逻辑方法可以接近实际的数据,而这已经不再适用于Azure的云服务。
“但问题是Azure的数据没有保证,你不知道你的数据到底保存在哪个服务器或Datacenter或任何设备中,” Day说。另外,Azure的存储引擎与微软提供的基于云服务的SQL Server版本是不同的,因此他指出,开发者在设计应用时必须小心。
据了解,微软也正在加速开发Azure利用关系型数据库的能力,同时为非关系型数据存储也提供了数据表式的存储选择。
并不仅仅在Azure上出现了数据库的分歧。例如,“Google App Engine不仅不会看到实际的物理硬件,最终连机器的概念也会被淡化,”Google App Engine产品经理Pete Koomen这样说。这意味着开发者上传代码,然后Google进行管理并将数据库分割。“因为我们更加关注于自动化的进程,数据处理有一定的模式,而开发人员必须遵循,”这与传统的SQL模式完全不同,Koomen说。
App Engine中使用的数据库模型称作Big Table,开发者可以使用它来持久存储数据。“Big Table不是SQL数据库,原因是SQL数据库支持的一些功能实在难以进行分割,这与我们跨机器存储数据的想法无法结合,”Koomen说。
“在我们的系统中,我们已经发布了编程模型,反传统从一开始就受到鼓励,”开发者将数据存储在多个地方的的好处是,这种做法可以让应用的查询功能非常有效,Koomen说。
当谈到云环境中是否可以继续使用关系型数据库,Koomen的反应是伸出了大拇指――不过是向下的!“我们发现,在高流量的网络条件下,关系型数据库非常难以管理,而且最终会给开发者带来巨大的资金和资源负担。”
要习惯于云层的迅速变化
Model Metrics,一家咨询公司,已经部署应用了Salesforce.com和其他公司的云服务。它发现的云服务应用和传统的网络客户端应用的一个主要区别是,“在云服务中,一切都变化的太快了。”公司CTO John Barnes这样认为。
就拿云服务的新贵Salesforce.com来说,每年都要发布好几次新的版本,每次升级都会提供一些开发者用得着的地方,但Barnes并不反对这样频繁的升级。“作为开发人员,需要跟上事态发展,留意许多不同的博客,也要经常参与网络研讨会。”他说。
云中没有管道
使用松散耦合结构的Web服务,使云服务成为了更容易的开发平台,Barnes说。从此开发者可以专注于创新和业务逻辑而不再担心管道负载和底层架构,如操作系统和硬件这类东西。比如Salesforce.com 提供的Force.com云平台,为用户全面提供了安全性、工作流、管理员和负载平衡功能。
Model Metrics的一位客户原计划使用微软的.Net平台建立一个入学申请应用,但经调查发现,使用Force.com进行开发,成本可以降低3至4倍,这在很大程度上是由于其采用了预先构建的功能设计。
云开发中的其他注意事项
最后,云服务的开发者需要注意的是各种云平台的不同授权模式,Barnes说,天空的云彩五颜六色,各种云平台也各有各的定价机制。