Paralelní a distribuované systémy
(2024/2025, ZS)
Kurz se zabývá základními aspekty paralelních a distribuovaných systémů. Od základů paralelismu, klasických problémů a přístupů k synchronizaci sdílenou pamětí, přes úvod do distribuovaných systému a výběr algoritmů pro řešení jejich základních problémů, až po přehled některých zajímavých moderních distribuovaných systémů.
Zdroje
Seznam zdrojů bude během semestru rozšiřován, zejména o reference ke konkrétním zmínkám z přednášek/cvičení. Podívejte se i k jednotlivým přednáškám a do zdrojů uvedených ve slidech.
- Stránka předmětu ve STAGu
- Distributed systems, Maarten van Steen, Andrew S. Tanenbaum, 2023 | Knihovna | Online
- Principles of concurrent and distributed programming, M. Ben-Ari, Addison-Wesley, 2006 | Knihovna
- Foundations of multithreaded, parallel, and distributed programming, Gregory R. Andrews, 2000 | Knihovna
- Grokking Concurrency, Kirill Bobrov, 2023
- The art of multiprocessor programming, Maurice Herlihy, Nir Shavit, Elsevier, 2008 | Knihovna
- The Little Book of Semaphores, Allen B. Downey, Green Tea Press, 2016 | Online
Zápočet
ÚPRAVA: Dle domluvy na přednášce 4.12. a cvičení 5.12. se úkoly 3b a 3c (chord a raft) stávají dobrovolnými a jejich splněním získate bonus v podobě vlastního výběru článku ke zkoušce (místo losování).
Pro získání zápočtu budete muset splnit dvě části:
- Programovací úkoly
- Implementujte sdílený čítač ve svém oblíbeném jazyce. Řešení pište pro n vláken, kde n je parametr programu.
- bez synchronizace. Nachystejte příklad, kde se (pravděpodobně) ukážou problémy.
- zkuste použít více možností k tvorbě vláken (virtuální vlákna, ThreadPooly, …) dle možností jazyka
- se synchronizací pomocí Lamportova bakery algoritmu.
- se synchronizací pomocí vhodných synchronizačních primitiv jazyka (zkuste alespoň dvě různá)
- bez synchronizace. Nachystejte příklad, kde se (pravděpodobně) ukážou problémy.
- Implementujte vlastní semafor v jazyce C s pomocí C11 atomics. Použijte svůj semafor pro řešení problému kuřáků.
- Implementujte ve svém oblíbeném jazyce (kromě Go) jednoduchý framework pro simulaci distribuovaného systému a v něm pak implementujte:
- vzájemné vyloučení (libovolnou variantu)
- (bonus) chord systém
- (bonus) Raft pro volbu lídra
- Ke všem úkolům nachystejte ukázku.
- Odevzdávat můžete postupně, nebo vše naráz.
- Termín odevzdání je cvičení v zápočtovém týdnu.
- Odevzdává se osobně (popovídáme si nad tím).
- Implementujte sdílený čítač ve svém oblíbeném jazyce. Řešení pište pro n vláken, kde n je parametr programu.
- Nachystat a ostatním přednést informace o možnostech paralelních/distribuovaných výpočtů v nějakém programovacím jazyce:
- Termíny prezentací:
- 7.11.2024 - C#
- 14.11.2024 - Java
- 21.11.2024 - Python
- 28.11.2024 - Javascript
- 5.12.2024 - C a C++
- Požadavky na prezentaci:
- krátké povídání o modelu, možnostech a specifických věcech jazyka, jeho standardní knihovny i nejpoužívanějších knihovnách vztahujících se k paralelismu
- stručný handout pro ostatní s informacemi z prezentace
- ukázky použití paralelismu v daném jazyce (živě na cvičení a v repositáři zveřejněném i pro ostatní)
- Termíny prezentací:
- Tabulka s výsledky.
Zkouška
Zkouška se skládá ze tří částí:
- Obecný rozhovor o všech tématech kurzu (bez přípravy; přehledově).
- Klasicky vylosovaná otázka ze seznamu níže s písemnou přípravou.
- Rozhovor o jednom vylosovaném článku ze seznamu níže s písemnou přípravou.
ÚPRAVA (bonus): Studenti, kteří implementovali i bonusovou část zápočtové práce, článek nelosují ale zvolí si dle libosti.
Pro splnění zkoušky musí student splnit všechny tři části (v jednom termínu).
Nejprve si popovídáme v duchu bodu 1. Pokud to bude v pořádku, přistoupíme k losování otázky a článku z bodů 2 a 3.
Písemná příprava na části 2 a 3 bude max. 30 minut.
Článek bude během přípravy i rozhovoru k dispozici k nahlédnutí.
Seznam otázek a článků ke zkoušce bude zveřejněn během semestru.
Seznam otázek
Algoritmy pro kritickou sekci. Základní synchronizační primitiva a jejich použití. Prostředky pro synchronizaci vláken. Prostředky pro synchronizaci procesů. Koordinace času v DS. Vzájemné vyloučení v DS. Volba lídra v DS. Shoda v DS. Tolerance chyby v DS. Globální stav v DS. Replikace a konzistence v DS. Chord systém. Blockchain.
Více na poslední přednášce.
Seznam článků
- Vyberte si čtyři z následujících článku (tj. dva můžete vyřadit).
- Ze čtyř vybraných budete losovat u zkoušky.
- Odkazy vedou na oficiální zdroje. Kdyby byl s některým problém, ozvěte se.
- Cílem je základní pochopení, tj. otázky typu:
- O čem článek je?
- K čemu to je dobré?
- Co nového přináší?
- Jak to funguje?
- Základní vlastnosti problému/systému/algoritmu popsaného v článku?
- Co si o tom myslíte (o obsahu i o formě článku)?
- Co vás zaujalo nebo vám nebylo jasné?
- …
- MapReduce: Simplified Data Processing on Large Clusters
- ZooKeeper: Wait-free coordination for Internet-scale systems
- In Search of an Understandable Consensus Algorithm (Extended Version)
- On the Parallels between Paxos and Raft, and how to Port Optimizations
- Practical Byzantine Fault Tolerance
- Bitcoin: A Peer-to-Peer Electronic Cash System
Přednášky
- Přednášky jsou ve středu, 16:45-18:15 v místnosti 1.127.
- Obsah přednášek bude doplňován během semestru.
- 25.9.2024 - Úvod
- slidy (v. 11.10.2024)
- Leslie Lamport
- 2.10.2024 - Paralelní systémy, kritická sekce
- slidy (v. 11.10.2024)
- Dijkstra - kritická sekce
- Lamport - Bakery
- 9.10.2024 - Synchronizační primitiva
- slidy (v. 11.10.2024)
- Ben-Ari, kapitoly 6 a 7 (více informací k semaforům a monitorům)
- Herlihy, Shavit, kapitola 17 (bariéry)
- Dokumentace vašeho oblíbeného jazyka (atomické akce, mutex, lock, semafor, monitor, podmíněná proměnná, bariéra, ThreadPool, …)
- Další ve slidech
- 16.10.2024 - Klasické synchronizační problémy
- slidy (v. 16.10.2024)
- Dijkstra - některé klasické problémy
- Parnas - diskuze síly semaforů
- Downey, kapitola 4
- 23.10.2024 - Návrh paralelního systému, úvod do distribuovaných systémů
- slidy
- Fosterova metodologie
- van Steen, Tanenbaum, kapitoly 1 a 2
- Bobrov, kapitoly 7 a 13
- 30.10.2024 - Komunikace v distribuovaných systémech
- slidy
- van Steen, Tanenbaum, kapitola 4
- Bobrov, kapitola 5
- Andrews, kapitoly 7 - 10 (detailnější)
- 6.11.2024 - Koordinace v distribuovaných systémech: čas a vzájemné vyloučení
- slidy
- van Steen, Tanenbaum, kapitola 5 (po vzájemné vyloučení)
- Lamport - logický čas
- Ricart, Agrawala - vzájemné vyloučení
- Apache Zookeeper
- 13.11.2024 - Volba leadera a chord systém
- slidy
- van Steen, Tanenbaum, kapitola 5.4 (volba leadera), kapitola 6.2.3 (chord)
- Ongaro, Ousterhout - Raft
- Stoica et al. - Chord
- 20.11.2024 - Přesunuto ze zdravotních důvodů
- 27.11.2024 - Tolerance chyb a shoda v distribouvaných systémech
- 4.12.2024 - Konzistence, replikace a globální stav v distribuovaných systémech
- 11.12.2024 - Distribuované transakce, Blockchain
- 12.12.2024 - Bitcoin a Ethereum, shrnutí, zkouška a zpětná vazba (náhrada odpadlé přednášky)
Cvičení
- Cvičení jsou ve čtvrtek, 8:00 - 9:30 v místnosti 1.029.
- Obsah cvičení bude doplňován během semestru.
- 26.9.2024 - Úvod | obsah
- 3.10.2024 - Kritická sekce | obsah
- 10.10.2024 - Synchronizační primitiva | obsah
- 17.10.2024 - Problém kuřáků cigaret | obsah
- 24.10.2024 - Návrh PS, Simulace DS | obsah
- 31.10.2024 - Komunkace v distribuovaných systémech | obsah
- 7.11.2024 - Vzájemné vyloučení v distribuovaných systémech, prezentace C# | obsah
- 14.11.2024 - Chord systém, volba leadera, prezentace Java | obsah
- 21.11.2024 - Články ke zkoušce, prezentace Python | obsah
- 28.11.2024 - Byzantské chyby, prezentace Javascript | obsah
- 5.12.2024 - Replikace, Globální stav, prezentace C/C++ | obsah
- 12.12.2024 - Zbylá část přednášky, zpětná vazba a odevzdávání úkolů.