Many systems and applications beyond a relatively modest scale end up being distributed for a variety of reasons, including fault-tolerance, performance, security and the geographical nature of the requirements. Although the common case of a distributed system is separate computers interconnected by the Internet or some networking technology, many of the challenges and solutions come into play as soon as the application consists of two or more processes that do not share a common address space.
This course explores the issues in designing and implementing distributed systems and particularly emphasizes how to deal with the shared state between separate processes within such a system. It will also feature several guest lecturers.