|
Lecturer(s)
|
-
Otta Maxmilián, Ing. Ph.D.
|
|
Course content
|
1. Introduction to distributed systems, their properties, architecture, requirements, models and design goals. Communication principles, patterns and protocols in distributed systems 2. Introduction to distributed algorithms, standard problems in distributed systems and their solutions. Leader election, event ordering, group management and reliable group communication. 3. Models of distributed systems and compoutations. Distributed algorithms, properties, requirements and performance metrics. Distributed mutual exclusion and deadlock detection. 4. The distributed consensus problem. Reliable broadcast types: best effort, reliable and ordered broadcasts. Replication of data and services in distributed systems, replicated state machine, RAFT and PAXOS. The Byzantine failure problem. 5. Case studies of some distributed system implementations. Apache Zookeeper, etcd, Infinispan, JGroups. 6. Debugging distributed systems. The problem of observing a distributed system, taking a consistent snapshot of the distributed system's global state. The model of a distributed execution, the sequence and lattice of global states. Dynamic properties of distributed systems - safety, liveness, fairness, starvation, livelock. Predicates on global states, introduction to temporal logic and it's relationship to dynamic properties. 7. Formal verification of distributed systems. Specification of concurrent systems an their vital properties. Introduction to Temporal Logic of Actions (TLA) and PlusCal. Specification and verification of distributed algorithms in PlusCal. 8. Consistency in distributed systems, overview and why its important. Introduction to consistency models, the CAP, PACELC and FLP theorems. Client and data centric consistency models, conflict-free replicated data types (CRDTs). 9. Consistency in distributed systems. Data centric consistency models: strict, sequential, causal, FIFO and weak models. Linearizability and atomicity of consistency models. Client centric consistency models: monotonic read, monotonic write, read your writes and write follows reads. 10. Distributed transactions. Definition of a local and a distributed transaction. Properties and types of transactions. Concurrency control and locking algorithms. Implementation of distributed transactions: the transaction model and the X/Open XA standard. The Saga pattern. 11. Distributed file systems. Fundamental principles and architecture of distributed files systems. The NFS, AFS, Coda and Ceph distributed file systems. Distributed file, block and object storage. 12. Distributed systems design patterns. Patterns for communication, coordination, load balancing, resilience and fault tolerance. Design patterns ensuring liveness, safety and fairness of distributed systems. Stateless and stateful services. 13. Security in distributed systems. Basic concepts, security as an aspect. Transport and application level security. Fundamental elements of security in distributed systems: policies, role based access control (RBAC), attribute based access control (ABAC), key management, authentication and authorization. Public key infrastructure (PKI) concepts. Monitoring of distributed systems security.
|
|
Learning activities and teaching methods
|
- Contact hours
- 65 hours per semester
- Preparation for an examination (30-60)
- 45 hours per semester
- Graduate study programme term essay (40-50)
- 50 hours per semester
|
| prerequisite |
|---|
| Knowledge |
|---|
| To demonstrate knowledge of computer network at the level of the KIV/PSI course To demonstrate knowledge of operating systems at the level of the KIV/OS course To demonstrate knowledge of the C programing language To demonstrate knowledge of finite state automata and their implementation in the C programming language To demonstrate ability to develop networking applications To demonstrate basic ability to programmatically create parallel threads and processes To demonstrate knowledge of synchronization methods in the Linux operating system (POSIX interface) |
| Skills |
|---|
| To be able to use common development and versioning tools. Basic Linux OS usage skills. Basic skills in C language development environment usage. To be able to develop more complex software using the C programming language To be able to develop networking software using the BSD sockets API |
| Competences |
|---|
| N/A |
| N/A |
| learning outcomes |
|---|
| Knowledge |
|---|
| To be familiar with problems solved in distributed systems problems. To demonstrate theoretical knowledge of various problems, that can be correctly solved by coordinating independent programs, including algorithms used for their solution. To demonstrate thorough knowledge of network programming, especially system functions. To demonstrate knowledge of selected distributed algorithms. To demonstrate knowledge of time synchronization, consistency, multiple copies, distributed transactions, distributed file systems. To demonstrate knowledge in the field of reliability and failure detection in distributed systems. |
| Skills |
|---|
| To have practical experience with parallel process programming, threads and their synchronization, be able to pass data between processes and threads in the Unix/Linux operating system environment. To be familiar with Linux command line commands, especially command related to the networking subsystem. To preform analysis of and checking network settings and problem diagnostics. To design and implement client-server networking applications. To design and implement selected distributed algorithms. To be able to debug software in a distributed environment. To perform software analysis including localization of possible errors. |
| Competences |
|---|
| N/A |
| teaching methods |
|---|
| Knowledge |
|---|
| Lecture supplemented with a discussion |
| Group discussion |
| Self-study of literature |
| Skills |
|---|
| Practicum |
| Skills demonstration |
| Group discussion |
| Competences |
|---|
| Interactive lecture |
| assessment methods |
|---|
| Knowledge |
|---|
| Continuous assessment |
| Written exam |
| Skills |
|---|
| Skills demonstration during practicum |
| Continuous assessment |
| Competences |
|---|
| Written exam |
|
Recommended literature
|
-
Burns, Brendan. Designing Distributed Systems: Patterns and Paradigms for Scalable, Reliable Services. 2018. ISBN 978-1-492-03177-2.
-
Coulouris, George; Dollimore, Jean; Kindberg, Tim. Distributed systems : concepts and design. 5th ed.. 2012. ISBN 978-0-13-214301-1.
-
Özsu M.Tamer; Valduriez Patrick. Principles of Distributed Database Systems, 4th ed.. Springer, 2020. ISBN 978-3-030-26252-5.
-
Tanenbaum, Andrew S.; Van Steen, Maarten. Distributed systems 3rd Edition. 2017. ISBN 978-15-430573-8-9.
|