原文地址:http://www.gigaspaces.com/wiki/display/SBP/Master-Worker+Pattern
概要:在GigaSpaces XAP平台下实现Master-Worker模式
概述
Master-Worker模式(有些时候也称作Master-Slave 或者 Map-Reduce模式)是用来并行处理。它是依照一个简单的方法,允许应用通过跨多个机器模拟处理程序,或者通过一个Master和多个Worker进行处理。
在GigaSpaces XAP平台,你可以通过多种方法实现Master-Worker模式:
- Task Executors :当应用场景为处理活动是与数据并行的时候,这个方法是最好的。(当任务被执行的时候,数据被存储在形同的空间)。
- Polling Containers :在这种情况下,处理活动是在不同的机器或者是JVM里面运行。当处理活动会很消耗CPU,并且处理时间较长时,这个方法是合适的。当处理所需要的实际数据没有被存储在相同的空间,或者从空间搜索所需数据的时间是远比完成处理的时间要短的时候,这个方法也是适用的。
在GigaSpaces XAP平台下,用Polling Containers的方法实现Master-Worker
Polling Containers的方法采取了经典的JavaSpace write/take操作,来实现并行处理。这个是允许一个Master客户应用生成一个Job,也即一套请求对象,将它们写入到空间,并且立即在这些对象上采取一个take操作。
请求对象一般是有一个Execute方法的,这个方法包括真正处理业务逻辑的流程。那些Wokers,通过一个Polling Containers来实现,在请求对象上持续进行take操作。一旦一个请求对象被处理完,他的execute方法会被调用,并且一个结果对象会被写回到一个空间。Master应用会消费这些返回的结果对象。当这些数量的结果对象,为了与相关job匹配对象数量的请求对象而被master所消费,那么这些job的执行就完成了。
当有一个空间(又或者没有备份)被Master和Worker所共用时,你可以将他们设计成blocking的模式(take操作的timeout是大于0)。这也意味着,当有一个对应的请求被写入到空间时,正在运行中的一个worker将会立即去消费它。
当运行多个Workers的时候,在人为的干预下,可以对所有的workers进行负载均衡。当有大量的任务时,你可能需要运行一个被划分的空间,允许这个空间层来存储大量的请求对象(这个时候,空间中总会存有少量结果对象),并且用来复制大量的Wokers。这个当然可以让你的系统进行扩展,并且空间层不会成为你的瓶颈。
在一个集群分区的模式下使用这些空间,不给请求对象的routing域赋一个值,你是不可以在blocking的模式下运行这些workers。Designated Workers approach 允许你在没有对空间分区的情况下,在blocking模式下运行workers。
接下来的各部分,包括代码样例和配置,将会说明在Polling Containers下,使用Random Workers和Designated Workers approach 实现Master-Woker。