Author:      Nelio Alves Pereira Filho ( nelio@ime.usp.br )
                    http://www.ime.usp.br/~nelio
                    Master Studies in Computer Science
                    Clusters - High Availability

Distributed Adaptative Scheduler

This project was developed to study Distributed Schedulers, and to implement algorithms to achieve remote scheduling, load balancing and process migration. The process migration might be manual (called by the user through the GUI) or automatic (the system itself calls a process migration). This automatic process migration is used to keep the same load on each node of the execution cluster, whenever it's possible.
The Scheduler Tasks are centered in one special node (Monitor), and the Processors (nodes that are willing to execute processes) are active, meaning that if a node wants to be a Processor, it should contact the Monitor and make the request.
As it's just a study project, many details were lost, and other assumptions had to be made. For instance, the load on a node of the cluster is simply the number of active process it's running; a Process for this scheduler is an object that implements a special interface. Also, it's not a very robust system. It's goals where not High Availability and it has several SPOF (Single Point Of Failures), and other details that might have an unusual behave in failures.
First of all, you need to unpack the tarball. Just untar it, and you should get a directory tree with all information you need. The system was written in Java, and it's very simple to run. You'll only need a JVM (>= 1.2). If you have Ant installed, just click here to jump to Ant's section. For simplicity, let's call INSTALL the basedir of the unpacked tar.
$  export \
CLASSPATH=$CLASSPATH:<INSTALL>/Devel/build/classes
$  rmiregistry &
$  java \
-Djava.rmi.server.codebase=<INSTALL>/Devel/build/classes/ \
-Djava.security.policy=<INSTALL>/Devel/src/sod/util/policy \
sod.server.Monitor
$  java \
-Djava.rmi.server.codebase=<INSTALL>/Devel/build/classes/ \
-Djava.security.policy=<INSTALL>/Devel/src/sod/util/policy \
sod.client.ProcessorImpl <MONITOR ADDRESS>

For users using Ant, follow these instructions:
$  cd <INSTALL>/Devel/build
$  rmiregistry &
$  ant run.server
$  ant run.client

You can download the package with the source code, binaries and API documentation here. Don't expect too much of the API documentation, it's just a draft. Still the code is the better documentation...

Other information may be found in the API documentations, that is in <INSTALL>/Docs, or can be generated with Ant:

$  ant doc

An important detail about these Processes is that they have a OutputStream variable called out that should be used for printing information to stdout. To develop such a process, just extends sod.util.AbstractApplication, and implement the necessary methods.

The system has 3 packages: sod.server, sod.client and sod.util. The package sod.exec contains just some demos to test the scheduler and all its components. This tests are sod.exec.Run1 and sod.util.Run2, which just print numbers in the stdout.