Distribuované systémy

Jaro 2021

Přehled

15-440 je úvodní kurz distribuovaných systémů. Důraz bude kladen na techniky vytváření funkčních, použitelných a škálovatelných distribuovaných systémů. Pro konkretizaci problematiky je součástí výuky několik několikatýdenních projektů vyžadujících významný návrh a implementaci

Cíle tohoto kurzu jsou dva. Za prvé, aby studenti pochopili principy a techniky stojící za návrhem distribuovaných systémů, jako je zamykání, souběžnost, ukládání do mezipaměti, přednačítání, plánování a komunikace po síti. Za druhé, aby studenti získali praktické zkušenosti s návrhem, implementací a laděním skutečných distribuovaných systémů.

Mezi hlavní témata výuky tohoto předmětu patří:

  • Nedostatek zdrojů, plánování, a souběžnost
  • Komunikační latence a šířka pásma
  • Pojmenování
  • Abstrakce a modularita
  • Dokonalá komunikace a další typy selhání
  • Ochrana před náhodným a škodlivým poškozením
  • Optimismus
  • Souhlas
  • Použití instrumentace, monitorovacích a ladicích nástrojů při řešení problémů.
  • Návrh, realizace a ladění podstatných programátorských projektů, které zahrnují výše uvedená témata

Známkování

Všechny práce z předmětu se vypracovávají individuálně. Neexistují žádné týmy ani projektoví partneři. Při prezenční nabídce tohoto kurzu (před COVID a snad i po COVID) bylo hodnocení založeno na projektech (45 %), souborech úloh (20 %), průběžné zkoušce (15 %) a závěrečné zkoušce (20 %). Pro jarní nabídku kurzu v roce 2021 jsou zkoušky kvůli omezením COVID nahrazeny kumulativními soubory problémů. Ty se podobají zkouškám s otevřenou knihou, ale bez časového tlaku. Jak napovídá jejich název, zahrnují veškerou látku, která se do té doby probírala ve třídě. Ostatní sady úloh označujeme jako tematické sady úloh, protože se zaměřují na jednotlivá témata. Hodnocení na jaře 2021 bude tedy následující (všechny váhy jsou přibližné, v rozmezí 5 %):

  • 45 % pro 4 projekty, stejně vážené
  • 20 % pro 4 tematické problémové sady, stejně vážené
  • 15 % pro kumulativní problémovou sadu v polovině semestru
  • 20 % pro závěrečnou kumulativní problémovou sadu.

Výstupy z učení

Očekáváme, že studenti získají hluboké porozumění, plynulost uvažování a praktické dovednosti v oblasti implementace následujících základních systémových konceptů v distribuovaných systémech:

    • Komunikace a vzdálené volání procedur
    • Sémantika řízení a omezení jazyka
    • Přesně jednou, nejvýše jednou, at-least-once
    • Serializace a de-serializace
    • End-to-end argument a jeho aplikace v reálných systémech
    • Integrace s vlákny
    • Konkurence operací
    • Data caching a one-sémantika kopírování
    • Protokoly konzistence mezipaměti a kompromisy při implementaci
    • Původ časové a prostorové lokality
    • Metriky kvality mezipaměti
    • Protokoly konzistence specifické pro aplikaci
    • Prefetching: Výhody a rizika
    • Extrakce nápověd
    • Zvětšení vyrovnávací paměti
    • Poruchy v distribuovaných systémech: původ a empirické studie
    • Rychlé poruchy a byzantské poruchy
    • Základní limity odolnosti proti poruchám
    • Tolerance poruch: Atomické transakce; vlastnost ACID
    • Problémy při implementaci
    • Stínování, seznamy záměrů a protokolování s předstihem zápisu
    • Tradice ve fyzickém protokolování a protokolování operací
    • Nested transakce
    • Distribuované transakce
    • Souhlas a blockchain: Jednohlasnost (dvoufázový commit)
    • Většina (volba vůdce, Paxos)
    • Byzantský (jednovýběrový a Dolev-Strong)
    • Replikace státního stroje a Streamlet
    • Bitcoin
  1. Běžná programovací paradigmata jako Map-Reduce, MPI a GraphLab

  2. (Jen pokud to čas dovolí):
    • Dosažení vysoké dostupnosti: zachování sémantiky jedné kopie na základě hlasování
    • Taxonomie replikačních strategií:
    • Konflikty čtení a zápisu a zápisu
    • Strategie server-klient a peer-to-peer
    • Kachování a odpojený provoz; řešení konfliktů
    • Využití malé šířky pásma ke zlepšení dostupnosti

