Hajussüsteemid

Allikas: Lambda
revolutsioon

Ainekoodid: ITI0215
Aine nimed: Hajussüsteemid
Link: http://lambda.ee/wiki/Hajuss%C3%BCsteemid
Punkte: 6 EAP

Õppejõud: Tanel Tammet, praktikumijuhendaja on hetkel kokkuleppimisel
Kontakt: tanel.tammet@ttu.ee
Olemas on ka 2023 aasta materjalide arhiiv.


nb24 aprilli loeng ainult teamsis

Aeg, koht

Semester: kevad
Tulemus: eksam
Hindamise meetod: praktikumide tulemused (50%) ja eksam (50%)

Loeng: kolmapäeval 12:00-13:30 ruumis ICT-A1
Praktikum: kolmapäeval kell 13:45-15:15 ruumis ICT-A1.

Kursuse teamsi link

Katseta ka seda linki!

Plaan on teha enamik loenguid kohapeal ja väiksem osa distantsilt. Praksid toimuvad vähemalt esialgu kohapeal, ja võimalik, et osad hiljem distantsilt. Loengute ja prakside salvestused leiad altpoolt vastava loengu/praksi peatüki alt.

Kogu info, materjalid ja ülesanded on lambda lehel.


NB! Allpool olev blokkide struktuur on sarnane, kui 2023 aastal, aga mitte päris sama. Toimunud loengute materjalid ja salvestused osaliselt uuendatakse/muudetakse: kogu info veel mitte toimunud loengute ja veel mitte selgitatud/uuendatud prakside kohta on esialgne.


Hindamine

Kursuse edukaks sooritamiseks on sul vaja:

  • saada arvestatud mõlemid praktikumid
  • teha eksam tasemel vähemalt 1/3 eksami kogupunktidest.
  • saada praktikumid + eksam kokku vähemalt 50 punkti.

Kursuse hinde rehkendamisel annavad praktikumid kokku 50% kogupunktidest ning eksam 50%.

Nädala ülesanded

Mõnel nädalal antakse väike kohustuslik ülesanne: õppejõule tuleb kas saata emailiga kokkuvõte/mikroessee. Ülesanded pannakse kirja siiasamasse.

Praktikumid

Kokku on praktikumitöid 2. Kumbki praktikum täismahus tehtuna annab 20 punkti, sellele võivad lisanduda ekstrapunktid. Puudulikult tehtud töö punktiarv jääb alla 20 punkti. Hilinenud kodutöö eest saab pooled muidu saadaolevad punktid.

Praktikumitööd on järgmised:

  • 1 praks on P2P rakendus: distributed ledgeri komponent. Grupitöö 1-3 inimest. See on väga sarnane esimesele praktikumile eelmisest aastast.

Praktikumitööde tähtajad on:

  • 1. praktikumil - 20. märts 2024,
  • 2. praktikumil - 8. mai 2024.

Praktikumitöö esitamiseks tee järgmist:

  • Pane oma töö TTÜ gitlabi või avalikku githubi või gitlabi reposse.
  • Pane repo esilehele loetav ülevaade protokollidest, mida su töö kasutab, koos töö üldpõhimõtete kirjeldusega.
  • Tee nii, et juhendaja saaks seda repot lugeda: kui ei ole avalik repo, lisa ta developeriks. TTU Gitlabis peab olema developer õigustes, et koodi lugeda.

Praktikumijuhendaja on Tanel.

Loengukava

Kursus jaguneb laias laastus neljaks teemaks:

  • P2P ja protokollid (neil teemadel - pluss veidi andme-apidest- esimene praks), sh distributed ledger ehk bitcoini alustehnoloogia
  • Andme-apid ja messaging/stream processing
  • Paralleelrehkendused ja konsensus, lukustamine, sünkroniseerimine
  • Hajutatud andmebaasid, andmelaod ja X-tee ja riigi IT-korraldus

Päris hea õpiku saad tasuta alla laadida siit. Meie kursuse sisu on sellest õpikust küllalt erinev, samas on ka ühisosi. Hea mõte on lugeda soenduseks läbi jutt hajussüsteemide probleemide ühest valdkonnast (aga neid on veel hulga).

Üldist materjali ja kursusi mujalt:

