Course: Distributed Systems and Algorithms

» List of faculties » FAV » KIV
Course title Distributed Systems and Algorithms
Course code KIV/DSA
Organizational form of instruction Lecture + Tutorial
Level of course Master
Year of study not specified
Semester Summer
Number of ECTS credits 6
Language of instruction Czech
Status of course unspecified
Form of instruction Face-to-face
Work placements This is not an internship
Recommended optional programme components None
Lecturer(s)
  • Brenkus David, Ing. Ph.D.
Course content
1. Introduction to distributed systems, their properties, architecture, requirements, models and design goals. 2. Distributed algorithms, taxonomy, basic properties and solved problems, applications of distributed algorithms, deadlock detection. 3. Leader election, mutual exclusion, event ordering, group management and reliable group communication, atomic broadcast and distributed consensus. 4. The problem of distributed systems debugging, logical time stamps, consistent global state, observability and monitoring. 5. Solving elementary coordination tasks in distributed systems using distributed stores. 6. Generalization of the distributed consensus, replication, replicated state machine, Paxos and RAFT 7. Consistency in distributed systems, the CAP theorem, overview of consistency models, CRDT - Conflict-free Replicated Data Types 8. Data centric and client centric consistency models. 9. Transactions, nested transactions, distributed transaktions, locking, time-stamps, failure recovery. Blockchain, the Saga pattern, process orchestration vs choreography, event driven processing, reactive services, SQRS and event sourcing, FaaS 10. Architectural design patterns in distributed systems, hexagonal architecture, data sharding and distributed hash tables. 11. Resource management and task scheduling in distributed systems 12. Swarm intelligence, intelligent networks, distributed simulation 13. Distributed systems security, introduction to PKI, SCEP, authentication services, OAuth and JWT

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.


Study plans that include the course
Faculty Study plan (Version) Category of Branch/Specialization Recommended year of study Recommended semester