云(Cloud)是的象征,所以云计算(Cloud Computing)最广义的解释就是「网络运算」。这恐怕是目前大家对于云计算认知的最大公约数,在这之外,大家对于云计算的理解和定义,都不太一样。这篇文章试图用最浅显的方式,向大家说明我所知道的云计算。
网络是由许多所组成,云计算的基础是大量的服务器。如果只用一部超级当服务器,一样可以提供相当大的运算威力,这样可以算是云吗?恐怕不行。因为云计算强调的是「许多」服务器联合起来,提供强大的运算能力。只有一部超级计算机或少数几部计算机,恐怕太薄弱,无法形成云,充其量只能称之为「水蒸气」。
良好的云计算架构方式,必须具备规模弹性、容错、平衡负载。当运算规模增加,云需要增加弹性,只要加上新的节点就可以,这样的能力称为?嚼┏洌╤orizontal scalability)。数据重复(redundancy)存放在不同位置,确保数据安全。让服务器之间的负载尽量平衡,免得某些服务器太忙,某些却太悠闲。
既然云计算是将许多计算机联合起来提供运算能力,那么就会用到网格运算技术(grid computing)。以往的网格运算似乎是供专家使用居多,着重在需要复杂运算的「单一任务」,例如基因定序、核爆模拟。但云计算则比较偏大众应用,相当高比例的大众应用其实不需要进行复杂的运算,但是由于「大众」相当多,累积起来的运算需求也相当可观。所以在应用上,云计算可以被视为平民化的网格运算。
除了上述的差别,云计算和网格运算的差别还有两点。第一,为了方便管理,并充分运用服务器的效能,云计算也经常会使用到「虚拟化」技术。第二,以往的网格运算通常只使用专属的应用协议和数据格式,但云计算则受到Web应用潮流的影响很深。
云计算的愿景是以Web为前端,资料全都放在后端,不放在使用者手上。如此一来使用者可以不用担心不同装置上数据同步化的问题,也能够随时取用数据(如果网络没断线的话)。既然数据都放在云,运算都在云进行也就理所当然。因为这样的效率最好,可以减少资料在使用者和云之间的传输。
至于Web前端,和Adobe等公司会希望你使用他们各自的RIA(Rich Internet Application)技术,但、Google、Apple等没有RIA技术的厂商,则会希望你使用Web浏览器(JavaScript/CSS/HTML),以免被(其它)厂商绑死。
除了Web浏览器和RIA之外,许多标准的应用也会随着云计算的兴起,开始支持从云开启文件,或写入文件到云的技术,这些读写的动作会透过标准的HTTP协议、FTP协议或WebDAV来达成。说不定以后在「File」选单中,除了「Save」、「Save As」之外,还会多出一个「Save To Cloud」。
但是云毕竟是在远方,数据的存取速度自然远比不上自己计算机上的硬盘。所以除非客户端联机到云的速度够快,否则这会成为推广云计算的障碍。
在云的厂商会将服务列在网页上,让你选择要执行的程序。这些云上的程序都可以设定参数,以记录你的名称、喜好,以提供更好的服务。甚至你过去的一举一动,也会被记录下来,你的隐私数据成为厂商的资产。如果公司利用云处理ERP/CRM等资料,那么公司的运作机密以及客户数据也都会被云的厂商知道。是的,云厂商都会强调他们重视顾客的权益与隐私,但这就看你信不信了。
除了使用厂商原本就提供的云程序,利用参数设定来符合自己需求之外,你也可以上传程序到云。Google App Engine允许你将程序上传到云,在云上执行。使用Google App Engine,可以省去你建置与管理服务器的困扰。不过,上传程序一样有暴露机密的可能,如果你是一家搜寻引擎的公司,你发明了比Google更准确的搜寻算法,你敢把这样的服务放到Google的云上,只是为了省去「建置与管理服务器的困扰」吗?
厂商提供这类的服务,都会限定所使用的语言和框架。Google目前只支持Python和相关的Web框架,以后才会支持其它语言和框架。
Python是最适合云的语言吗?恐怕不是,但应该已经符合大众的需求。你的Python程序会被Google复制到不同的服务器上各自执行,这样的程序无法协同完成一件复杂的任务(例如基因定序)。
比较适合云的语言其实是函数式语言,例如Erlang。而微软预计会以F#当作云计算的语言。
综观目前的状况,云计算正在一团云雾之中,充满着不确定因素。我认为,先别太快妄想漫步在云,太早踏入,小心你一脚踩空。
阅读(690) | 评论(0) | 转发(0) |