http://en.wikipedia.org/wiki/Distributed_computing
http://dcg.ethz.ch/lectures/podc_allstars/index.html
http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-824-distributed-computer-systems-engineering-spring-2006/index.htm
http://www.stanford.edu/class/cs244b/

NB! Allolevad loengumaterjalid tuleviku kohta on pärit 2023 aastast, neid kursuse käigus uuendatakse ja muudetakse. Juba toimunud või antud nädala loengumaterjalid on uuendatud 2024 aasta jaoks.

Protokollid ja P2P

P2P sissejuhatus, 31. jaanuar

loengu ja praksi salvestus teamsis aastast 2023
Kohustuslikud osad lugeda:
loengumaterjal: pikem ülevaade eri P2P tehnoloogiatest
vikipeedia ülevaade
TOR wikipedias

Protokollid: 7 veebruar

Loengusalvestus aastast 2024

Kohustuslikud osad lugeda:
Http ja json: võrgurakenduste protokollid 1
Täiendavalt soovitav lugeda:
Gaffer on games: UDP vs TCP
Veidi seotud asi ad hoc networks vt ka Defendeci ja Jürgo Predeni patent
Http ja json: võrgurakenduste protokollid 1 lõpuosa alates https
Loe lisaks https kohta
Võrgunduse baasprotokollide kohta on soovitav lugeda (aga, need ei ole meie kursuse fookuses) siit: Beej's guides:

Andmekodeerimine/vahetus: http eriteemad + JSON, XML-RPC, SOAP ja sõbrad: 14 veebruar

Teamsi loengusalvestus 2024: see on vales teamsigrupis, aga täiesti nähtav.


võrgurakenduste protokollid 1 eriosad: Same origin policy, push/longpoll ja websockets
xml protokollid xml-rpc, soap ja seotud tehnoloogiad: võrgurakenduste protokollid 2
Vanad tekstid SOAPi probleemidest: veebiteenuste võlu ja valu ja s stands for simple

DHT (distributed hash tables):

Põhimaterjal: Chordi põhimõtted. Täiendavalt võib vaadata seda presentatsiooni visualiseeritud algoritmidega (ppt presentatsioonirezhiimis!) ja eriti detailideks seda presentatsiooni (seda varianti kasutame ka loengus!).
Lisaks tasuks veidi uurida artikleid wikipedia sissekande lõpus (external links)
  • Kademlia:
Materjal presentatsioon autoritelt
Täiendavalt autorite artikkel ja eriti hea detailsem presentatsioon
  • Kademliat kasutav hajutatud failisüsteem: IPFS
  • Natuke sarnase ideega mõõdukalt lihtne andmestruktuur (mitte hajutatud): skip list

Data synchronization,start distributed ledger: 21 veebruar

loengusalvestus teamsis 2024

Kaks osa: (1) DHT meeldetuletus/jätk eelmisest loengust, (2) andmete sünkroniseerimine ja plokiahela teema algus.

Sissejuhatus teemasse: andmete sünkroniseerimine.

Plokiahel:

Distributed ledger and cryptocurrencies: 28 veebruar

NB! Loeng seekord ainult teamsis, mitte audikas, siin link: loengu link kell 12, 28 veebruar


Blockchaini funktsioneerimine:

  • Jätkame eelmise loengu lõpu materjalidega.
  • Kindlasti süvene blockchaini põhimõtete demosse: vajuta üleval "Hash", "Block", "Blockchain" linkidele ja proovi igal lehel ise datat muuta ja "Mine" nupule vajutada. "Mine" teeb proof-of-worki ehk otsib random stringi (nonce) mille lisamisel datale saame mitme nulliga algava hashi. Hea mõte on vaadata ka sama saidi videosid

Huvi pärast vaata ka Guardtime AlphaBill projekti: üliskaleeritav plokiahela-süsteem.

Andme-apid ja stream processing

Stream processing, message queues ja Apache Kafka: 6. märts

Loengu annab Radu Irbe.

Loengusalvestus

Erinevad API-stiilid: 13 märts

loengusalvestus 2024


Lugemiseks:

Päris hea ülevaate leiad siit: Moesif API guide

