Looking for a Java developer with experience in JADE (Java Agent Development Library). Understanding of JADE behaviours is essential. Need to implement and test Paxos consensus algorithm library. Project will consist of several distinct stages (with pauses in between). Each stage will have a separate budget (quoted price will be the first stage). Development will require installing distributed JADE platform, developing and deploying agents on several servers, testing their performance, putting test results in a form of diagrams and charts, building reports and user manuals when needed.
Successful candidate is expected to
- Install a distributed JADE platform on several servers.
- Develop necessary JADE behaviours, which could then be used as a core by other developers to implement Paxos consensus algorithm. Namely ProposerBehaviour, AcceptorBehaviour and LearnerBehaviour.
- Develop a multi-agent system that would make use of the named behaviours in order to replicate a state (just a string would do) between several servers. We will discuss an example via skype, if needed.
- Deploy the system and test it.
- Produce test results in a form of graphs, charts and a report (possible few).
- Produce developer manual on how to use behaviours.
Scope of the first stage
1. Keep LearnerBehaviour as simple as possible. Just enough to learn the state and its change in state-machine, given that it is able to successfully communicate with the rest of the system.
2. The most important task is to implement “global state” mechanism. Consider following scenario: in the distributed system there are several servers, which have to replicate the common state-machine. Any of them may be a proposer, acceptor and learner. In order to propose a change, proposer has to request “propose_id” from the primary server. All of them have an order, because the order of change matter when we want to have the same state-machine on all servers at all times. Then it sends (propose_id, value) tuple to the quorum, and they vote as described in the algorithm. I can send the description paper, if needed. The problem is, when network partitions (servers stop seeing each other for some time) agents need to detect that, and elect new primary server. Doing so, they should also restore the last saved change number and value.
3. The real task here is to implement voting protocol (or use one) to enable agents elect the primary server, which tells others propose_id, thus, stores the global state. The voting algorithm should be changed so, that it involves a step for repairing the last global state in order to proceed correctly.
4. When network partition recovers, the server has to check if new primary server exists, and request new global state, if it does. So it should not attempt to reclaim its status, but join as non-primary.
Here “global state” means the list of all proposes for update. It determines next propose_id value for the consensus algorithm.