Logistika kurzů

Profesoři

.

Jméno Kancelářské hodiny Kancelář Telefon Andrew email
Mahadev Satyanarayanan (Satya) Úterý 1. září Přednášející: Mgr:00 – 15:00 GHC-9123 x8-3743 satya
Padmanabhan Pillai (Babu) St 11. 11:00:00 – 13:00 GHC-9232 pspillai
Runting Shi (Elaine) po 4:00 – 6:00:00 CIC-2217 Kontakt přes Canvas

Asistenti pedagoga

.

Jméno Kancelářské hodiny Andrew email
Nathan Ang Čt 2:00-16:00 nathanan
Junwon Chang (Joseph) So 9:00:00-11:00 junwonc
Wenxin Ding (Freda) Pá 10:00-12:00 wenxind
Timothy Ganger Sob:00-18:00 tganger
Ziying He Pá 17:00-19:00 ziyingh
Roger Iyengar St 1. 2:00:00-15:00 raiyenga
Ishaan Jaffer Čt 16:00-18:00 ijaffer
Ibnul Jahan Út 4:00-18:00 iej
Chen Jin (Crystal) Pá 8:00-10:00 chenj
Yajin Li Pondělí 10. 12:00-12:00 yajinl
Diego San Miguel Pá 14:00-16:00 dsanmigu
Riccardo Santoni Po 8:00:00-22:00 rsantoni
Yiwen Song (Victor) Čt 9:00-11:00 hod:00:00 yiwenson
Haithem Turki St 15:00-17:00 hturki
Clarissa Xu Út 6:30-20:00 hod:30:00 csxu

Přednášky

  • Úterý a čtvrtek, 10:40-12:00
  • Zoom odkazy a videozáznamy: Na stránce Canvas pro tento kurz
  • Není výuka: Úterý 23. února (den prázdnin), čtvrtek 15. dubna (jarní karneval)
  • Poslední vyučovací hodina:

Cvičení

  • Čas: středy 19:00 – 19:50 (sekce A), 20:00 – 20:50 (sekce B)
  • Zoom odkazy a videozáznamy: Na stránce Canvas pro tento kurz

Poznámky ke kurzu

Budou umístěny v oblasti AFS kurzu na adrese:

Učebnice a nepovinná literatura

Nejsou žádné povinné učebnice. Zde jsou tři dobré odkazy, které můžete použít jako nepovinnou četbu:

  • „Distributed Systems: Principles and Paradigms“ od Andrew S. Tanenbauma a Maartena Van Steena, třetí (2017) vydání, Prentice Hall
  • „Guide to Reliable Distributed Systems“ od Kennetha P. Birman, Springer
  • Foundations of Distributed Consensus and Blockchains od Elaine Shi (2020, rukopis knihy)

V odkazu „Readings“ v horní části této webové stránky je navíc uvedena specifická nepovinná četba, kterou budeme zmiňovat na různých místech přednášek. Pdf těchto nepovinných čtení jsou k dispozici na této webové stránce kurzu.

Pravidla kurzu

Předpoklady

Protože tento kurz má velkou projektovou složku, musíte ovládat programování v jazycích C a Java na systémech UNIX. Je nutné, abyste absolvovali kurz 15-213 a získali z něj známku „C“ nebo vyšší, protože mnoho z programovacích dovedností, které budete potřebovat, se učí právě v tomto kurzu. Pokud jste z předmětu 15-213 obdrželi trojku, musíte se před zápisem předmětu 15-440 sejít se svým studijním poradcem a probrat s ním své znalosti, případně absolvovat další předmět, abyste si zdokonalili své systémové dovednosti.

Policy on Academic Integrity

Na tento předmět se vztahují pravidla Carnegie Mellon University o akademické bezúhonnosti. Od všech studentů se očekává, že si tuto politiku pečlivě prostudují a budou ji dodržovat ve všech aspektech tohoto kurzu.

Pokyny pro spolupráci:

  • Studenti jsou vyzýváni, aby se o jakýchkoli úkolech bavili mezi sebou, s TA, s vyučujícími nebo s kýmkoli jiným. Jakákoli pomoc se však musí omezit na diskusi o problému a nastínění obecných přístupů k řešení.
  • Každý student musí vypsat vlastní řešení zadaných úloh. Všechny projekty musí být vypracovány individuálně.
  • Konzultovat řešení jiného studenta je zakázáno a předložená řešení nesmí být kopírována z žádného zdroje. Tyto činnosti představují podvádění.
  • Pokud máte jakékoli dotazy ohledně toho, zda by některá činnost představovala podvádění, neváhejte se zeptat vyučujících.