Sul on vaja iseseisval detailsemalt tutvuda (a) REST-stiiliga ja (b) tutvuda natuke graphql päringu/vastustekeelega (need on siis kaks täiesti erinevat asja):

  • tutvuda levinumate soovitustega REST-stiilis APi-de ehitamiseks:
    • Kui sa hästi ei mäleta REST-stiili põhipointe, siis sissejuhatuseks vaata üle wikipedia jutt.
      • Põhi-idee on kasutada HTTP harilikke get, put, post "käske", et öelda, kas tahad datat, lisad datat või uuendad datat, identifitseerida data-objekte urli abil stiilis http://miski.org/data/people/25 (siin on variante), anda vigade korral tagasi HTTP veakoode, kodeerida autentimisinfot ja muud metainfot HTTP päistesse ja püüda kodeerida API päringud ja vastused võimalikult kergelt arusaadavalt.
      • Pane tähele, et viisid otsingupäringu (inimesed nimega "Jaan"), vastuste arvu (ntx max 100) ja akna/batchi (ntx alga 200-ndast), sorteerimise jne indikeerimiseks ei ole RESTi-stiilis konkreetselt soovitatud, igaüks teeb kuidas tahab: ODATA allpool pakub oma soovitusi, aga need ei ole arusaadavalt kohustuslikud või "REST" stiili osad.
    • Tutvu siin peatüki alguses juba viidatud Microsofti api design soovitustega, täiendavalt võib uurida lisadetaile
    • Hea mõte on lisaks võtta alternatiivina leiad sellelt urlilt api disaini väike raamat ja sellega tutvuda.
    • Vaata odata veidi eksootilisemaid, aga autoriteetse standardiorganisatsiooni oasis soovitusi REST stiilis API ehitamiseks, konkreetselt alusta kiirsissejuhatusega, siis loe basic tutorial ja lõpuks tutvu kiirelt pika standardidoku peatükiga 5: query options
    • Väike pure-rest/odata/cgi stiilide võrdlus
  • tutvuda lühidalt graphql-ga: tegu siis hoopis teistsuguse asjaga kui REST: graphql ei ole stiil, vaid täiesti konkreetne päringute/vastuste keel a la sql, mille töötas välja facebook:
    • Alusta wikipedia kiirülevaatest
    • Tähelepanek: graphql ülesseadmine oma data peale ei ole lihtne ülesanne: ilmselt ei jaksa sa ise programmeerida päringukeele parserit/otsimootorit jne. Levinud lahendused on seada üles Apollo server, ja progeda sinna juurde päringud oma andmebaasi, või seada üles graphql.js server ja teha sinna juurde päringud. Kumbki on suurem töö, kui lihtsa REST api ehitamine.
    • Loe läbi rest-vs-graphql jutt
    • Loe läbi grapqhl kiirtutorial (lehekülgede lõpus link järgmisele)

Vt ka suured avalikud andme-apid:

google api explorer
google api style guidelines
Andme-apide näiteid
facebook api limitations/shutdowns in 2018

Esimese praksi arvestus-seminar: 20 märts

20 märtsil teeme esimese praksi arvestuse kohe loenguajal kell 12 kohapeal! Eelistatum on esitus audikas, aga kui see ei peaks kellelgi võimalik olema, siis saame ka teamsi kasutada. Planeerime esitustega valmis saada hiljemalt kella 14:30ks.


Paralleelrehkendused ja konsensus ja reaalsed hajutatud süsteemid

Konsensus hajutatud süsteemides ja teise praktikumi sissejuhatus 27 märts

Teamsi loengusalvestus 2024


Siin blokis asume tegelema keerumakate teooria-teemade lugemisega: infovahetus ja konsensus hajutatud süsteemides, kus midagi võib rikki minna. Ehk, kuidas saavutada, et hajutatud süsteem funktsioneeriks ok, kui mingid osad on katki või kui mõni osa teeb meelega jama, et teisi segada? See on üks fundamentaalsemaid hajutatud süsteemide küsimusi üldse.

