Hajussüsteemid 2021
Ainekoodid: ITI0215 |
Sisukord
- 1 See on 2021 aasta arhiiv, mitte hetkel kehtiv materjalide kogu
- 2 Eksamid ja tulemused
- 3 Aeg, koht
- 4 Lingid ja saidid loengute, prakside ja hinnete jaoks
- 5 Hindamine
- 6 Nädala ülesanded
- 7 Praktikumid
- 8 Loengukava
See on 2021 aasta arhiiv, mitte hetkel kehtiv materjalide kogu
Eksamid ja tulemused
Siin on kursuse tulemused kõigi kolme eksami järel:
Hajussüsteemide tulemused 2021
Eksamid teeme praeguse plaani järgi füüsiliselt kohapeal. Eksamiaegu on traditsiooniliselt kolm. Kui mõni tudeng on nakatunud või on muu tõendatud põhjus, miks ei saa kohale tulla, teeme erandina lisaks kaugtööna kombineeritud kirjalik/suulise eksami neile, kes seda vajavad.
Kursuse algusepoole antud kohustuslikud ülesanded lähevad arvesse plusspunktidena, mitte miinustena: õppejõud teeb neist enne eksameid kokkuvõtte ja kui oled kõik antud tööd teinud, saad kuni 10 lisapunkti.
Kõik kolm eksamiaega on kell 11:00 ja toimuvad IT kolledzhi auditooriumis ICO-314:
- 18 mai
- 25 mai
- 1. juuni
Eksamiks on kokku aega 2.5 tundi, aga tõenäoliselt saate hakkama ca 1.5 tunniga.
Teemad, mille kohta küsimused eksamil tulevad:
- Protokollid XML-RPC, Rest, SOAP baasosad
- P2P süsteemid, sh klassikalised ning Chord, Bittorrent ja TOR
- Distributed ledger ja Bitcoin
- Paralleelsus, konsensus, lukustamine, optimistlik paralleelsuskontroll
- Fork, thread, shared memory
- Andmebaaside hajutamine ja koondamine: eesmärgid ja põhimeetodid
- Riigi infosüsteem ja Xtee
Sul on vaja nende teemade põhimõtteid/protokolle/algoritme selgitada ja mõnel puhul tuua ise väikeseid näiteid.
Aeg, koht
Semester: kevad
Tulemus: eksam
Hindamise meetod: praktikumide tulemused (40%) pluss iganädalased ülesanded (10%) ja eksam (50%)
Loeng: neljapäeval kell 10:00-11:30, esialgu videoloeng ja hiljem (kui piirangud leevenevad) ruumis U03-103
Praktikum: neljapäeval kell 12:00-13:30, esialgu telco ja hiljem (kui piirangud leevenevad) ruumis ICT-121/122
Lingid ja saidid loengute, prakside ja hinnete jaoks
Please join the teams site for the course : you may need the teams joining code: 4raxxh5
The practice sessions the same day at 12:00 will be in the same teams space.
NB!In case you run into trouble (cannot join or no sound etc) please write via fb messenger or email tanel.tammet at taltech.ee.
Olemas on ka hinnete sait regamiskood yzwnJ2pL Esialgu seal muidugi hindeid ei ole.
Loengusalvestused leiad teamsist või siin lehel allpool eraldi loengute järel.
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.
Nagu eelnevas kirjas, annavad hindamisel 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 ülesdade üles. Juhul kui sul on mitu faili, siis palun zipi need enne kokku.
Praegu aktiivseid nädalaülesandeid ei ole - need tulevad millalgi lähitulevikus.
Kolmanda nädala ülesandeks (11 veebruari loengu järel) on käsitöö: jsonis data esitamine xml-rpc ja SOAPi kujul. Sul on jsoni list [1, 3.1, "kala"] ja on vaja saata see miskile urlile postiga kahel eri viisil (a) XML-RPC esituses (b) SOAPi mingis esituses. Konkreetselt kirjutagi selle listi esitus (a) XML-RPC kujul (b) SOAPi kujul ja emaili mõlemid õppejõule: tanel.tammet at taltech.ee, pane emaili pealkirja sisse sõna hajussüsteemid.
Pane tähele, et XML-RPC tahaks saada funktsiooni calli nime. Jsoni datas seda pole, leiuta seega ise mingi dummy nimi.
Pane tähele, et SOAP-i kujul esitus ei ole kuidagi fikseeritud/üheselt selge. Pane oma soapi sõnumisse miski header ja sinna mingi mõistlik pisike näite-sisu. Listi ja data kodeerimiseks tee veidi uuringuid: googelda, et kuidas on kombeks soapis liste esitada (seal ei ole ühte kohustuslikku viisi, vaid pigem soovitavad) ja kuidas on kombeks tüüpe (meil int, float ja string) esitada. Kasuta neid leitud soovituslikke/konventsionaalseid viise. Soapis on võimali asju kodeerida nii rpc kujul (st dummy funktsiooni nimi tuleks leiutada) kui ilma rpc-ta. Soovitav on kasutada ilma rpc-ta stiili, sest meil ju funktsiooni pole teada.
Veel on soovitus mitte üritada tegeleda WSDLi või igasugu WS-I või muude erikeeruliste täeindustega: kirjuta nö basic soapi sõnum ilma taoliste lisadeta.
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. Grupitöö 1-3 inimest.
- 2 praks: distributed ledgeri edasiarendus, mikroteenuste edasiarendus või videorakendus.
Praktikumitööde tähtajad on:
- 1. praktikumil - 25. märts 2021, eelistatav kui saaks praktikumitöö esitatud varem.
- 2. praktikumil - 13. mai 2021. Kaitsmine toimub nii 13 kui 14 mail et kõik selle enne auditoorse õppetöö lõppu esitatud saaksid. Link 2. praktiku kaitmisele registreerumiseks on https://forms.gle/zZnBedSPqpPd8CKF6. Kaitsmiste ajakava näed siit: https://docs.google.com/document/d/1HOQE7pXbTjhtiGdAUytOnGeR0gj0aGPm7KTf1-rClf4/edit?usp=sharing
Praktikumid ja tööde arvestamise teeme Teamis või muus chatis online standardsel praktikumiajal.
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.
- Järgi ajakava
- Kui aeg jõuab sinu grupini, võtab Martini sinuga ülesse videokõne Teamasis. Teamsi-kõnes peaksid kohal olema kõik meeskonna liikmed.
- Kui tekib tehnilisi probleeme, kirjuta Martinile otsesõnumiga Teamsis, mis probleem tekkis.
Kui sa parasjagu ei taha praktikumitööd esitada, vaid lihtsalt nõu küsida, siis kasuta põhimõtteliselt sama protseduuri: vaata, et Martinil oleks ligipääs repole, saada talle emailiga link ja võta üles videokõne.
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, 28. jaanuar
Link 28. jaanuari loengu salvestusele alates ca 20-st minutist (algust esialgu ei ole). Kui see link ei tööta, leiame asap alternatiivse viisi jagamiseks.
- Kohustuslikud osad lugeda:
- vikipeedia ülevaade
- loengumaterjal: pikem ülevaade eri P2P tehnoloogiatest
- TOR wikipedias
Protokollid, 4. veebruar
Salvestus teamsis, otselink siin .
- 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
Protok lõpp: quic and http fancy stuff, 11 veebruar
- Http ja json: võrgurakenduste protokollid 1 lõpuosa alates https
- Loe lisaks https kohta
- 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
Data synchronization, P2P DHT ja bittorrent, 18 veebruar
Sissejuhatus teemasse: andmete sünkroniseerimine.
DHT (distributed hash tables):
- ülevaade wikipedias
- Chord:
- Põhimaterjal - kas vanem versioon, loe kuni Ivy osani või uuem, 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:
- Põhimaterjal presentatsioon autoritelt
- Täiendavalt autorite artikkel ja detailsem presentatsioon
Bittorrent
Distributed ledger, ajatemplid ja bitcoin
Taust ja sissejuhatus distributed ledgerisse: 25 veebruar
Loeng toimub teamsi grupis: süveneme järgmistes paragrahvides antule. Alustame 10:05 sellelt otselingilt.
Videosalvestus ei õnnestunud.
Loengu käigus süvenesime Kriitiline taust blockchaini mõistmiseks teemadesse. Palun süvene neisse materjalidesse lisaks loengus räägitule.
Blockchaini funktsioneerimine: 4 märts
Baseerudes eelmise loengu taustale, uurime bitcoini näitel, kuidas blockchain tervikuna reaalselt funktsioneerib.
Kasutame seejuures hulka Blockchaini materjale.
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
Blockchaini väike lisa ja protokollide algus (REST): loeng 11 märts
Hakatuseks uurime veidi täiendavat infot blockchaini kohta. Eriti abiks oleks tudengite tähelepanekud ja küsimused.
Keerulisemat soovitavat materjali, kui konsensuseteema tundus huvitav:
- From blockchain consensus back to Byzantine consensus
- A Survey on Blockchain Consensus witha Performance Comparison of PoW, PoS and Pure PoS
Siis jätkame API protokollide teema alustusega, esimese asjana REST: materjalide jaoks vaata järgmist blokki lehel.
Andme-apid, autentimine, pilveteenused, andmete koondamine
Erinevad API-stiilid: loeng 18 märts
- rest wikipedias ja rest tutorial (vt linke all!)
- odata.org: microsoft/oasis recommendations for rest style
- api design book download or api design book (must register)
- Graphql start and graphql vs rest and similar take on rest vs graphql and wrap rest in graphql
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.
- Loe läbi terve api design book alternatiivina leiad sellelt urlilt.
- 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
- Kui sa hästi ei mäleta REST-stiili põhipointe, siis sissejuhatuseks vaata üle wikipedia jutt.
- 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
Teemad varuks
Autentimine
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
Pilvekeskkonnad
See teema jääb varuks kursuse lõpupoole, kui meil jääb aega. Vastasel korral jätame teema välja.
Suured:
Pilveteenuse tarkvara:
Näide: Azure
Google appengine, database api, google bigtable and file system stack
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: loeng 1. aprill
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.
- Soenduseks loe läbi väga praktilisi hajussüsteemide probleeme kirjeldav jutt Amazonilt (siin otselink pdf-le).
- 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. 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).
Fork ja thread: loeng 8. aprill
- 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:
- fork
- thread.
- shared memory
- Thread, Queue ja Lock Pythonis
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.
Lukustamine: 15. aprillil
Loengu annab Priit Järv: link loengusalvestusele.
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:
- Lukustamise sissejuhatav presentatsioon: räägib alustuseks praktilistest vajadustest ja põhimehhanismidest (andmebaaside paralleelsuse teemasse süveneme järgmine nädal).
- Detailsem konspekt lukustamise kohta: semafor, mutexid ja detailselt spinlockist. Loe seda aeglaselt!
- spinlocki loeng arusaamise hõlbustamiseks
- spinlocki riistvara-tuge seletav loeng
- loeng semafor vs mutex: mis on mis
Lisaks võib lugeda:
- Introduction to Transactions (slaidid)
- Sünkroniseerimisprimitiivid: slaidid
Mittekohustuslik lisalugemine:
- Konspekt pikemalt ja põhjalikumalt loengus läbitud teemadest.
Paralleelsus andmebaasides: 22. aprill
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:
- cmu videolengut mvcc kohta ja vaadata
- sinna juurde sama loengu slaide
Hajutatud andmebaasid: 29 aprill
Teemaks on 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: 6. mai
Süveneme mõlemisse teemasse: