分布式计算
分布式计算是一门计算机科学,主要研究分布式系统。一个分布式系统包括若干通过网络互联的计算机。这些计算机互相配合以完成一个共同的目标(我们将这个共同的目标称为“项目”)。具体的过程是:将需要进行大量计算的项目数据分割成小块,由多台计算机分别计算,再上传运算结果后统一合并得出数据结论。在分布式系统上运行的计算机程序称为分布式计算程序;分布式编程就是编写上述程序的过程。
目前常见的分布式计算项目通常使用世界各地上千万志愿者计算机的闲置计算能力,通过互联网进行数据传输。有分析地外无线电信号,从而搜索地外的生命迹象的SETI@home项目,该项目数据基数很大,超过了千万位数,是目前世界上最大的分布式计算项目,已有一百六十余万台计算机加入了此项目(在中国大陆大约有1万4千位志愿者);同时也有分析计算蛋白质的内部结构和相关药物的Folding@home项目,该项目大约有十万余志愿者参加(在中国大陆大约有6000位志愿者)。这些项目很庞大,需要惊人的计算量,由一台电脑计算是不可能完成的。即使现在有了计算能力超强的超级电脑,但是一些科研机构的经费却又十分有限。
本站主要关注和讨论的就是志愿者们在参加项目的过程中遇到的问题、各个项目的动态及对我国分布式计算项目的开发。
引言
“分布式的(distributed )”这个词在诸如分布式系统(distributed system)、分布式编程(distributed programming)、分布式运算法则(distributed algorithm)等术语中原本指的是由多台个人计算机物理地分布在一定地理区域中而形成的的计算机网络。这些术语如今被赋予了更加宽泛的意义,甚至可以指代运行在同一台计算机上,并通过传递信息互相影响的几个进程。
由于分布式系统没有规范的定义,我们可以用一下特性来区别分布式系统:
- 有多个自主的计算实体(computational entities),并且各自拥有本地存储器。
- 计算实体间通过消息传递进行联系。
本文中,计算实体也会被写作“计算机(computers)”或“节点(nodes)”。 一个分布式系统应有一个共同目标,比如解决一个需要大量计算的问题。或者,每台计算机都有其使用者,这些使用者有着各自不同的需求,而分布式系统的目的就是合理调度分享的资源或给用户提供交流服务。
另外几个分布式系统的典型特性是:
- 系统必须容纳个体计算机返回的错误
- 系统的结构(网络拓扑结构、网络延迟、计算机编号等)是不能够预测的,系统可能包含有不同种的计算机和网络连接,并且会在分布式程序进行过程中出现变化。
- 每台计算机都只能受限制地观察到不完整的系统。有可能每台计算机都只知道受处理信息的一部分。
并行计算还是分布式计算?
术语“并存计算(concurrent computing)”,“并行计算(parallel computing)”和“分布式计算(distributed computing)”有许多共同点,且没有特别明确的区别。同一个系统可能同时被特指为“并行的(parallel)”和“分布式的(distributed)”;一个典型的分布式系统中的各处理器是以并行的形式运作的。并行计算也可能以分布式计算的一种密集的形式出现,而分布式计算也可能以并行计算的一种较松散的形式出现。不过,我们可利用下列标准粗略地将“并行系统”与“分布式系统”区分开:
- 并行计算中,所有的处理器共享内存。共享的内存可以让多个处理器彼此交换信息。
- 在分布式计算中,每个处理器都有其独享的内存(分布式内存)。数据交换通过处理器传递信息完成。
右边的示意图说明了分布式系统与并行系统的差异。图a是典型的分布式系统的图示;通常,系统被表示成一种用节点(顶点)代表计算机、直线代表计算机连接的图。图b描述的是同一个分布式系统的更加详细的信息:每台计算机都有各自的本地内存(memory),并且只通过节点间的可用通信连接交换数据。图c是一个各处理器都(processor)连接到同一个共享内存的并行系统。 相比而言,“并行算法”和“分布式算法”这两个术语在传统用法中的地位就复杂多了。他们并不十分符合上面提到的阐释;下文中的“理论基础”部分将对此进行详细讨论。不过一般来说,在多处理器共享内存的高效并行计算中使用并行算法,而用来协调大规模分布式系统则使用分布式算法。