Distribution has become the de facto standard to build complex software applications. These systems often consist of smaller individual systems, which are connected with a network. As such, they are the basis for a growing number of applications in various domains (B2B transaction processing, web services such as Google, Facebook, etc., scientific programming, peer to peer systems, etc.)
Connecting these individual systems through middleware and capablities in the OS allow a developer to exceed the physical limiations of an individual system (in terms of memory, hard drive, etc.). The scale at which web services are offered to customers, make it even more important to develop distirbuted systems and integrate them into an existing IT system.
Devleoping this distributed systems however has a higher complexity compared to traditional standalone software. The course "Gedistribueerde Systemem" (Eng: Distributed Systems) investigates the core issues that arise when building such systems (e.g., in terms of replication, coordination, etc.). It provides algorithms to deal with these issues and enforce a certain level of transparancy for the end user. Some of these algorithms are formally defined and their properties are derived. Finally, we discuss a set of best practices and de facto standard technologies to develop the state of the art distributed systems.
More specifically, the course covers the following aspects:
- Architectural models: what is a distributed system? Types of distributed systems.
- Communication: how dow middleware help in building a distributed system?
- How are these general approaches being used in existing systems?
- Cloud computing
- Web services
- Micro services
- Data processing pipelines such as Hadoop
- Design of algorithms to control the aforementioned technologies such as
- Coordination: concurrency control, election, etc.
The theoretical knowledge is applied in a project where the implemenation of one or more distributed systems is targeted.