Pokyny ke sdílení:

Nahrávky

Na jaře 2021 bude výpočetní služba CMU nahrávat každou přednášku a recitaci a zveřejňovat je na stránce Canvas pro tento kurz. Všechny ostatní nahrávky jsou zakázány.

Omezení využití času TA

Aby bylo ke všem spravedlivé, zejména když na pozornost TA čeká dlouhá fronta studentů, bude na všechny konzultace stanoven limit 10 minut. Pokud student nebude na konci 10 minut hotov, vrátí se na konec fronty a teprve poté dostane další čas s TA. Před schůzkou s TA se připravte. Pokud potřebujete pomoci s nalezením chyby, zúžte a zjednodušte problém ještě před schůzkou s TA.

Podmínky používání služby Piazza

Tento kurz používá pro zodpovídání otázek webovou stránku Piazza: zde je stránka Piazza pro tento kurz.

Představte si službu Piazza jako zvednutí ruky ve třídě a položení otázky. Žádná otázka není příliš hloupá, takže se jí nebojte. Na každého člověka, který položí otázku, pravděpodobně připadá mnoho dalších, kterým stejná otázka již vyvstala nebo brzy vyvstane. Odpověď na vaši otázku může být přínosná i pro ně. Kromě toho mohou existovat lidé, které vaše otázka nenapadla. Tím, že jim otázku položíte, jim pomůžete vidět jemnost, kterou možná dosud neviděli. Na přímé e-maily instruktorům nebudeme odpovídat.

Vždy očekáváme, že ve svých příspěvcích na Piazze (otázkách i odpovědích na otázky spolužáků) budete používat dobrý úsudek. Součástí procesu učení je zápasit s látkou, dokud nedospějete ke správnému vhledu, abyste ji pochopili. Příliš podrobné příspěvky v reakci na žádost o pomoc mohou učení narušit. Na druhou stranu je někdy skvělé, když vás někdo postrčí správným směrem, když se nemůžete dostat ze zajetých kolejí. A samozřejmě je třeba rychle pomoci při nepochopení zadání nebo dostupných nástrojů. Při vkládání příspěvků na stránky Piazza se prosím řiďte svým nejlepším úsudkem, jako byste spolupracovali se svými přáteli osobně. Několik hrubých pokynů:

Příklady toho, co je dobré zveřejnit a na co odpovědět:

  • Nedorozumění zadání
  • Přesnění požadavků
  • Chyby ve specifikaci zadání nebo referenční implementaci či testech
  • Malé, podrobné dotazy týkající se fungování systémových volání, funkcí atd.
  • Věci, které vypadají, že by se hodily do často kladených otázek k zadání

Příklady špatných věcí, které je třeba zveřejnit nebo na ně odpovědět:

  • Více než pár řádků kódu
  • Hluboké vysvětlení, jak váš systém funguje
  • Dotazy na nejlepší přístup k architektuře systému na vysoké úrovni
  • Dotazy týkající se vaší známky

Očekáváme, že jste před odesláním otázky na piazzu vynaložili přiměřené úsilí, abyste se sami zamysleli. To platí zejména s ohledem na ladění vašeho kódu. Zkoušeli jste manuálové stránky? Vyhledal jste na Googlu případně relevantní zdroje? Podívali jste se na předchozí otázky, které již lidé položili, a na poskytnuté odpovědi? Vkládal jste printf a snažil se pochopit, co se s vaším kódem děje?“

Nepoužívejte autolab jako ladicí nástroj. Očekáváme, že jste před odesláním do autolabu vynaložili přiměřené úsilí, abyste svůj kód odladili. Vytváření testovacích případů a zátěžové testování vašeho kódu je součástí projektu. Bez vynaložení tohoto úsilí přicházíte o důležitou část možnosti učení v tomto kurzu. Odeslání do autolabu by mělo být posledním krokem procesu, v němž jste svůj kód otestovali, odladili a vylepšili v rámci svých možností. Odesílání výpisu z autolabu v příspěvku na Piazze se slovy „prosím o pomoc“ je hrubým porušením etikety na Piazze.

