[Beowulf] Newbie questions on cluster technology to use

Kirill Lapshin kir at lapshin.net
Wed Jul 25 16:58:17 PDT 2007

Hi all,

This is my first post, please accept my apologies if questions are too 
simple. I would appreciate pointers to documentation, writeups, howtos 
etc. I did some research before posting here, but got lost in sheer 
amount of information and competing technologies available.

We are planning to setup a cluster at my work place to handle some 
computation heavy jobs we have and the main task at the moment is to 
choose the right technology.

First of all, let me try to describe the task we have at hand.

1. There are a lot of relatively short jobs submitted by users. There 
are also much longer jobs submitted automatically at a known schedule.

2. Even though jobs are short (take minutes to complete on single 
machine) it is still important to parallelize each job to run them even 
faster (order of tens of seconds). That's financial industry we are 
talking about and time is money.

3. Jobs are quite easily parallelizable, probably embarrassingly so. 
Simple master/slave pattern naturally applies here. We already have 
parallel implementation running on a single host utilizing multiple 
processors via threads. It would be nice to be able to do it over many 
machines as well.

4. Jobs have to be scheduled properly, meaning that some users should 
have higher priority than others and especially than automated long 
running jobs, if user submits too many jobs his priority decreases, etc.

5. Implementation have to be fault tolerant, transparently surviving 
individual machine failures. Transparently for users that is, it is Ok 
to program tasks in a special way to get fault tolerance.

6. It would be nice to be able to submit "backup" tasks once job nears 
completion just in case some nodes in cluster are running slow. E.g. if 
job is split in 1000 tasks, runs on 16 node cluster and it is almost 
done, there are just 4 tasks to finish the job and there are a lot of 
idling nodes on cluster, scheduler could submit each of outstanding task 
to two machines and pick up results from whichever one completes first. 
If cluster is heterogeneous, or one node just runs slower it could 
speedup job completion considerably. At least that's what I've read in 
Google's mapreduce paper.

7. Some cluster health monitoring is needed. Does not have to be 
sophisticated, but at least we should be able to learn easily that some 
host has died and needs repairment. Statistics are nice to have as well 
to be able to adjust user priorities, make decisions on buying new 
hardware etc.

8. The business is somewhat Windows centric, though I would try to push 
Linux as a platform. It is doable, provided benefits are good. Linux 
port of the program is not a problem.

Potential solutions I see:

1. TIBCO distributed queue. In short it is a proprietary solution that 
more or less is a fault tolerant load balancing. The downside is absence 
of any scheduler (works as FIFO) and the fact that it is proprietary. We 
would much rather use open source technologies. See below for a bit of 
info on TIBCO.

2. MPI with some scheduler (Condor?). From what I read looks like fault 
tolerance is not easy to achieve in MPI world, and even if it is 
possible, then failure on a master node will render whole cluster 
unusable. I could be wrong on this, and I hope I am.

3. Torque? Grid Engine? Globus? Something else?

What are your suggestions? We need to decide on technology and try to 
implement it, gaining more knowledge in the process and hopefully making 
more informed decision in version 2 of our cluster. Any input would be 
greatly appreciated.

Some details on TIBCO. Tibco at heart is an enterprise messaging system, 
which propagates information via broadcasts on the same subnet and can 
route it from subnet to subnet via special daemon. It was mainly 
designed to integrate various systems in enterprise via common pipe 
where each system connects for data exchange, instead of building many 
point-to-point connections between individual systems. On top of this 
messaging technology they developed distributed queue, which works like 
this: you start many copies of app on many machines, they all find each 
other via broadcasts, elect a master among themselves, send heartbit 
messages every now and then to monitor healths of nodes, once message 
arrives, master chooses which worker should process it. If one of the 
nodes dies, master resubmits his task to other node. If master dies, 
remaining nodes elect new master and keep going from there. It is 
possible since all communication is done via broadcasts, and every node 
can maintain master's state.


Kirill Lapshin

More information about the Beowulf mailing list