在云端

来源:互联网 发布:java管线爆管分析 编辑:程序博客网 时间:2024/04/28 18:01

……………………

……………………

在云端遇见你的地方
在生命的转弯
你让我有天堂能想像
在云端你深邃的目光
从世界另一端
最神秘的磁场
唉呀呀唉唷梦一场

……………………

……………………

周华健的一首《在云端》,相信很多人都听过,今天的话题正好是跟“云”有关,只不过不是蓝天白云,而是隐藏在互联网背后的云-------云计算(Cloud Computing)

什么是云计算?下面我引用李开复的一段话:

“在云计算的模式中,用户所需的应用程序并不运行在用户的个人电脑、手机等终端设备上,而是运行在互联网上大规模的服务器集群中。用户所处理的数据也并不存储在本地,而是保存在互联网上的数据中心里。提供云计算服务的企业负责管理和维护这些数据中心的正常运转,保证足够强的计算能力和足够大的存储空间可供用户使用。而用户只需要在任何时间、任何地点,用任何可以连接至互联网的终端设备访问这些服务即可。

云计算在给我们诠释一种回归,计算机最初的发展阶段是单机时代,很多用户通过一个个终端来分享计算机资源,终端非常简单,无非是可供输入的键盘和可供显示的显示器。后来PC的出现及普及把计算任务转移到了个人电脑上,个人电脑的配置越来越高,功能越来越强大,C/S(客户端/服务器)编程模式应运而生,在这个编程模式里面,我们的原则是能在Client(客户)端做的尽量在客户端做,尽量不要增加服务器的额外负担。随手举几个C/S的例子:几乎每个人都在用的QQ,MSN等即时聊天工具,大部分的炒股软件等。但是这种模式有一个问题:因为客户端也要完成大量的计算任务,当客户端出现问题的时候,如何维护将成为一个很严峻的问题,因为大多数客户对计算机的了解并不多,而有可能分布在全球各地。维护成本的增加是这种编程模式淡出历史舞台的主要原因。后来人们越来越倾向于“瘦客户端“,目前最瘦的客户端莫过于浏览器了,于是B/S(浏览器/服务器)编程模式越来越受人青睐,因为这种模式可以让开发者把精力都集中在服务端的建设上。所有的维护工作都可以在家里完成,节约了成本。用户也乐意接受,因为不需要再象以前一样装各种客户端,装软件并不是每个客户都擅长的事情。但因为受制于浏览器的功能,用户体验方面B/S仍不能完全替代C/S,所以目前仍然有很多应用是用C/S开发的,但这种变革是一种必然的趋势。

云计算的出现给这种变革以巨大的推动力,因为它将使得这种B/S的应用更符合客户的利益,数据的存储和计算都是由专业服务商来提供的,如果我要建设一套公司内部的管理系统,只需要注册一个帐户就可以了,然后按月或者按年向服务商缴纳一定的使用费用即可。不必再自己购买服务器,购买专门的软件,不必再聘用专门的维护人员,因为有更专业的服务商在背后为客户服务。同时这也给我们这些开发者提了个醒:为什么有些技术大行其道?答案很简单,因为它更加符合客户的利益。

在这种趋势下,未来我们需要的硬件应该越来越简单,只需要它能够支撑起一个功能足够强大的浏览器的运行就可以,我们的每个终端,PC、手机等电子设备作为云端接入到互联网的云计算网络就可以享受到各种体验。甚至是我们家里的每一样电器都可以作为云端,我跟我的搭档曾经畅想过这样一番场景:快下班了,你打开手机,利用服务商提供的服务打开了自家的电饭锅,当你乘车到家时,饭已经做好了,我们可以坐下来享受美食。这并不是幻想,在不久的将来这将是很现实的事情。

以上写的是相对遥远的事情,下面来看看我们身边发生了什么?

SaaS(Software as a Service,软件即服务):初次接触SaaS是在今年的十一长假去看望舅舅时,舅舅做了一辈子的会计,他拿出了一本杂志,让我按照杂志上所说的网址上去帮他申请一个账号,并让我教他该怎么用。其实那就是金蝶的一个SaaS产品,只需要在上面申请一个账号,就可以用里面的财务管理功能,数据的存储等等都不用管。只需要每年交上几百元的服务费即可。这件事给我留下了很深的印象,因为的使用成本很低,必定会吸引很多客户。那这些SaaS厂商如何提供多样化的服务呢?因为客户所需要的可不都是财富管理功能。SOA(service-oriented architecture,面向服务架构)很好的解决了这个问题。先来了解一下什么是SOA

面向服务的体系结构(service-oriented architectureSOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种这样的系统中的服务可以以一种统一和通用的方式进行交互。

上面的解释过于专业,下面我来将其通俗化:为了满足客户的不同要求,我们写很多很多功能模块,每个模块只完成一个特定的任务,但这个模块是开放的,也就是可以被外部调用的。通过使用接口定义语言定义的接口进行通信。这让我想起了写COM程序时用IDL语言定义接口的情形。这些模块间可以通过这些接口进行自由组合,如果客户有多种需求,可以通过组合不同的模块来满足客户的需求。这似乎又是一个回归,让我想起了Unix下的kissKeep it Simple and Stupid,我们在Linux下写程序的时候,可以在vi/vim里面运行Shell命令,可以在vi/vim里利用gdb调试程序。

在我们的工作中也了解到,客户的机器上往往运行着多种不同的应用,而且这些应用都是不同厂商用不同的语言实现的,如何实现他们之间的数据共享?如果每一个系统都是独立的,那么在客户的多个应用里面肯定会存在不同程度的重复,操作起来更加复杂,结果是客户花了更多的钱,工作负担依然很大,因为他要熟悉多种应用。假如每个应用都提供对外通讯接口,那么成本就能够降低很多。

SaaS不一定会成功,但这种模式代表着未来。

下面来看看我们的厂商:

微软:微软已经宣称在其下一代操作系统和.NET框架里集成了云计算(SD2.0大会)。

谷歌:目前我最感兴趣的公司,看看谷歌的产品,或许我们能了解些什么:

            Android:嵌入式操作系统

            Chrome:浏览器

            Docs  在线文档

            Map  地图

      ………………

    谷歌还有很多互联网应用,并且它们都是开源的,而且几乎都是免费的。这里我想对Chrome多说两句,当我们在Chrome里同时打开多个标签时会发现,Chrome采用的是多进程的架构,这就使得它更加安全,更加稳定。据说ChromeJavasrcipt引擎的性能也并其它浏览器高出几十倍,这些将保证Chrome将会给用户以更佳的体验。

我想起了以前看过的一段新闻,微软嘲笑谷歌有很多产品,但是没有几个能赢利的。其实不然,Android会用户在终端的选择上有了更大的余地,各种在线应用把更多用户的注意力吸引到了互联网上,谷歌只需要在搜索上赢利就足够了。

      文章中若有偏颇之处,请指正!