2.1 分布式并行计算模式
1)Master-Slave结构
实现方式比如SocketServer,多线程。有Master负责分配任务,汇总结果,但需要接收slave的注册,感知slave的状态,是整个框架的核心。
2)“包工头-职介所-手工仓库-工人“模式
工人到职介所注册,职介所和工人之间保持联系,保证职介所能够掌握工人的状态。
包工头需要分配工作时,需要到职介所获得可用工人列表,然后调用分配任务方法。
工人得到任务后,需要去手工仓库去获得资源,doTask,将结果写会到手工仓库。
2.1)基于消息中枢的计算模式
包工头和工人的交互也可以通过MQ方式实现。
包工头发布任务到MQ中, 工人监听消息,直接从MQ中获得基于任务。
优点是包工头和工人可以互相不见,可以使用在复杂网络结构中。
缺点是所有任务通过消息中枢实现异步传递,容易形成瓶颈,比如单点故障,性能不高等。
另外,包工头无法控制工人,工人之间传递数据等缺点。只能完成最简单的基本计算。
2.2)基于网状直接交互的计算模式
fourinone默认和推荐的包工头和工人之间的工作模式。
包工头并发调用工人的doTask
每个工人计算过程中,可以和其他工人交互,合并结果后返给包工头
2.3)并行结合串行的模式
每个包工头并行分配给工作到多个工人,但是包工头之间串行分配作业。
2.4)包工头内部批量多阶段处理模式
2.3节包工头的任务分工过于粗粒度(比如用于制造电脑的CPU级别),
Fourinone框架提供包工头内部的批量处理,有多个工人完成任务,但是由最慢的工人完成后,才统一返回结果。
通过包工头的链式处理和内部的批量处理,可以进行粗粒度和细粒度的设计并行计算的环节和阶段划分。
2.5)计算集群模式和兼容遗留计算系统
计算集群模式:工头分任务给工人,工人的doTask内部新增其他计算单元的工头类,管理该工头的生命周期,
并且等待该工头完成并行计算后,获得结果返回给最上面的工头进行汇总。
兼容遗留计算系统:可以将某一个既有的系统,作为一个子包工头纳入到集群中。
2.6)工人计算的服务化模式
服务是SOA架构中最核心的单元,所有的SOA都是服务的组成和上层运用。
服务可以粗略地理解成为一个监听程序,根据业务的输入输出格式提供服务。
Fourinone默认的情况下,一个工人只能对一个工头提供服务,但是可以通过配置文件修改。
而且由于多个工人可以提供某一类服务,可以使用负载均衡去访问他们。
可以理解为 包工头是客户端,doTask是服务调用。可以异步调用轮询结果,也可以同步调用doTaskBatch
2.2 跟Hadoop的区别
Hadoop不是为了追求并行计算的框架而设计,而是一个分布式文件系统,提供文件数据存储和查询,
它的Map/Reduce更倾向于提供并行计算方式进行文件数据的查询。
而Forinone则是为了提供快捷和灵活的计算方式去服务更多的计算场景。
2.3 关于分布式的一些概念和产品
1)概念
1.1)离线计算:分布式计算的一种应用方式,Hadoop的大部分都是离线计算,数据存储到分布式系统中,
在离线情况下进行分析,比如日志分析,很多数据挖掘算法。
1.2)实时计算:分布式计算的一种应用方式,和离线计算相对,它的数据通常是增量式的,少量的,来了
1.3) 迭代计算:需要考虑阶段,上一阶段的结果作为下一阶段的条件,在数据挖掘聚类算法,机器学习算法等。
通常需要大量训练,逐渐靠近精度结果。
2) 产品
2.1)Storm
Twitter公司的用于实施分析的软件,是集成性质的软件产品,核心的消息通讯和分布式协调都适用开源软件ZooKeeper和JZMQ(ZeroMQ)。
增量数据通过消息分发,多个接收者并行接受处理这些消息。
Fourinone完全实现了Storm的机制,支持消息中枢的方式。
2.2)Spark
加州伯克利大学学生的作品,基于内存的用于迭代计算的框架。它尽可能用内存去做迭代计算,使用mesos管理机器资源分配。
和Hadoop基于分布式文件IO操作方式是不同的。
Fourinone使用包工头的多环节链式处理和包工头内部多阶段处理的粗细粒度方式支持迭代计算,提供了单机缓存和多机分布式缓存。
2.3) MPI
MPI(Message Passing Interface)消息传递并行程序设计的标准之一。目前版本MPI-2,目前实现版本MPICH2和OPENMPI。
定义了进程间通讯接口,如mpi_send和mpi_rec,更接近开发工具包,和Fourinone比较类似。
但是它没有多环节处理模式,没有协调者角色,开发难度较大。
2.4) BSP
Apache发布的Hama的并行软件中引出的BSP(Bulk Synchronous Parallel)思想。
由并行进程,消息通讯层,栅栏同步层组成,划分一系列的superstep。
相比于MPI,更侧重解决通讯密集型计算。
提出栅栏设计,划分阶段和环节,用于迭代模型。
基于消息的进程通讯交互,用发布接受消息代替点对点通讯。
2.5)DAG
微软的分布式计算平台Dryad引出了DAG(Directed Acycline Graph)。
DAG构成了任务并行流的概念,任务之间有先后顺序,并且每一个任务都是多台计算机并行计算。
和Fourinone中的计算集群模式和兼容遗留计算系统的模式非常类似。