|
|
Main menu for Browse IS/STAG
Course info
KIV / DSA
:
Course description
Department/Unit / Abbreviation
|
KIV
/
DSA
|
Academic Year
|
2023/2024
|
Academic Year
|
2023/2024
|
Title
|
Distributed Systems and Algorithms
|
Form of course completion
|
Exam
|
Form of course completion
|
Exam
|
Accredited / Credits
|
Yes,
6
Cred.
|
Type of completion
|
Combined
|
Type of completion
|
Combined
|
Time requirements
|
Lecture
3
[Hours/Week]
Tutorial
2
[Hours/Week]
|
Course credit prior to examination
|
Yes
|
Course credit prior to examination
|
Yes
|
Automatic acceptance of credit before examination
|
Yes in the case of a previous evaluation 4 nebo nic.
|
Included in study average
|
YES
|
Language of instruction
|
Czech
|
Occ/max
|
|
|
|
Automatic acceptance of credit before examination
|
Yes in the case of a previous evaluation 4 nebo nic.
|
Summer semester
|
2 / -
|
0 / -
|
2 / -
|
Included in study average
|
YES
|
Winter semester
|
0 / -
|
0 / -
|
0 / -
|
Repeated registration
|
NO
|
Repeated registration
|
NO
|
Timetable
|
Yes
|
Semester taught
|
Summer semester
|
Semester taught
|
Summer semester
|
Minimum (B + C) students
|
not determined
|
Optional course |
Yes
|
Optional course
|
Yes
|
Language of instruction
|
Czech
|
Internship duration
|
0
|
No. of hours of on-premise lessons |
0
|
Evaluation scale |
1|2|3|4 |
Periodicity |
každý rok
|
Evaluation scale for credit before examination |
S|N |
Periodicita upřesnění |
|
Fundamental theoretical course |
No
|
Fundamental course |
Yes
|
Fundamental theoretical course |
No
|
Evaluation scale |
1|2|3|4 |
Evaluation scale for credit before examination |
S|N |
Substituted course
|
KIV/DS
|
Preclusive courses
|
N/A
|
Prerequisite courses
|
N/A
|
Informally recommended courses
|
KIV/PSI
|
Courses depending on this Course
|
KIV/DISZ
|
Histogram of students' grades over the years:
Graphic PNG
,
XLS
|
Course objectives:
|
The aim of the course is to provide students with knowledge of distributed systems architectures and selected types of distributed algorithms. Introduce students to elementary tasks of distributed systems and to be able to implement selected distributed algorithms using a suitable programming language or components. Provide students with ability to debug distributed applications in a Unix or Linux environment.
|
Requirements on student
|
Elaboration of two individual programming task. Written exam, accompanied by an oral interview as needed.
Due to continuous updating of the course, it is necessary to get an agreement from the course guarantor in order to earn credit in case of repeating enrollment.
|
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
|
Activities
|
|
Fields of study
|
|
Guarantors and lecturers
|
|
Literature
|
|
Time requirements
|
All forms of study
|
Activities
|
Time requirements for activity [h]
|
Contact hours
|
65
|
Graduate study programme term essay (40-50)
|
50
|
Preparation for an examination (30-60)
|
45
|
Total
|
160
|
|
Prerequisites
|
Knowledge - students are expected to possess the following knowledge before the course commences to finish it successfully: |
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 - students are expected to possess the following skills before the course commences to finish it successfully: |
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 - students are expected to possess the following competences before the course commences to finish it successfully: |
N/A |
N/A |
|
Learning outcomes
|
Knowledge - knowledge resulting from the course: |
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 - skills resulting from the course: |
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 - competences resulting from the course: |
N/A |
|
Assessment methods
|
Knowledge - knowledge achieved by taking this course are verified by the following means: |
Continuous assessment |
Written exam |
Skills - skills achieved by taking this course are verified by the following means: |
Skills demonstration during practicum |
Continuous assessment |
Competences - competence achieved by taking this course are verified by the following means: |
Written exam |
|
Teaching methods
|
Knowledge - the following training methods are used to achieve the required knowledge: |
Lecture supplemented with a discussion |
Group discussion |
Self-study of literature |
Skills - the following training methods are used to achieve the required skills: |
Practicum |
Skills demonstration |
Group discussion |
Competences - the following training methods are used to achieve the required competences: |
Interactive lecture |
|
|
|
|