1.2 分布式计算及其原理
前文提到分布式计算就是将计算任务分摊到大量的计算节点上,一起完成海量的计算任务。
而分布式计算的原理和并行计算类似,就是将一个复杂庞大的计算任务适当划分为一个一个小任务,并让任务并行执行,只不过分布式计算会将这些任务分配到不同的计算节点上,每个计算节点只需要完成自己的计算任务即可,可以有效分担海量的计算任务。而每个计算节点也可以并行处理自身的任务,更加充分利用机器的CPU资源。最后我们想方设法将每个节点计算结果汇总,得到最后的计算结果。
很多时候,划分计算任务以支持分布式计算看起来较为困难,但人们逐渐发现确实也是可行的。而且随着计算任务量增加与计算节点增加,这种划分体现出来的价值会越来越大。分布式计算一般分为以下几步。
1)设计分布式计算模型:首先我们要规定分布式系统的计算模型。计算模型决定了系统中各个组件应该如何运行,组件之间应该如何进行消息通信,组件和节点应该如何管理等。
2)分布式任务分配:分布式算法不同于普通算法。普通算法通常是按部就班,一步接着一步完成任务。而分布式计算中计算任务是分摊到各个节点上的。该算法着重解决的是能否分配任务,或如何分配任务的问题。
3)编写并执行分布式程序:使用特定的分布式计算框架与计算模型,将分布式算法转化为实现,并尽量保证整个集群的高效运行。其中有一些难点。
① 计算任务的划分。
分布式计算的特点就是多个节点同时运算,因此如何将复杂算法优化分解成适用于每个节点计算的小任务,并回收节点的计算结果就成了问题。尤其是并行计算的最大特点是希望节点之间的计算互不相干,这样可以保证各节点以最快速度完成计算,一旦出现节点之间的等待,往往就会拖慢整个系统的速度。
② 多节点之间的通信方式。
另一个难点是节点之间如何高效通信。虽然在划分计算任务时,计算任务最好确保互不相干,这样每个节点可以各自为政。但大多数时候节点之间还是需要互相通信,比如获取对方的计算结果等。一般有两种解决方案:一种是利用消息队列,将节点之间的依赖变成节点之间的消息传递;第二种是利用分布式存储系统,我们可以将节点的执行结果暂时存放在数据库中,其他节点等待或从数据库中获取数据。无论哪种方式只要符合实际需求都是可行的。