从协作到云:云计算简史
云计算的前身是客户机/服务器计算和对等的分布式计算。他们所关心的共同问题都是集中的存储如何促进协作和多台电脑如何一起工作从而提高计算能力。
客户机/服务器计算:集中式的应用和存储
在计算的初期阶段(大约1980年之前),一切都按照客户机/服务器模式运转。所有的应用软件,所有的数据,所有的控制都位于大型的电脑主机上,这些电脑主机通常被称为服务器。如果用户想访问特定的数据或运行特定的程序,他必须连接到主机上,获得适当的权限,然后才能执行他的业务。从根本上说,用户是从服务器“租用”程序或数据。
用户通过计算机终端(有时也称为工作站或客户端)连接到服务器。这台计算机有时也被称为哑终端,因为它并不具有大量的(如果有的话!)内存,存储空间或处理能力。它仅仅是一个用来把用户连接到主机,使得用户能够使用主机的装置。
用户只有被授予相应的权限之后才能访问主机。通常信息技术(IT)人员没有随意分发访问权限的习惯。即便是在主机上,处理能力也是非常有限的,而IT人员则是这些能力的保护者。访问不是即时的,两个用户也不能在同一时间访问相同的数据。
除此之外,无论IT人员提供给他们什么东西,用户都必须接受而不能有任何变化。想要定制一份只显示部分正常信息的报告吗?办不到。想要创建一份使用新数据的新报告吗?同样办不到。虽然IT人员可以做到,但根据他们的日程安排,这可能需要等待数周的时间。
事实是,当多人共用一台计算机,即使该计算机是一个巨大的主机,你也不得不等待你的次序。需要重新生成财务报告吗?没问题——如果你不介意等到下午或明天早晨。在客户机/服务器环境中,即时访问并非总是可行的,人们的需求很少能够马上得到满足。
因此,尽管客户机/服务器模式也提供了类似的集中存储,但它不是云计算,因为它不是以用户为中心的。使用客户机/服务器计算,所有的控制都位于主机上,受单一主机的管理。这不是一个有利于用户的环境。
对等计算:资源共享
如你所想,使用客户机/服务器系统是一种“紧急与等待”的体验。客户机/服务器系统的服务器部分会产生一个巨大的瓶颈。所有计算机之间的通信不得不首先通过服务器,然而这种做法效率可能是低下的。
无须经由服务器,将一台计算机连接到另一台计算机,这一显而易见的需求导致了对等(P2P)计算的发展。P2P计算定义了这样一种网络结构,其中的每台电脑都有相等的能力和责任。这同传统的客户机/服务器的网络架构形成了鲜明的对比,在后一种架构中,一台或多台计算机专门用来为其他计算机提供服务。(这种关系有时也被称为主/从关系,中央服务器是“主”,而客户计算机是“从”。)
P2P是一个平等的概念。在P2P环境中,每台计算机既是客户机又是服务器,没有主从之分。P2P把网络上的所有计算机都看作是对等的,因而使得直接的资源和服务交换成为可能。无需中央服务器的存在,因为任何一台电脑在需要的时候都能充当这一角色。
P2P也是一个分散的概念。控制是分散的,所有电脑平等运行。内容也分散在不同的电脑上。没有集中的服务器用来承载可用的资源和服务。
也许最著名的P2P实现就是因特网。今天,许多用户都已经忘记(或根本未曾知道),根据最早的阿帕网(ARPAnet)的想法,因特网最初被设计为一个对等的系统,用来共享分布在美国各地的计算资源。不同的阿帕网站点——总数并不是很多——不是作为客户端和服务器,而是作为对等方连接在一起。
早期因特网的P2P特性可以通过新闻组(Usenet)网络来做最好的说明。新闻组,创建于1979年,是一个由计算机构成的网络(通过因特网访问),每台计算机都提供整个网络的内容。信息在对等的计算机之间进行传播,无论用户连接到哪一台新闻组服务器上,都可以获得张贴到每个单独的服务器上的所有(或几乎所有)的信息。虽然用户到新闻组服务器的连接具有传统的客户机/服务器特性,但新闻组服务器之间的关系肯定是P2P的,这就是今日云计算的雏形。
当然,并非因特网的每一部分都具有P2P特性。随着万维网的发展,计算模式由P2P重新回到客户机/服务器模式。在web上,每个网站都由一组计算机提供服务,网站的访问者使用客户端软件(web浏览器)来访问它。几乎所有的内容都是集中的,所有的控制也是集中的,在此过程中,客户没有任何自主权或控制能力。
分布式计算:提供更多的计算能力
P2P模式的一个最重要的方面就是分布式计算,某个网络甚至整个因特网上的空闲个人电脑被组织起来,用来为大规模的、处理器密集型的项目提供计算能力。这是一个简单的概念,所有的一切都围绕着计算能力在多台计算机之间的共享。
一台每天运行24小时,每周运行7天的个人电脑能产生巨大的计算能力。然而,大多数人并不会以24/7的方式使用自己的计算机,因而计算机资源的很大一部分都未得到有效利用。分布式计算能够使用这些资源。
当一台计算机用于分布式计算项目时,为了在电脑空闲期间执行各种处理任务,需要在机器上安装软件。空闲时间处理的结果定期上传到分布式计算网络中,与来自项目中其他计算机的类似结果进行合并。只要有足够的计算机参与,上述做法的效果足以比拟更大的主机和超级计算机的处理能力——对于某些非常庞大和复杂的计算项目而言,这是必需的。
例如,基因研究需要大量的计算能力。采用传统的手段,可能需要数年时间才能解决基本的数学问题。通过将数千(或百万)台个人电脑连接在一起,将更多的计算能力用于同样的问题,很快就能得到结果。
分布式计算的历史可以追溯到1973年,当时施乐公司帕洛阿尔托研究中心(Xerox PARC)将实验室里的多台计算机连接到一起并开发了蠕虫软件来漫游网络,寻找闲置的资源。一个更为实用的分布式计算应用出现在1988年,当时DEC(数字设备公司)系统研究中心的研究人员开发了一款软件,用来向实验室内的工作站分发大数分解任务。到了1990年,一个约100个用户的小组利用这一软件,完成了一个100位数的因数分解。到1995年,该应用已扩展到web,用于130位数的因数分解。
分布式计算与因特网相结合的时间并没有多久。第一个主要以因特网为基础的分布式计算项目是发起于1997年的distributed.net,它利用数千台个人计算机来破解密码。更大型的项目是发起于1999年5月的搜寻地外文明的SETI@home计划,它连接了数百万台个人计算机,用来搜寻太空智能生命。
许多分布式计算项目是在大型企业内部进行的,利用传统的网络连接形成分布式计算网络。其他更大的项目利用日常因特网用户的计算机,计算通常离线进行,然后通过传统的因特网连接每天上传一次。
协同计算:作为一个群组工作
从早期的客户机/服务器计算再到P2P的发展,始终存在这样的需求——让多个用户一起从事同一个基于计算机的项目。这种类型的协同计算就是云计算背后的驱动力,它已经存在超过10年了。
早期的群组协作综合利用几种不同的P2P技术,目的是让多个用户能够实时的、在线合作完成小组项目。
要在项目上合作,用户必须首先能够相互交谈。在今天,这指的是即时消息系统,除用于文本交流外,通常还具有可选的音频/电话和视频能力,用来进行基于语音和图像的交流。大多数协作系统为全功能的多用户视频会议提供了一系列的音频/视频选项,。
此外,用户必须能够共享文件并让多个用户同时在相同的文档上开展工作。白板也很常见,在企业和教育环境中更是如此。
注意
白板提供了一个对所有群组成员可见的虚拟写字板,允许一个或多个用户在上面“画画”。
早期的群组协作系统既有相对简单的(如Lotus Notes和微软的NetMeeting),也有极其复杂的(如Groove Networks系统中的积木结构)。多数系统是针对大型企业的,只能在公司专用的网络上运行。