Soukromé příspěvky na Piazze nejsou podporovány. Jedná se o politické rozhodnutí pro tuto třídu. Pamatujte, že psaní příspěvků na piazza je podobné zvednutí ruky a položení otázky. Ostatní studenti mají prospěch z toho, že položíte otázku a uvidí odpověď vyučujícího. Umožňujeme, aby vaše příspěvky byly pro spolužáky anonymní, pokud se tak rozhodnete. To už je určitý stupeň soukromí nad rámec toho, co je možné při položení otázky ve třídě. Pro skutečně vzácné případy, kdy potřebujete vznést soukromý dotaz, který nesouvisí s obsahem kurzu, byla vytvořena speciální soukromá poštovní konference.

Pro dotazy, které skutečně potřebují být soukromé, pošlete e-mail na adresu [email protected] a jeden z instruktorů vám odpoví. E-maily do této konference týkající se obsahu kurzu (např. objasnění učební látky) budou ignorovány; takové dotazy byste měli posílat na Piazzu.

Policie pro pozdní odevzdání

Pro projekty:

  • Každý student bude mít v průběhu semestru k dispozici pět dní na zpoždění. Tyto dny zpoždění jsou určeny k zohlednění dovolených, cestování, pohovorů, nachlazení a dalších podobných situací. Můžete je využít z jakéhokoli důvodu, aniž byste museli žádat o povolení vyučující. V jednom termínu můžete využít maximálně dva dny zpoždění (tj. u projektů s více kontrolními body můžete využít maximálně dva dny zpoždění pro každý kontrolní bod). Dny zpoždění budou automaticky použity v chronologickém pořadí, takže se nemůžete rozhodnout odložit použití dne zpoždění pro budoucí úkol s vyšší váhou.

  • Jeden den zpoždění = (0,24] hodin po termínu; dva dny zpoždění = (24, 48] hodin po termínu; atd.

  • Pokud využijete všechny dny zpoždění, můžete odevzdat pozdě za 15 % pokutu za každý den, a to až po dobu dvou dnů. Jinými slovy, pokud jste vyčerpali všechny dny zpoždění, můžete odevzdávat ještě další dva dny, přičemž za každý z těchto dnů (dny odkladu) vám hrozí 15% pokuta.

  • Nemůžete kombinovat dny zpoždění a dny odkladu, abyste odevzdávali s více než dvoudenním zpožděním.

Pro sady úloh: Žádné opožděné odevzdání se nepřipouští, ať už s penalizací nebo bez ní. Dbejte na včasné odevzdání.

Průvodce stylem projektů

Kromě testování funkčnosti vašeho kódu si také vyhradíme část bodů každého projektu za jeho styl a čitelnost. Nejdůležitější je konzistentní a čitelný styl. Jde nám hlavně o to, abyste zvolili styl, který je čitelný a rozumný, a abyste stejný styl používali konzistentně v celém projektu. používejte zdravý rozum: nemějte 500znakové řádky kódu, nepojmenovávejte proměnné foo (pokud to v daném kontextu nedává smysl) a vyhněte se náhodnému míchání pádových konvencí.

Budeme hledět na následující věci:

Dokumentace Dobrá dokumentace je důležitá: pro vás v budoucnu, pro ostatní správce kódu a v tomto kontextu i pro hodnotitele, kteří se budou na váš kód dívat. Necítíte potřebu dokumentovat každý řádek kódu (protože dobrý kód by měl být v jistém smyslu i sebedokumentační), ale obvykle je dobré zdůraznit obecné použití a účel každé funkce, stejně jako velkých nebo složitých bloků kódu. Dobrou praxí je také zahrnout do každého souboru hlavičku s podrobnostmi o tom, jak daný soubor zapadá do struktury projektu jako celku. Bílé místo Buďte důslední. Nepoužívejte prosím na některých místech tabulátor 2 mezery a na jiných 4 mezery. Buďte rozumní a používejte bílé mezery, aby byl váš kód čitelný. Délka řádků Budeme rozumní, pokud jde o délku řádků, pokud budete důslední a vaše limity řádků budou rozumné (500 znaků není… běžně se používá a akceptuje 80 nebo 120 znaků). Názvy proměnných Názvy vašich proměnných by měly jasně naznačovat, co představují, nebo případ jejich použití. Mrtvý/testovací kód Snažte se neposílat kód, který je plný ladicích tiskových příkazů nebo velkých komentovaných kusů kódu. Snižuje to čitelnost a odvádí pozornost od kódu, který bude skutečně běžet v produkci. Návrh Snažte se navrhovat kód a projekty tak, aby byly přiměřeně modulární. Funkce o 5000 řádcích jsou obecně známkou špatného návrhu a později vám způsobí bolesti hlavy.

Tady je průvodce styly Google, který vám může být užitečný.

Pohoda

Tady je několik tipů pro pohodu.

.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.