The purpose of the study-exercise is to provide the individual student with the opportunity of working on a problem that is larger, more complex, and that takes more time to solve than is normally possible within the normal exercise time associated with a lecture. For this reason the study time of 2 lessons and additional exercise time are allocated to the exercise. That is, two conventional lectures have been replaced by the study-exercise, and you are required to spend the time on the that instead. In addition, as the examination and grading (0-10) for the course will be 100% based on the hand-in of this assignment, the time normally available for exam preparation should be spent on the study exercise.
In the study-exercise in the Distributed Systems course you are going to program a text-book distributed algorithm, and a simple example/application using it. The intention is that this should give you
In my experience such an exercise gives you a valuable learning experience.
You may in principle pick any non-trivial algorithm from the text-book. If you pick one that is not on the following list, please consult the lecturer for approval. Other choices may be possible, but please consult me before starting.
You are advised to create your solution incrementally, ie. starting with the simplest possible setting and then gradually introduce features and generalize. Also, consider the following generic issues about your solution: How do you detect and handle failures? Are your implementation correct according to the correctness criteria and system assumptions of the algorithm? What about performance both algorithmically and at the code-level?
The program must be executable as a set of processes using message passing (or RMI) only. You may use any programming language you choose, but we recommend that you use one of the following:
You are going to write a small distributed application and report on it: It is the expectation that the exercise results in a running program that demonstrate the basic and central features and use of the algorithm.
The deliverable will be a small report consisting of the following parts:
It is OK to only implement it it in a simplified setting such as e.g. by letting the processes run on the same host as long as they are in separate address spaces, or fixing number, configuration and topology of the processes etc. Of course it will be good to run the system truly distributed among several hosts. Do also not spend time on fancy user interfaces or GUIs - simple textual (input) output suffices.
I expect that the
core part of most of the algorithms can be implemented in a few pages of source
code (plus helper/container classes). The emphasis is on the required
communication, synchronization, timer and fault handling, not on nice efficient
sequential programming.
You may be given feedback to your solution from the lecturer during the course time allocated to the
exercise. You are welcome (recommended) to
hand-in your (intermediate) solution or contact the lecturer for
feedback/discussions.
It is the expectation that an average student should be able to complete the exercise to a passing level in the allocated time. If you feel that your practical programming skills and computer systems understanding is below average or not in compliance with the required background of the course you may need to spend more time.
A non-correct working implementation does not necessarily equal a non-pass grade, but some reflection on the encountered problems are especially recommended in this case.