浅谈云计算中的平台无关性

云计算,这个词汇越来越成为IT企业的一种趋势,甚至于可能在未来的十年到二十年成为人们生活的一个重要组成部分。在2012年的博鳌亚洲论坛上,主持人这样形容:云计算将改变企业,社会,文化的关系,甚至于改变文明本身。

云计算,是一种集中管理服务资源的方式,这些资源包括计算能力、数据存取、软件服务等。峰子@风子柒认为未来的云计算会和另一个热门词汇“物联网”结合起来,理由很简单,物联网的实现背后会涉及极高量级的计算任务,考虑到超级计算机的局限,在当前技术下,云计算/分布式计算是唯一可能的解。那么,面对平台复杂度远超传统互联网的情形,比如容忍各式各样的传感器、OS、微型处理器,关注平台无关性成为必须的选择。


应该说,现有的云架构在设计之初都会对平台无关性进行充分考虑,但同时,也有许多客观原因影响到云服务的普及。下面,我以hadoop构架为例来简单说明。

一、hadoop架构对平台无关性的支持:

1.1 java语言

hadoop平台最初选择java作为唯一的开发语言是一个很明智的选择。

java确保了基础数据类型在所有的平台上面是一致的。对于C和C++这样的与平台捆绑的语言来说,基础数据类型的长度跟平台的字长有关,而Window、

Linux、OS/2、Solaris等不同平台的标准字长是不同的。这也就意味着在window平台下开发的程序在hadoop平台(目前只能铺设在Linux平台下)下运行异常。然而,

对于java程序而言,不管其运行平台如何,int都是32位二进制补码表示的有符号整数。


class文件独立于特定的java虚拟机。在hadoop架构之中,云计算程序开发者所做的只是将正确编写的java程序编译成.class文件并打包成.jar文件再递交给云方就ok了。class文件的一个重要特性就是能够在任何平台创建,也可以被任何的JVM装载运行。开发者不用刻意选择开发平台,也不需要关心云平台的版本信息,这无疑会加速云计算的发展。


1.2 伸缩性

伸缩性是java带给我们的另一个礼物。通常意义上的云平台是几百甚至几千台廉价机器的组合,这些机器可以是PC,也可以是小型服务器,也可以是

嵌入式系统,更可以是超级计算机(这个貌似不廉价)。原先的sun公司为不同的运行平台制定了不同的API包,就是著名的J2SE、J2EE、J2ME。因此,云平台完全可

以在不同的层次上对应用服务请求进行包装,并分配给相应的计算平台。比如,J2EE应用服务请求被指定分配至包含J2EE API的机器计算,而未包含相应API的其他机器则处理其他的job/task。

预计,在不久的将来,Oracle公司可能会针对未来的云计算需求,创建几个具体的java平台,或包含功能更加强大的API用来支持大型分布式计算,或

功能更加紧凑的API来支持未来的云计算—物联网业务。

1.3 对服务的封装

这是一个延伸与传统互联网的优秀特性。基于Client/Server模式的服务完全可以将数据的内容与数据的表示,这有点类似所谓的MVC结构,强制性的

应用程序(这里是云程序)的输入、处理、输出分开。比如在hadoop的IO系统中,所有的结构化对象必须经过序列化转为字节流才能通过网络传输或者进行持久化存储。重要的是,hadoop序列化接口不同于普通的java中的Serializable,而是实现自己的Writable接口。这样做的目的是使应用程序独立于java程序,客户端程序可以用任何一种语言完成,前提是能够解读并封装Writable,而这种序列化接口是开源的。




二、影响平台无关性的因素:

2.1 云平台部件的部署

前面讲到了java 的伸缩性是hadoop系统对平台无关性的一种支持。一个幸运的事实是,web浏览器、PC、服务器甚至许多嵌入式系统都普遍对Linux和java给予了支持,这就意味着我们买来一台电脑便可以不加改变的加入到hadoop集群中去,事实上我们也是这么做的。然而,对于云计算的另一个潜在并将成为主力用户的小型感应芯片来说,支持hadoop平台成了一个困难的选择。

2.2 应用层协议缺乏相应的规范

从1983年云计算的概念问世到目前已经有近20年的时间了,云计算应用也慢慢成熟了,如Amazon EC2,Amazon S3,Windows Azure,包括国内的阿里云等。但所有的云应用都缺乏一种规范,比如同样提供存储服务,S3用户就不能使用Azure服务。或者说,同样的一份软件服务,比如PhotoShop软件,如果要想吸引所有的潜在用户,则必须在所有的云服务中进行备份,这是多么大的资源浪费啊!!!


考虑到未来的云计算——物联网时代,这样的浪费是更加不能容忍的。在物联网中,最重要的感应平台是各种各样的传感器。传感器向云端输出请求和数据,从云端接收处理后的数据。为了构架一个统一的应用环境(我们拥有构架类似互联网一样的大环境的野心)并且限于嵌入式微处理器的小内存,必须有一个统一的模式来规范云计算应用市场。 这样,在客户端只需要一个类似于浏览器一样的接收器,就能处理云平台发送过来的数据。


2.3 版本问题

对于一个包含成千上百台机器的集群来说,保证其运行平台版本一致是一件困难的事。而对集群中的平台进行升级则是一件更加困难的事情。

以hadoop平台举例。java语言一般是向下兼容却不保证向上兼容的。一般而言,开发者所使用的java版本是较新的,那么其开发的云程序不一定

能在建设了许多年的云平台上运行。

另一个需要考虑的问题是,不同于普通的电脑桌面程序或者网络程序,写在嵌入式系统上的程序是很难在线升级的,怎么保证应用程序的升级也是一

件值得考虑的事情。

2.4 云项目的测试

对于普通的云项目开发人员来说,拥有属于自己的云平台是一件困难的事。笔者虽然可以在一个包含10+主机的集群上开发软件,但是这个集群属于

一个小组公用的,并且很少开启。hadoop提供了一种伪分布模式,开发者可以在这个模式下在自己的电脑上开发软件,然而,不同的平台之间是存在差异的,依赖于

某些特定平台(就是你自己的电脑平台)的程序,可能在其他平台上存在bug,这样,对于云程序,必须在所有可能的平台上测试,这是平台无关性的一个关键因素。

猜你喜欢

转载自263796001-qq-com.iteye.com/blog/1474066