Hajussüsteemid 2022

Allikas: Lambda
revolutsioon

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

Õppejõud: Tanel Tammet, Martin Verrev
Kontakt: tanel.tammet@ttu.ee
Olemas on ka 2021 aasta materjalide arhiiv.

NB! See on 2022 aasta arhiiv, mitte hetkel kasutatav materjalikogu!

See on 2022 aasta arhiiv, mitte hetkel kasutatav materjalikogu.

Eksamiajad ja tulemused

  • 17 mai kell 13 ruumis U06A-201 (kursuse loenguruum VI korpuses)
  • 24 mai kell 13 ruumis U06A-201 (kursuse loenguruum VI korpuses)
  • 1 juuni kell 12 ruumis U06A-229 (kursuse loenguruumi lähedal VI korpuses)


Siin on lõpptulemused: Hajussüsteemide 2022 tulemused.


10 mai konsultatsioon loengusaalis & teamsis

Konsultatsiooni salvestus teamsis.


NB! 6-8 bakakaitsmised, hinded õisis kolm päeva enne.


Aeg, koht

Semester: kevad
Tulemus: eksam
Hindamise meetod: praktikumide tulemused (40%) pluss iganädalased ülesanded (10%) ja eksam (50%)

Loeng: Teisipäeval 12:00-13:30 ruumis U06A-201
Praktikum: kolmapäeval kell 10:00-11:30 ruumis ICT-A1

Plaan on teha osa loengutest kohapeal (esialgu kindlasti kohapeal) ja osa distantsilt. Praksid toimuvad vähemalt esialgu kohapeal. Loengute ja prakside salvestused leiad altpoolt vastava loengu/praksi peatüki alt.

Kogu info, materjalid ja ülesanded on lambda lehel, kursuse Moodles hoitakse jooksvaid tulemusi. Moodle iseregistreerumise võti on yzwnJ2pL

Palun liitu kursuse teamsi grupiga, iseregistreerumise võti on ebzlg49.

Iganädalase teamsi meeti link .

NB! Allpool olev blokkide struktuur on põhiliselt sama, kui 2021 aastal. Toimunud loengute materjalid ja salvestused osaliselt uuendatakse/muudetakse: kogu info veel mitte toimunud loengute kohta on esialgne. Ülesanded ja praksid, välja arvatud teine praks, on up to date ja mõeldud tegemiseks :)

Serverid

Kui teie meeskonnal on vaja servereid, siis palun täitke ära vorm siin: https://moodle.taltech.ee/mod/assign/view.php?id=444470 Martin Verrev edastab serverisoovid süsteemiadministraatorile teisipäeval 22. veebruaril kell 15:00.

Linuxi ja Maci all leiad avaliku võtme failist `~/.ssh/id_rsa.pub`. Kui seda pole saad selle genereerida `ssh-keygen` käsuga. Windowsi all vaata avaliku võtme leidmiseks või genereerikmiseks seda õpetust: https://docs.acquia.com/cloud-platform/manage/ssh/generate/

Serveri tellinutele on lisatud Moodles kommentaarina selle avalik IP, sisse saate logida kasutajaga ubuntu, nt kui see on 193.40.155.11, siis sisselogimiseks kasuta ubuntu@193.40.156.35.

Serveris on lahti port 22. Muude portide kasutamiseks pead tekitama SSH tunneli. Kuidas seda teha vaata 6. praktikumi loengusalvestist ja neid materjale: https://linuxize.com/post/how-to-setup-ssh-tunneling/ ja https://www.ssh.com/academy/ssh/tunneling/example või vaata seda videot: https://www.youtube.com/watch?v=N8f5zv9UUMI

Loe ka serverite kasutamisest:

Hindamine

Kursuse edukaks sooritamiseks on sul vaja:

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

Kursuse hinde rehkendamisel annavad praktikumid kokku 40% kogupunktidest, iganädalased ülesanded 10% ning eksam 50%.

Nädala ülesanded

Mõnel nädalal antakse väike kohustuslik ülesanne: õppejõule tuleb kas saata emailiga kokkuvõte/mikroessee või laadida see Moodlesse vastava nädala ülesande juurde üles. Juhul kui sul on mitu faili, siis palun zipi need enne kokku. Moodlesse ülesselaadimise link on https://moodle.taltech.ee/mod/assign/view.php?id=446226.

Neljanda nädala ülesanne (tähtaeg 23 veebruar) on teisendada jsonis antud API päringu info XML-RPC-sse ja SOAPi.

Oletame, et sul on api http://foo.com/api, kuhu saadad jsonis päringu

{
 "product": "resistor",
 "city": "Tallinn", 
 "date": "2022-02-23",
 "resistances": [12, 3.4, 100]  
}

Ülesanded:

  • Esita seesama päring sisult võimalikult sarnasena XML-RPC kujul.
  • Tee sama, aga SOAPi kujul. Ürita kasutada sobivaid xml schema andmetüüpe. Ürita listi esitamiseks kasutada SOAPi arraysid.

