Sunday, December 7, 2008

分布式计算框架的总结

目前IT界有几个非常有名的词,网格计算、云计算,分布式数据处理等。

不过这些词我也不是非常理解它们的内涵,下文仅从应用的角度,来谈论一些计算框架的特点和优劣。

Nebula: 这个计算框架是在开源项目中做得最为出色的一个,可以参见论文:
NEBULA: A P2P Based Cooperative Spatial Database Prototype Bin Chen etc
简单地说,它就是一个用于分布式的空间信息处理的框架,可以进行协同的处理

MapReduce:
MR系统是一个非常好玩的东西,它有几层含义,首先,它是一个数学理论,用于高效地在不同的计算节点间进行任务的分配。其次,它也是一个计算模型,用于实现不同计算节点间任务分配的具体调度算法。最后,它也是一个实实在在地计算框架,并且有相关的参考实现(Google and Yahoo!),并且真正在我们实际的商业搜索引擎中得到大规模地应用。

在介绍它的基本思想之前,我们首先可以讨论一些并行计算的基本要求,也就是说,如果我们的一个任务是可以拆分成若干个子任务分别放在不同的CPU上计算的,那么这个任务应该满足什么样的条件呢?简单地讲,这个任务应该是需要满足这样的基本条件,就是说,它的指令序列,至少在一定程度上,是前向无关的,即在后面执行的代码和前面已经执行的代码是两个独立的事件。一个非常经典的例子就是矩阵的乘法运算。在这样的前提下,我们就可以对任务进行比较好地分解。

MR的基本思想就是,将所有的计算任务看作是由两个基本的子任务操作序列所组成,一个就是一个映射(Map),按某种规则生成一对的二值对,然后再对其加以排序。其中生成二值对的部分和排序的部分都可以由系统自动地在各个计算节点上根据它们的负载进行分配,从而实现分布式地计算。对于用户而言,他只要关心问题中涉及到具体领域的算法即可了。

No comments: