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.

Zápočet

Pro získání zápočtu budete muset splnit dvě části:

  1. Programovací úkoly
    1. Implementujte sdílený čítač ve svém oblíbeném jazyce. Řešení pište pro n vláken, kde n je parametr programu.
      1. 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
      2. se synchronizací pomocí Lamportova bakery algoritmu.
      3. se synchronizací pomocí vhodných synchronizačních primitiv jazyka (zkuste alespoň dvě různá)
    2. Implementujte vlastní semafor v jazyce C s pomocí C11 atomics. Použijte svůj semafor pro řešení problému kuřáků.
    3. Implementujte ve svém oblíbeném jazyce (kromě Go) jednoduchý framework pro simulaci distribuovaného systému a v něm pak implementujte:
      1. chord systém
      2. vzájemné vyloučení (libovolnou variantu)
      3. 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).
  2. 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í)

Zkouška

Seznam otázek

TBA

Seznam článků

  1. MapReduce: Simplified Data Processing on Large Clusters
  2. ZooKeeper: Wait-free coordination for Internet-scale systems
  3. In Search of an Understandable Consensus Algorithm (Extended Version)
  4. On the Parallels between Paxos and Raft, and how to Port Optimizations
  5. Practical Byzantine Fault Tolerance
  6. Bitcoin: A Peer-to-Peer Electronic Cash System

Přednášky

  1. 25.9.2024 - Úvod
  2. 2.10.2024 - Paralelní systémy, kritická sekce
  3. 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
  4. 16.10.2024 - Klasické synchronizační problémy
  5. 23.10.2024 - Návrh paralelního systému, úvod do distribuovaných systémů
  6. 30.10.2024 - Komunikace v distribuovaných systémech
    • slidy
    • van Steen, Tanenbaum, kapitola 4
    • Bobrov, kapitola 5
    • Andrews, kapitoly 7 - 10 (detailnější)
  7. 6.11.2024 - Koordinace v distribuovaných systémech: čas a vzájemné vyloučení
  8. 13.11.2024 - Volba leadera a chord systém
  9. 20.11.2024 - Přesunuto ze zdravotních důvodů

Cvičení

  1. 26.9.2024 - Úvod | obsah
  2. 3.10.2024 - Kritická sekce | obsah
  3. 10.10.2024 - Synchronizační primitiva | obsah
  4. 17.10.2024 - Problém kuřáků cigaret | obsah
  5. 24.10.2024 - Návrh PS, Simulace DS | obsah
  6. 31.10.2024 - Komunkace v distribuovaných systémech | obsah
  7. 7.11.2024 - Vzájemné vyloučení v distribuovaných systémech, prezentace C# | obsah
  8. 14.11.2024 - Chord systém, volba leadera, prezentace Java | obsah
  9. 21.11.2024 - Články ke zkoušce, prezentace Python | obsah