Päringuvastuseid ei ole vaja välja mõelda.

Lõpuks on sul vaja saata email (pane emaili pealkirja sisse sõna hajussüsteemid), kus kirjutad mõlemid esitused ja soovi korral veidi selgitusi.



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.

  • 1 praks on P2P rakendus: distributed ledgeri komponent või anonümiseeriv võrk. Grupitöö 1-3 inimest. See on 2022 hetkel kehtiv variant.
  • 2 praks eelmisest aastast: see läheb 2022 kuigivõrd muutmisele. 2021 olid variandid distributed ledgeri edasiarendus, mikroteenuste edasiarendus või videorakendus. Mikroteenuste variandi asendame andmebaaside sünkimise variandiga.

Praktikumitööde tähtajad on:

  • 1. praktikumil - 23. märts 2021, eelistatav kui saaks praktikumitöö esitatud varem. 23. märtsti kaitsmiseks saad oma meeskonna registreerida siin: https://forms.gle/tezg6SXExSybojN16
  • 2. praktikumil - 11. mai 2021.

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 Martin saaks seda repot lugeda: kui ei ole avalik repo, lisa ta developeriks (Github: martinve, TTU Gitlab: Martin Verrev). TTU Gitlabis peab olema developer õigustes, et koodi lugeda.

2. praktikumitöö kaitsmine 11. mail Palun täida enne praktikumi algust ära see vorm: https://forms.gle/nmoHQhmp9geQmnF66, selle alusel moodustub kaitsmisjärjekord. Täpsem info on kirjas vormi juures.


Praktikumijuhendaja on Martin. Tanel assisteerib ja vajadusel asendab Martinit.

Ülesanne 2. praktikumiks

02. veebruari prakikumiks peaksite olema:

1. välja valinud esimese prakikumiülesande - kas ledgeri, anonümiseeriva võrgu või enda valitud (selle artusamiseks kirjuta Martin Verrevile otse Teamsis).
2. moodustanud 1 .. 3 liikmelise meeskonna kellega ülesannet lahendama hakkate.
3. otsustanud keeled/tehnoloogiad baasil praktikumitöid tegema hakkate.

Ülesande saab esitada Moodles kasutades seda linki: https://moodle.taltech.ee/mod/assign/view.php?id=438893

Loengukava

Kursus jaguneb laias laastus viieks teemaks:

  • P2P ja protokollid (neil teemadel - pluss veidi andme-apidest- esimene praks),
  • Distributed ledger ehk bitcoini alustehnoloogia
  • Andme-apid, autentimine, pilvekeskkonnad, andmete hajutamine ja hajutatud andmete koondamine.
  • Paralleelrehkendused
  • 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/

Protokollid ja P2P

P2P sissejuhatus, 25. jaanuar

Esimese loengu salvestus teamsi grupis (esimesed ca 10 minutit kahjuks puudu)

Kohustuslikud osad lugeda:
loengumaterjal: pikem ülevaade eri P2P tehnoloogiatest
vikipeedia ülevaade
TOR wikipedias

Protokollid: 1 veebruar

Loengu salvestused echos ja teamsis.

Kohustuslikud osad lugeda:
Http ja json: võrgurakenduste protokollid 1 (loengus kuni https, edasised osad järgmises loengus)
Täiendavalt soovitav lugeda:
Gaffer on games: UDP vs TCP ja selle jätk
Veidi seotud asi ad hoc networks vt ka Defendeci ja Jürgo Predeni patent

Http protok lõpp: quic, http2 ja http3 (fancy stuff): 8 veebruar

Loengusalvestus.

Http ja json: võrgurakenduste protokollid 1 lõpuosa alates https
Loe lisaks https kohta


Andmekodeerimine/vahetus: JSON, XML-RPC, SOAP ja sõbrad + Chord: 15 veebruar

Loengu salvestuse link.

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

Sissejuhatus teemasse: andmete sünkroniseerimine.

DHT (distributed hash tables):

ülevaade wikipedias ja hea kiirülevaade Chordist ja Kademliast.
Chord:
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)

Data synchronization continues, start distributed ledger: 22 veebruar

Loengusalvestus teamsis

Kademlia:
Materjal presentatsioon autoritelt
Täiendavalt autorite artikkel ja eriti hea detailsem presentatsioon
IPFS

Recall Bittorrent

bittorrenti protokoll ja ülevaade
täiendavalt wikipediast

Taust ja sissejuhatus distributed ledgerisse:

Loengu käigus süvenesime Kriitiline taust blockchaini mõistmiseks teemadesse. Palun süvene neisse materjalidesse lisaks loengus räägitule.

Blockchaini funktsioneerimine:

Eelmise loengu materjalidest vaata üle blockchaini demo: 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