Bitcoini plokiahela mehhanism ongi üks konkreetne võimalik mehhanism konsenuse saavutamiseks mitte-üleni-usaldusväärses hajutatud süsteemis.

  • Lisaks tasub veidi vaadata kiirülevaadet konsensuseteema eri harudest (mh hea pilt) ja sarnaselt wikipedia kiirülevaadet harudest ja terminitest. Uuri kindlasti välja, mis tähendab sünkroonne/asünkroonne, partition tolerant/nontolerant, permissioned/permissionless.
  • Seejärel - põhiasjana - tööta süvenemisega läbi hea presentatsioon põhjalikumaks arusaamiseks. Sinu põhiülesanne on see presentatsioon väga aeglaselt läbi töötada ja järjest slaididest ja asjadest aru saada. Lõpupoole läheb keeruliseks. King algoritmi detaile ei pea oskama, aga põhiideest tuleks aru saada. Ca lk 73 läheb värk päris keeruliseks ja sealt edasi võid katki jätta. Abiks võib olla see coursera loeng mis juhatab sama probleemi aeglaselt sisse, aga ei jõua veel selle lahendusvariantideni. järgmine loeng selgitab juba ühte lahendusvarianti analoogiliselt powerpoindile. Kui sul rohkem huvi, siis meie kasutatud presentatsiooni autoril on põhjalik kursus hajutatud süsteemidest.

Kui jõuad ja sul tekib ekstrahuvi teema vastu, siis:

  • põhjalik õpik aastast 1993.
  • siit leiad põhjaliku kogu keerukamate artiklite lühikokkuvõtetega edasiuurimiseks (see ei ole üldse kohustuslik).

Konsensus hajutatud süsteemides jätkub: 3 aprill

Teamsi loengusalvestus 2024

Selle nädala teemaks on

Fork ja thread: 17 aprill

Loengusalvestus teamsis 2024

Fork/thread loengumaterjal: Processes_fork_thread.pptx, Processes_fork_thread.pdf.

Parallelismi baasmehhanismid tavaprogrammides, konkreetselt fork, thread ja shared memory. Uurime neid asju C/opsüsteemi tasemel: abstraktsemates keeltes kasutatakse neidsamu C/opsüsteemi mehhanisme. Sul on vaja (a) aru saada, mida need mehhanismid teevad, (b) panna käima näited:

Viimaste taustaks on kasulik vaadata korra protsesside managementi linuxis.

Näidete käimapanekuks on väga soovitav kasutada linuxit või maci: threadid ja shared memory (aga mitte fork) on olemas ka windowsis, aga ülaltoodud materjalide näited on linuxi (üldisemalt, unixi) näited. Logi sisse dijkstrasse, kasuta mõnda muud linuxi masinat, millel sulle ligipääs, või pane windows 10s käima wsl (windows subsystem for linux). Kui sul juba ei ole installeeritud C kompilaatorit, installeeri gcc või clang.

Soovitus kuulata Jim Kelleri episoodi "Moore’s Law, Microprocessors, Abstractions, and First Principles" heast ja populaarsest ai podcastist: Jim räägib mh pikemalt protsessori-sisesest parallelismist ja automaatsest branchi-ennustamisest.


Teema täpsustamisel: 24 aprill

Hajutatud andmebaaside teema on üks loenguvariant:

link 2021 loengusalvestusele: olemas

Üks seotud taust on see suur valdkond: Hajutatud andmebaaside teema lahtikirjutus ja lugemisülesanded

Lukustamine ja paralleelprotsessid: 8. mai

Loengusalvestus aastast 2023.

Selle nädala eesmärk on aru saada lukustamise baasmehhanismidest.

Lukustamine on vajalik paralleelsete protsesside juures, mis kasutavad ühist mälujuppi / muutujat, kas siis näiteks threadide ühises mäluosas või shared memorys.

Lukustamise jaoks on mitu erinevat mehhanismi ja kasutusstenaariumi ning nad vajavad veidi tuge protsessorilt spetsiifiliste atomaarsete käskude näol.

Järgmine nädal liigume lukustamise juurest edasi paralleelsusse andmebaasides: seal on jällegi hulk võimalikke probleeme ja mitmeid lahendusviise, mis alusena kasutavad baas-lukustamismehhanisme.

Loe selles järjekorras ja vaata läbi ka need kolm lühikest loengut:

Lisaks võib lugeda:

Introduction to Transactions (slaidid)
Sünkroniseerimisprimitiivid: slaidid

Mittekohustuslik lisalugemine:

Konspekt pikemalt ja põhjalikumalt loengus läbitud teemadest.

Teema täpsustamisel + eksamikonsultatsioon: 15 mai

Varuks võimalused:


2023 loengusalvestuse link: riigi IT korraldus.