SD2C之网格与云计算
这次的SD2C大会中,云计算无疑是最风光的技术话题(没有之一)。相比之下,曾经风光的网格技术就只有Oracle还在提了。
回来以后在BT妓术群及FB饭局上跟令狐他们讨论过这个话题,令狐仍然对网格技术充满期望——《网格网络的设想》。
如果单纯从技术角度说,云计算从某种意义上的确是退步了,从网格的平等分布式应用重新变成了集中式集群应用。不过我后来进一步思考以后发现二者的根本区别并不是在技术上——至少不是主要在技术上,而是商业模式上。
网格计算更倾向于在技术上充分利用各分布机器的空闲计算能力。而云计算则除了技术上使用集中的服务器计算以外,最主要的是在此基础上提供的服务——包括硬件和基础平台支持服务以及最重要的应用服务。即所谓的Software as a Service(SaaS)。
两 相对比就可以发现:网格计算更像是一种技术理想主义的产物,前景很美妙,但是实现难度巨大却又没有什么显而易见的商业模式。相对的云计算虽然需要相当大的 硬件软件和人力资源投入,但是它的商业模式却很清晰,那就是以这些投入为成本构造的资源可以出租给需要的用户,以此盈利。我想这就是为什么最近一段时间以 来云计算能够迅速地盖过网格计算。而Oracle之所以还在坚持网格计算,无非是因为它是一个纯软件公司,网格计算可以让它的软件摆脱硬件条件的束缚—— 至少是在一定程度上。
所以从本质上说,二者只是表面的相似而具有本质的不同。
说到云计算,这次的大会上被引用得最多的实例就是GMAIL——这是云计算应用最典型的例子。包括很多人对于云计算安全性的质疑,都可以用这个例子加以解答。
至于网格的未来,令狐的设想固然很美妙,但是就目前来说存在着巨大的现实困难。就目前实现的例子来说:Internet和P2P应用都是基于简单的协议。
Internet
协议就不说了,做的事情简单得不能再简单,就是把一个数据包从一个节点传到另一个节点,如果不需要分布处理的话,这就是一个完全没有复杂性的应用。P2P
应用也很简单,只是简单的数据传输,而且它的存储也很简单——每个节点都尽可能存储它需要的所有数据(也就是它要下载的文件)。但是除此之外的绝大部分应
用都无法简化成类似这样的简单协议。
比如数据库,即使是Oracle的网格也不可能把数据库的内容全部分布到Internet上任何一台可用的计算机上去——因为你不知道它是否安全,是否可靠。
目前最接近理想的网格应该就是自由之网了——不但有分布访问,还有分布存储,但仍然是针对特定应用,难以作普遍化的推广。
令狐虽然已经指出来安全、效率、公平三个问题,但这显然还只是困难的一小部分——或者说从这几朵小乌云将会引出一大堆近乎不可能解决的麻烦事。
先 从公平来说,令狐在回复里补充说明了一下TR指出的那个所谓“我(pMq)不喜欢的特权节点”的问题,这是我们在群里讨论时我指出来的,如果网格中存在特 权节点的话,那么拥有特权节点者即拥有网格,也就破坏了公平性——为什么多数人要为拥有特权节点的少数人贡献计算量呢?即便这些计算量是“空闲”的。令狐 这个补充说明指出了这个不是特权节点,而是应用提供节点,类似于云计算的入口。或者说这是应用提供者,的确不能算是有什么特权,但除非这种应用提供者是免 费为大家服务,否则多数人为少数人服务的问题还是存在。
所以我更愿意用一个小的桌面应用来假设——这个时候入口节点就是本机,然后通过网络去利用全网格的计算量了存储力。这个时候就需要这个本机来做任务的分解、安全性的处理(加密解密)、数据的分发和回收……可见为了利用分布的计算量,增加了很多不必要的计算。
于是来到效率这个问题,增加的这些计算量很可能会远远大于从分布式计算中得到的好处——这几乎是必然的,除非把这些工作也分布下去,但是这样一来安全性又没有保障了。
所以我说这几朵小乌云的后面会很麻烦,因为它们之间是相互制约的——至少对于很多应用是如此,只是对特定的应用有优势。
基于这个理由,我的观点更倾向于——未来的分布式应用会更多地采用云计算的模式,而网格还只能限定于特定应用。
其 实很早之前我就设想过网格很适用于像网游这样的应用,虽然整个网游系统可能很大,玩家可能很多,但是每个玩家面对的数据(比如地图)只是一小部分,需要交 互的其它玩家也只是少数,所以实际上很多的工作都可以分布到客户端去处理,而服务端只需要处理涉及运营商利益的部分,比如装备——甚至通过足够安全的设计 (用客户端交叉验证取代服务器验证),这些数据及其处理也可以放到客户端,服务器只作为这部分核心数据的备份和最终校验。这样一来游戏运营商的服务器和带 宽成本就可以大幅下降,对于节能环保也是很有好处的,哈哈哈。
与此相关的还有一个想法源于蝈蝈《多缓存并存》, 在这种网游网格中也可以考虑——每个玩家之间视彼此相关性和距离相互缓存此的数据,这样一则可以减少彼此的通讯数据,在玩家变换交互时交换数据的速度也可 以加快,相当于一种多级缓存(只要每个玩家都在本地缓存一级相关玩家数据,那么就可以在一级相关玩家客户端中获得大部分二级玩家数据,真的到了需要全局数 据的时候再找服务器要)。
当然这只是一个设想,要实现还是有很多困难的。