Blockchain ja krüptorahad: 1 märts

Teamsi loengusalvestus.

Jätkame blockchaini ja krüptorahadega. Eriti abiks oleks tudengite tähelepanekud ja küsimused.

Mh vaatame hulka Blockchaini materjale.

Keerulisemat soovitavat materjali konsensuseteemal:


Blockchaini ja krüptorahade jätk: 8 märts

Loengusalvestus teamsis.

Jätkame blockchaini ja krüptorahadega. Seekord vaatame detailsemalt bitcoini datastruktuure ja teistsuguseid krüptorahasid ja sarnaseid asju.

Mh: programmid vs lihtsad ülekanded / smart contracts (ethereum, bitcoin), proof of stake vs proof of work, ja mõningaid suuremaid siit listist.

Kui jõuame, siis alustame ka API-stiilidega, mis jätkub järgmisel nädalal.

Andme-apid, autentimine, pilveteenused, andmete koondamine

Erinevad API-stiilid: 15 märts

Salvestused:

  • 2021 salvestatud: link loenguvideole (parandatud!): endiselt adekvaatne.
  • Lisaks sellele varasemale on siin uus lühike RESTi algus-sissejuhatus teamsi video, mida oleks parem vaadata ehk isegi enne 2021 aasta salvestust.
  • Loengu lõpu 20 minutit arutelu salvestus

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)

Suured avalikud andme-apid

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


Ülejõu koormus ja skaleerimine: 22 märts

Seminari vormis loeng salvestus ja loengu hajussüsteemid: skaleerimise märkmed


Teemad varuks

Autentimine

Autentimise kohta eksamil küsimusi ei tule!

See teema jääb varuks kursuse lõpupoole, kui meil jääb aega. Vastasel korral jätame teema välja.

facebook, google, pangalink.
Autentimise märkmed: facebook ja google
veebiserveri seadistamine id-kaardi jaoks ja abistavad koodijupid
taustaks id-kaardi kasutusstsenaariumid
Autentimise märkmed: mobiil-ID

Pilvekeskkonnad

Pilvekeskkondade kohta eksamil küsimusi ei tule!

See teema jääb varuks kursuse lõpupoole, kui meil jääb aega. Vastasel korral jätame teema välja.

Suured:

Pilveteenuse tarkvara:

OpenStack

Näide: Azure

Azure märkmed

Google appengine, database api, google bigtable and file system stack

Ka selle teema kohta eksamil küsimusi ei tule!

See teema jääb varuks kursuse lõpupoole, kui meil jääb aega. Vastasel korral jätame teema välja.

http://cloud.google.com/appengine/ AppEngine on nüüd osa Google Cloud platvormist

Hajutatud failisüsteemide märkmed loengust

Paralleelrehkendused

Konsensus hajutatud süsteemides: 29 märts

Teamsi loengusalvestus

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 jõuad ja sul tekib ekstrahuvi teema vastu, siis siit leiad põhjaliku kogu keerukamate artiklite lühikokkuvõtetega edasiuurimiseks (see ei ole üldse kohustuslik).

Konsensuse jätk - Raft - ning fork ja thread algus: 5 aprill

Loengusalvestus teamsis

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

Selle nädala teemaks on

  • 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.


Thread/fork ja lukustamine: 12 aprill

Loengusalvestus.

Selle nädala eesmärk on (a) jätkata thread/fork teemaga (b) 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.

Paralleelsus andmebaasides: 26 aprill

link loengusalvestusele eelmisest aastast: endiselt väga OK. Alternatiivne teamsi link (kui miskipärast esimene ei avane)

Selle nädala eesmärk on aru saada paralleelsuse kontrollist andmebaasides: mis võib valesti minna ja mis on erinevad levinud mehhanismid atomaarsete operatsioonide ehitamiseks. See värk on korraga ootamatult deep ja praktilises elus oluline. Loe läbi:

Paralleelsus andmebaasides (slaidid).
Konspekt, käsitleb teemat oluliselt põhjalikumalt kui loeng/slaidid. Loe aeglaselt!

Soovitav on täiendavalt vaadata konspektis käsitletud mvcc jaoks:


X-tee ja hajutatud andmebaasid: 3 mai

Loengusalvestus teamsis.

Teemaks on (a) X-tee (b) praktilised meetodid hajutatud andmebaaside juures (mitte siis P2P): eesmärk aru saada, (a) miks on praktilised andmebaasid vahel hajutatud ja mis see konkreetselt võib tähendada (b) mis probleemid seejuures tekivad ja kuidas neid probleeme lahendatakse, paremini või halvemini. Detailid ja lugemist on järgmisel eraldi wikilehel:

Hajutatud andmebaaside teema lahtikirjutus ja lugemisülesanded

X-tee ja e-riigi IT korraldus: 19 aprill

Loengusalvestuse link.

Süveneme mõlemisse teemasse:

Eksamikonsultatsioon