Hajussüsteemid: erinevus redaktsioonide vahel

Allikas: Lambda
Mine navigeerimisribale Mine otsikasti
 
8. rida: 8. rida:
Aine nimed: Hajussüsteemid<br>
Aine nimed: Hajussüsteemid<br>
Link:  http://lambda.ee/wiki/Hajuss%C3%BCsteemid<br>
Link:  http://lambda.ee/wiki/Hajuss%C3%BCsteemid<br>
Punkte: 6 EAP<br><br>
Punkte: 6 EAP<br>
Õppejõud: Tanel Tammet, Martin Verrev<br>
Õppejõud: [https://www.facebook.com/tanel.tammet Tanel Tammet] tanel.tammet@ttu.ee<br>
Kontakt: tanel.tammet@ttu.ee<br>
Praktikumijuhendaja: Martin Verrev<br>
Olemas on ka [[Võrgurakendused II|2019 aasta materjalide arhiiv]].
Olemas on ka [[Hajussüsteemid 2025|2025 aasta materjalide arhiiv]].
</td>
</td>
</tr>
</tr>
</table>
</table>


= Eksamitulemused =


Siin:
* [[Esimese (27 mai) hajussüsteemid 2026 eksami tulemused]]
* [[Teise (1 juuni) hajussüsteemid 2026 eksami tulemused]]
* [[Kolmanda (8 juuni) hajussüsteemid 2026 eksami tulemused]]


= Eksamiks konsultatsioonid =


= <font color="red">Prakside lõplik ülevaatamine ja eksamikorraldus</font> =
18. mai eksamikonsultatsioon oli plaanis ainult teamsis, mitte auditooriumis, kuid tehnilistel põhjustel ei õnnestunud.


<!--
Selle asemel:  
Prakside ülevaatamise teeme kaugtööna neljapäeval, 14. mail. Alustame kell 8:15 paralleelselt Martini ja Taneli poolt (osad grupid suhtlevad Martiniga, osad Taneliga) ja jätkame kell 10:00.


Kella 10-ne sessioon on zoomis,
(a) väike salvestuse teamsi, teemaks siis eksamikorraldus, ülesanded jne: [https://livettu.sharepoint.com/:v:/r/sites/Hajusssteemid2026/Shared%20Documents/General/Recordings/Eksami%C3%BClevaateks%20salvestus-20260520_081530-Meeting%20Recording.mp4?csf=1&web=1&e=pQYjJe&nav=eyJyZWZlcnJhbEluZm8iOnsicmVmZXJyYWxBcHAiOiJTdHJlYW1XZWJBcHAiLCJyZWZlcnJhbFZpZXciOiJTaGFyZURpYWxvZy1MaW5rIiwicmVmZXJyYWxBcHBQbGF0Zm9ybSI6IldlYiIsInJlZmVycmFsTW9kZSI6InZpZXcifX0%3D salvestus siin], asub kursuse teamsi-salvestuste kataloogis.


* link: https://us04web.zoom.us/j/79768182601?pwd=UmhXUEY0TmpUMjl5b0hLRXNYTnRoQT09 ja
(b)meil olid ka väikese ekstra-teamsi 20. ja 25. mail kell 10:00:
* password: kala


Tanel räägib Tanel eksamikorraldusest ja teeme esialgsesse vajadusel muutusi.
* [https://teams.microsoft.com/meet/389598994335128?p=XBih7Eos2RrsfIHiM8 eksamikonsultatsioon] 20. mai kell 10:00-10:30
-->
* [https://teams.microsoft.com/meet/380607922335173?p=C39x1ZFCPIwdpA0ZKP eksamikonsultatsioon] 25. mai kell 10:00-10:30


Eksamite plaan on järgmine:
= Eksamikorraldus ja materjalid õppimiseks =


Eksamid toimuvad sel aastal ainult kaugtööna: eksami algusajaks paneb õppejõud küsimused/ülesanded siia wikilehele ning kolme tunni jooksul tuleb saata emailiga vastused. Eksamile registeeruda ei ole vaja. Ajad on:
Eksamiks on kokku aega 2.5 tundi, aga enamik peaks saama hakkama ca 1.5 tunniga.


* 21 mai : kell 10 <!-- <font color="red">Küsimused</font>: [[Hajussüsteemide eksam 21 mai 2020]] -->
Eksam on kirjalik, samas ruumis/ajal toimub ka teadmiste formaliseerimise kirjalik eksam.
* 28 mai : kell 10
* 4 juuni : kell 10


Eksamil on kaks osa:
Eksamiks registreeruda ei ole vaja.
* Kirjalik: veebis antakse ülesanded ja nende vastused ja lahendused tuleb saata kirjalikult emailiga 3 tunni jooksul.
* Suuline: iga tudengiga tehakse peale kirjalikku osa väike skype-vestlus lühikese (ca 10 minutit) suulise eksamina.


<font color="red">NB!</font> 21. mail on plaanis suulise osaga alustada kell <font color="red">17:00</font>. Selleks ajaks paneb õppejõud siiasamasse loetelu tudengitest, kes on saatnud oma kirjaliku eksami. Loetelus märgitakse jooksvalt, kes on eksami teinud ja keda oodatakse järgmisena ühendust võtma: uuenda peale 16:00 seda lehte regulaarselt.
Allolevad punase E1-ga on eksami jaoks kõige olulisemad materjalid, E2 veidi vähem olulised.
NB! Võrreldes varasemaga on lisandunud üks E2 materjal allpool ja teine märgitud E2-ks:


Ühenduse võtmiseks kasuta eksami [[https://join.skype.com/iPzbYwwyrahD Skype linki]].
* Oluline tagapõhi: [https://en.wikipedia.org/wiki/Differential_privacy differential privacy] <font color="red">E2</font>
* [[x-tee märkmed loengust]] <font color="red">E2</font>


Kui sulle kella 17:00 järgne aeg üldse ei sobi, palun kirjuta päeva jooksul tanel.tammet@taltech, mis oleks järgmine sobiv täistund täna alates 18:00 või kui täna ei sobi üldse, siis mis oleks järgmine sobiv aeg homme, reedel.
Teemad, mille kohta küsimused eksamil tulevad:


*    Protokollid http (sh veidi teada ka uuematest versioonides), https, XML-RPC, Rest, SOAP baasosad
*    P2P süsteemid, sh klassikalised ning Chord, Bittorrent ja TOR
*    Distributed ledger ja Bitcoin
*    Konsensus hajutatud süsteemides.
*    Fork, thread, shared memory
*    Lukustamine, transaktsioonid
*    Xtee
*    Misasi on diferentsiaalprivaatsus


[[Hajussüsteemide eksamiks õppimine]]
Sul on vaja nende teemade põhimõtteid/protokolle/algoritme selgitada ja mõnel puhul tuua ise väikeseid näiteid.


= Loengud ja seminarid piiranguajal =
Ülaltoodud teemade küsimused tulevad ainult asjadest, mida on loengus ja märgistatud materjalides käsitletud. Enamasti on lisaks loengusalvestusele allpool nende jaoks ka konkreetsete loengute materjalid.


=== Loengud ===
Eksamil esitatakse küsimusi viie teema kohta, ja teil tuleb neist valida neli, mida vastata. Kui on vastatud viis, siis õppejõud hindab neist teemadest ikakgi nelja (valides parimate tulemustega neli), mitte ei summeeri kõiki viit.


* Loenguajaks paneb õppejõud üles senisest detailsemad soovitused, et mida kuni järgmise loenguajani iseseisvalt lugeda.
= <font color="red">NB!</font> 2. iseseisva töö kaitsmisjärjekord =
* Lisaks teeb õppejõud loenguajaks kas väikese sissejuhatava video või jutu nende asjade kohta, mida lugeda antakse, ja see video/jutt läheb vastava loengu peatükki wikis.
* Samuti antakse iga nädal väike kohustuslik ülesanne: nädala jooksul tuleb õppejõule saata emailiga kokkuvõte/mikroessee.
* Piiranguaja loengu-list on siin wikis kohe järgmise praktikumide alapeatüki järel.


* <font color="red">Värsked 7 mai</font> [http://lambda.ee/wiki/Hajuss%C3%BCsteemid#Loeng_ja_t.C3.B6.C3.B6_7._mail_ja_sellele_j.C3.A4rgneval_n.C3.A4dalal materjalid ja ülesanded]. Loe materjalid kõigepealt süvenemisega läbi. Konkreetne ülesanne ilmub siia 8. mai jooksul.
Link kaitsmisjärjekorra moodustamiseks on siin: https://forms.gle/ZF3aCboBSzfEwkgf9
Palun täitke see ära hiljemalt pühapäevaks 24.05 kell 23:59


=== Praktikumid ===
= Eksamipäevad =


Esimese praktikumi esitamistähtaja nihutame 26. märtsile. Arusaadavalt on soovitav esitada juba 16. märtsil, nii vähendame esitamisjärjekorra pikkust.
Siin on täpsustunud esimese kahe eksami ajad:


Praktikumid ja tööde arvestamise teeme Skypes või muus chatis videoga standardsel praktikumiajal, mida vajadusel pikendame.  
* 27 mai, kolmapäev, kell 11:00 (koos teadmiste esitamise eksamiga). Auditoorium NRG-226.
* 1 juuni, esmaspäev: eraldi eksamiajad hajussüsteemide (11:00) ja teadmiste esitamise (14:00) jaoks. Auditoorium SOC-211a.
* 8 juuni, esmaspäev: kell 11:00 (koos teadmiste esitamise eksamiga). Auditoorium ICT-315.


Praktikumitöö esitamiseks tee järgmist:
Eksamiks registreeruda ei ole vaja.
* 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.
* Saada Martinile martin.verrev@gmail.com email -- enne kaitsmist -- kuhu Subject reale kirjuta "Hajussüsteemid praktikum" ja pane kirja sisse grupi liikmed ja link sinu repole.
* Praktikumiajal jälgi seda linki [[Hajussüsteemide praktikumi järjekord]]. Seal on kirjas, mis grupid on kaitsnud ja millised järgmisena kaitsevad. Uuenda iga paari minuti tagant seda lehte, kuni järjekord jõuab sinu grupini.
* Kui järjekord jõuab sinu grupini, võta Martiniga üles videokõne (Skype: martin.verrev Zoom: https://us04web.zoom.us/j/4988482784 Hangouts: martin.verrev@gmail.com)
* Kui tekib tehnilisi probleeme, kirjuta Martinile martin.verrev@gmail.com, 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.
<!--
 
= <font color="red">NB!</font> 11. mai loengu asemel iseõpe =
=== Loeng ja töö 19. märtsil ja sellele järgneval nädalal ===
 
Sinu ülesanne on iseseisvalt tutvuda detailsemalt REST-stiiliga ja 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 [https://en.wikipedia.org/wiki/Representational_state_transfer 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 [https://docs-apis.apigee.io/files/Web-design-the-missing-link-ebook-2016-11.pdf api design book] alternatiivina leiad [https://pages.apigee.com/eBook-Web-API-Design-The-Missing-Link-reg.html?int_source=resources-main&int_medium=website&int_campaign=ebook&int_content=web-api-design-missing-link sellelt urlilt].
** Vaata [https://www.odata.org/getting-started/ odata] veidi eksootilisemaid, aga autoriteetse standardiorganisatsiooni oasis soovitusi REST stiilis API ehitamiseks, konkreetselt alusta [https://www.odata.org/getting-started/understand-odata-in-6-steps/ kiirsissejuhatusega], siis loe [https://www.odata.org/getting-started/basic-tutorial/ basic tutorial] ja lõpuks tutvu kiirelt [http://docs.oasis-open.org/odata/odata/v4.0/odata-v4.0-part2-url-conventions.html pika standardidoku] peatükiga 5: [http://docs.oasis-open.org/odata/odata/v4.0/errata03/os/complete/part2-url-conventions/odata-v4.0-errata03-os-part2-url-conventions-complete.html#_Toc453752356 query options]
* 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 [https://en.wikipedia.org/wiki/GraphQL 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 [https://www.apollographql.com/docs/apollo-server/getting-started/ Apollo server], ja progeda sinna juurde päringud oma andmebaasi, või seada üles [https://github.com/graphql/graphql-js graphql.js] server ja teha sinna juurde päringud. Kumbki on suurem töö, kui lihtsa REST api ehitamine.
** Loe läbi [https://phil.tech/api/2017/01/24/graphql-vs-rest-overview/ rest-vs-graphql] jutt
** Loe läbi [https://graphql.org/learn/ grapqhl kiirtutorial] (lehekülgede lõpus link järgmisele)
* kirjutada ca üks lehekülg vabas vormis ülevaadet (a) sinu jaoks uutest/huvitavamatest või vastupidi, kahtlusi tekitavatest soovitustest, mida RESTI kohta lugesid, (b) oma kogemustest REST stiilis API ehitamisest või grapqhl kasutamisest, kui oled seda teinud: kas/milleks oled seda teinud ja kuidas päringud/vastused välja nägid (näited oleks ideaalsed) ja saata see hiljemalt 25. märtsiks õppejõule emailiga tanel.tammet@ttu.ee, panes Subject rea algusse sõna "Hajussüsteemid".
 
 
=== Loeng ja töö 26. märtsil ja sellele järgneval nädalal ===
 
Sellel nädalal asume tegelema keerumakate teooria-teemade lugemisega: infovahetus ja <b>konsensus hajutatud süsteemides</b>, 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ühikest juttu, mis seletab, misasi on [https://coincentral.com/byzantine-generals-problem/ Bütsantsi kindralite probleem] (videod selle lõpus ei ole kohustuslikud)
 
* Järgmisena loe läbi väga praktilisi hajussüsteemide probleeme kirjeldav [https://aws.amazon.com/builders-library/challenges-with-distributed-systems/ jutt Amazonilt] (siin [https://d1.awsstatic.com/builderslibrary/pdfs/challenges-with-distributed-systems.pdf otselink pdf-le].
 
* Seejärel - põhiasjana - tööta süvenemisega läbi [http://www.di.univaq.it/~proietti/slide_algdist2010/5-Consensus.ppt hea presentatsioon põhjalikumaks arusaamiseks]. Sinu põhiülesanne on see presentatsioon <b>väga aeglaselt</b> 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 [https://www.coursera.org/lecture/cloud-computing/3-1-the-consensus-problem-pvqla see coursera loeng] mis juhatab sama probleemi aeglaselt sisse, aga ei jõua veel selle lahendusvariantideni. [https://www.coursera.org/lecture/cloud-computing/3-2-consensus-in-synchronous-systems-71ysl järgmine loeng] selgitab juba ühte lahendusvarianti analoogiliselt powerpoindile.
 
* Lõpetuseks saada, nagu eelmisel nädalal, aadressile tanel.tammet@taltech.ee väike jutt (subject line "Hajussüsteemid"), kus räägi (a) kas oled taoliste probleemidega kunagi kokku puutunud (tõenäoliselt ei ole, aga mine tea) (b) mis olid huvitavamad või ootamatumad asjad, mis sulle materjalist meelde jäid.
 
Kui jõuad ja sul tekib ekstrahuvi teema vastu, siis [https://blog.acolyer.org/2015/03/01/cant-we-all-just-agree/ siit leiad] põhjaliku kogu keerukamate artiklite lühikokkuvõtetega edasiuurimiseks (see ei ole üldse kohustuslik).




11. mail loengut ei toimu: vaata läbi allpool 11 mai juures toodud varsem loengusalvestus suurte süsteemide hajutatud skaleerimisest wise näitel.
-->
<!--
<!--
Sirvi [https://arxiv.org/abs/2003.02320 seda väga põhjalikku artiklit] knowledge graphidest: pdfi lingi leiad ülalt paremalt. Tervikuna sa seda tõenäoliselt lugeda ei jõua, aga saad ettekujutuse teemadest ja lähenemistest.
-->
-->
<!--
<!--
= <font color="red">NB! 5. märtsi loeng jääb ära</font> =
Endiselt on nüüd ja edaspidi praksid IT kolledzhis ICO-316, mitte Mektorys.
 
NB! 5. märtsi loeng jääb ootamatutel põhjustel ära.
-->
-->
<!--
= <font color="red">NB! 13 aprill iseõpe loenguvideo ja materjalidega</font> =


13. aprillil tavalist loengut ei toimu. Tuleb (a) vaadata varasemat loenguvideot ja lugeda materjali (b) teha ise nädalaülesanne. Vaata allolevat 13 aprilli blokki, kus mh [https://echo360.org.uk/media/f80715c5-3632-410b-b331-209a4c6289af/public Priidu loenguvideo] ja muud materjalid.


=== Loeng ja töö 2. aprillil ja sellele järgneval nädalal ===
Vt ka siin all "nädala ülesanded" blokki: seal on uus ülesanne konkreetselt selle nädala teema kohta.
-->


Selle nädala teemaks on parallelismi baasmehhanismid tavaprogrammides, konkreetselt fork,
= Aeg, koht =
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.


* [http://www.csl.mtu.edu/cs4411.ck/www/NOTES/process/fork/create.html  fork]
Semester: kevad<br>
* [https://computing.llnl.gov/tutorials/pthreads/ thread].
Tulemus: eksam<br>
* [http://www.cs.kent.edu/~ruttan/sysprog/lectures/shmem/shmem.html shared memory]
Hindamise meetod: praktikumide tulemused (50%) ja eksam (50%)<br>


Taustaks on kasulik vaadata korra [https://www.tecmint.com/linux-process-management/ protsesside managementi linuxis].
Loeng (Tanel): esmaspäeval 10:00-11:30 ruumis SOC-414.<br>
Praktikum (Martin): teisipäeval kell 12:00-13:30 ruumis ICO-316.<br>


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
Plaan on teha enamik loenguid kohapeal ja väiksem osa distantsilt. Praksid toimuvad vähemalt esialgu kohapeal, ja võimalik, et osad hiljem distantsilt. NB! Ei ole garantiid, et teamsi-salvestused alati õnnestuvad.
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.


Saada nädala lõpuks väike raport koos koodiga, mis käima said: kood, väljund ja väikesed seletused nende juurde. Ideaalis tee näide nii forki,
Kogu info, materjalid ja ülesanded on siinsamas lambda lehel.  
threadi kui shared memoryga, aga kui kõik need miskipärast ei õnnestu, on
ka ok. Sa ei pea ka tingimata kompileerima just ülaltoodud materjalide näiteid: väga ok on leida ise mujalt näiteid, neid modifitseerida ja katsetada.


Ülesandest sõltumatult soovitus kuulata [https://lexfridman.com/jim-keller/ Jim Kelleri episoodi "Moore’s Law, Microprocessors, Abstractions, and First Principles"] heast ja populaarsest [https://lexfridman.com/ai/ ai podcastist]: Jim räägib mh pikemalt protsessori-sisesest parallelismist ja automaatsest branchi-ennustamisest.
Palun liitu kursuse [https://teams.microsoft.com/l/team/19%3AtsyZMz2V46b91uKhTHd2ZCkrZ9jg7z_NAUfAxuzjT6M1%40thread.tacv2/conversations?groupId=f7508cf2-b882-43d4-b697-3f04573c7bb6&tenantId=3efd4d88-9b88-4fc9-b6c0-c7ca50f1db57 teamsi grupiga]: iseregistreerumise võti on q1nrfb2.


Iganädalase [https://teams.microsoft.com/meet/3625241488921?p=xuNcAp5hlNYvG2htjz teamsi loengu-meeti link].


=== Loeng ja töö 9. aprillil ja sellele järgneval nädalal ===
Iganädalase [https://teams.microsoft.com/meet/3561914989815?p=fgLPiNJJUBMDCQPOET teamsi praksi-meeti link].


Selle nädala ülesanne 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
<font color="red">NB!</font> Allpool olev blokkide struktuur on sarnane, kui 2025 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.
vajavad veidi tuge protsessorilt spetsiifiliste atomaarsete käskude näol.
<!--
= Serverid =


Järgmine nädal liigume lukustamise juurest edasi paralleelsusse andmebaasides: seal
See info on vaja 2025 aasta jaoks uuendada, hetkel võib olla vananenud:
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:
Kui teie meeskonnal on vaja servereid, siis palun täitke ära vorm siin: https://moodle.taltech.ee/mod/assign/view.php?id=444470


* [[Media:Locking_v2.ppt|Lukustamise sissejuhatav presentatsioon]]: räägib alustuseks praktilistest vajadustest ja põhimehhanismidest (andmebaaside paralleelsuse teemasse süveneme järgmine nädal).
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/
* [[Media:na2_sync.pdf|Detailsem konspekt lukustamise kohta]]: semafor, mutexid ja detailselt spinlockist. Loe seda <b>aeglaselt</b>!
* [https://www.youtube.com/watch?v=cEcNLfXEaZs&t=2s spinlocki loeng] arusaamise hõlbustamiseks
* [https://www.youtube.com/watch?v=yB8sm-pwvZo spinlocki riistvara-tuge seletav loeng]
* [https://www.youtube.com/watch?v=8wcuLCvMmF8&t=440s loeng semafor vs mutex]: mis on mis


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 <code>ubuntu@193.40.156.35</code>.


=== Loeng ja töö 16. aprillil ja sellele järgneval nädalal ===
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


Selle nädala ülesanne on aru saada paralleelsuse kontrollist andmebaasides:  
Loe ka [[Vorgurakendused 2 2022 kevad serveritest | serverite kasutamisest]]:
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 mõlemid materjalid:


* [[Media:11-transactions.pdf|Introduction to Transactions (slaidid)]] alustuseks.
= Hindamine =
* [[Media:na2_ccdb.pdf|Konspekt]], käsitleb sama teemat oluliselt põhjalikumalt kui eelnevad slaidid. <b>Loe aeglaselt</b>!


Soovitav on täiendavalt vaadata konspektis käsitletud mvcc jaoks:
Kursuse edukaks sooritamiseks on sul vaja:


* [https://www.youtube.com/watch?v=GILqZvxD6_g&t=3536s cmu videolengut] mvcc kohta ja vaadata
* saada arvestatud mõlemid praktikumid
* [https://15445.courses.cs.cmu.edu/fall2018/slides/19-multiversioning.pdf sinna juurde sama loengu slaide]
* teha eksam tasemel vähemalt 1/3 eksami kogupunktidest.
* saada praktikumid + eksam kokku vähemalt 50 punkti.


Eelmise nädala koduülesanne jäi ära, sest järgmine koduülesanne puudutab samavõrd mõlemit teemat:
Kursuse hinde rehkendamisel annavad praktikumid kokku 50% kogupunktidest ning eksam 50%.
<!-- NB! Eksamile võtta kaasa pildiga dokument. -->


<b>Selle nädala koduülesanne</b> on ise koostada programm, mis teeb
The materials below marked with the red <font color="red">E1</font> are the main materials for the exam, while <font color="red">E2</font> materials will also come up, but less and/or in a simpler form.
paralleeltööd ühise ressursi kallal, aga lukustamist või atomaarseid operatsioone ei kasuta, ning seetõttu
tekivad vahel vead. Õppejõule tuleks saata programmi kood ja arusaadava jutuna ülevaade, mis juhtus: kui sageli vead tekkisid ja mis sul oli vaja teha, et sa vea tekkimiseni tegelikult jõuaks. Käima ma programme ei pane, aga vaatan lühidalt pilguga üle, et mismoodi on asi lahendatud. Programmeerimiskeel on seega vaba ja installeerimisõpetusi pole vaja. Eriti huvitav oleks, kui jõuad katsetada selle programmi variante ja teha väikese kokkuvõtte, mis puhul vigu sagemini tuli ja mis puhul harvemini (see "eriti huvitav" osa ei ole kohustuslik).


Võid ehitada oma programmi eelmise nädala (madala taseme lukud) või selle nädala (atomaarsed andmebaasioperatsioonid) näidete peale. Võid otsida veebist näiteid. Üks võimalus, kuidas asja realiseerida: tee ühiskasutuses suur arvumassiiv ja lase käima kaks parallelset protsessi või threadi, mis mõlemid käivad massiivi läbi ja suurendavad massiivi elemente (st loeb elemendi, liidab arvu ja salvestab elemendi). Võib ilmneda, et kui mõlemid oma töö lõpetavad, siis tulemusena ei ole mõni massiivi element ootuspäraselt kahe suurendamise võrra suurenenud (sest lugemine-liitmine-salvestamine ei ole atomaarne). Seda peaks sinu programm siis protsesside/threadide lõppemise järel kontrollima. Andmebaaside jaoks leiad analoogilised näited: viimase korral pead muidugi jälgima, et andmebaasi atomaar-operatsioonid ei sellisena ei rakenduks.


On väga tõenäoline, et vigu esialgu ei ilmnegi. Siis püüa oma programmi nii modifitseerida, et vahel ikkagi ilmneks (näiteks, tee rohkem paralleelprotsesse, käivita kogu tegevust väikse massiivi peal, aga väga palju kordi, kuni viga tekib, kontrolli, et ei kasutataks andmebaasi paralleelsus-mehhanisme (näiteks [https://www.postgresqltutorial.com/postgresql-python/transaction/ pythoni andmebaasiteegid] võivad vaikimisi alustada transaktsioone ilma, et sina neid ise lisaks) vms).
<!--  
= Nädala ülesanded =


=== Loeng ja töö 23. aprillil ja sellele järgneval nädalal ===
<font color="red">Uus</font> nädalaülesanne, tähtaeg 21 aprill. Seekord on ülesanne veidi keerulisem, aga vabatahtlik ja annab ühe lisapunkti.


Selle nädala teemaks on hajutatud andmebaasid: eesmärk aru saada, (a) miks on 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. Lugemisülesanded on järgmisel eraldi wikilehel:
Sul on vaja koostada eksperimentaalprogramm, mis demonstreerib, et liitmine ei ole atomaarne operatsioon. Ehk siis, kui x=10 ja siis teed x=x+20,  
siis tulemus ei pruugi olla 30. See saab juhtuda siis, kui sul on kaks reaalselt paralleelselt jooksvat threadi, millel mõlemil ligipääs muutujale x, ning kumbki thread tegutseb xi muutmisega. Selleks, et shanss oleks reaalne, peavad nad seda muutmist pidevalt tegema, ja mingi ajaperioodi jooksul on tõenäosus, et mõni liitmine läheb valesti.


[[Hajutatud andmebaaside teema lahtikirjutus ja lugemisülesanded]]
Arusaadavalt on sul vaja kasutada piisavalt low-level keelt, mis samas lubab threade kasutada (või siis forke või lihtsalt kaks eraldi käivitatavat programmi,
aga sel juhul peab x olema shared memorys).


Ülesanne on see nädal suhteliselt lihtne: kirjuta väike jutt ja saada, nagu varem, õppejõu emailile: jutus vasta (a) kas oled mingit sorti hajutatud andmebaasiga kokku puutunud ja kui, siis mis asi oli ja mis seal toimus, (b) selgita oma parema arusaamise järgi, kas saaks enamust riigi ametlikke registreid ja andmebaase (isikud, kinnisvara, autod, ehitised, raha liikumine jne jne) hoida põhimõtteliselt ühes suures andmebaasis ja kui seda saaks teha, siis milliseid positiivseid aspekte ja milliseid probleeme see kaasa tooks.
Sul on vaja ka välja mõelda, kuidas tuvastada, et liitmine on valesti (näiteks, mingi liitmiste ahela lõpptulemus ei ole oodatav). NB!
* Optimeerivad kompilaatorid võivad sinu koodi põhjalikult segi pöörata, ole tähelepanelik!
* See, et teine thread lihtsalt muudab xi suvalt ära (a a la x=100, siis teeme x=100+10 ja x on 110, siis teine thread muudab xi 120ks) ei ole OK näide.


=== Loeng ja töö 30. aprillil ja sellele järgneval nädalal ===


Teemaks on X-tee, ehk eesti e-riigi põhi-infrastruktuur. X-tee on API-süsteem asutus-asutus IT süsteemide otsesuhtluseks (P2P), kus kõik kasutavad samu põhimõtteid ja on olemas väike keskne kontrolli/turvamissüsteem.
Sinu ülesanne on eksperimenteerida, kuni taoline viga tekib, ja tuvastada umbkaudne tõenäosus, et ta mingi konkreetse ajaühiku jooksul vea annab.
-->
<!--
Esimene nädalaülesanne, tähtaeg 9. märts: erinevate API-stiilide väike harjutus.


Õppejõule saatmise ülesannet sel nädalal ei ole. Tööta ise läbi järgmised materjalid:
Võtame wikipedia näite XML RPC callist:
<pre>
<?xml version="1.0"?>
<methodCall>
  <methodName>examples.getStateName</methodName>
  <params>
    <param>
        <value><i4>40</i4></value>
    </param>
  </params>
</methodCall>
</pre>


Esimese asjana
Sinu ülesanne on konverteerida see call neljale erinevale kujule. Iga kuju on lihtsalt tükk post-käsuga saadetavat teksti või (viimase punkti jaoks) URL koos argumentidega. Ühegi punkti jaoks ei ole olemas "ühte õiget" viisi, neid saab kõiki teha mitmel moel.
* loe <b>süvenemisega</b> läbi lühikesed [[x-tee märkmed loengust]]: mis asi on ja mis on põhilised arhitektuuripunktid.
* vaata [https://www.ria.ee/et/riigi-infosusteem/andmevahetuskiht-x-tee.html riigi ametlikku X-tee lühiülevaadet] sh kindlasti [https://www.x-tee.ee/factsheets/EE/ kasutusstatistika] ja [https://logs.x-tee.ee/visualizer/EE/ fancyd kasutus-seosed] (mõlemid viimased on versioon 6 jaoks, samas on ka vanem versioon kasutusel).
* Andres Küti kuueminutist videot [https://www.youtube.com/watch?v=WDk4Ik41IDs X-tee põhipointidest]
* ja sirvi kiirelt läbi [https://blog.ria.ee/sissejuhatus-x-teesse-osa-1/ pikem kolmeosaline ülevaade] X-teest Anto Veldrelt.


Järgmisena vaata läbi mõõduka süvenemisega selles järjekorras:
* Kõige minimaalsem SOAP: nii vähe muutusi/täiendusi, kui veel võimalik, et oleks legaalne SOAP. Saatmiseks POST käsuga.
* Ansperi ja Willemsoni korralik lühike artikkel [https://research.cyber.ee/~janwil/publ/xroadares07final.pdf X-tee sisulise tehnilise ülevaatega] 
* "Normaalses" stiilis SOAP, nagu on tüüpiliselt kombeks (hulk variante, vali lihtsalt üks).
* [https://www.x-tee.ee/docs/live/xroad/pr-mess_x-road_message_protocol.html x-tee protokolli spec]: seejuures vaata <b>süvenemisega</b> näiteid peatükist [https://www.x-tee.ee/docs/live/xroad/pr-mess_x-road_message_protocol.html#annex-e-example-messages "Annex E Example Messages"]: põhiosa näites on header (seda protokoll spetsifitseeribki), edasiantav data ise on tilluke jupp lõpus Body tagi sees.
* REST: JSON postitamiseks.
* sirvi [https://cyber.ee/products/secure-data-exchange/materials/uxp-technical-whitepaper-2018.pdf UXP technical whitepaper] ehk kommertsversiooni tehnilisem ülevaade koos organisatsiooni/korralduse soovituste/põhimõtetega
* REST: GET ja parameetrid URLs.
* vaata lühidalt (tunnetuse jaoks) juhuslikke juppe [http://x-road.ee/docs/est/turvaserveri_kasutusjuhend_14.04_lts.pdf X-road security server manual (detailed)]


Kolmandaks tutvu veidi süsteemiga, mille nimi on [https://cyber.ee/products/secure-data-exchange/ UXP]: (vaata sealt ka paariminutist videot) see on AS Cybernetica eksport-kommertsversioon X-teest. Cybernetica on ka standard-X-tee autor, aga pakub lisaks kommertstoega (planeerimine, install, kohandamine jne jne) oma versiooni, mida on paigaldatud päris [https://cyber.ee/products/secure-data-exchange/references/ paljudesse riikidesse]. Muuhulgas võib olla huvitav natuke vaadata kahte screencasti UXP keskserveri konfimisest (keeruline värk): [https://vimeo.com/321936653 osa 1] ja [https://vimeo.com/321936768 osa 2].
Muuhulgas pane tähele, et kui see call datat ei salvesta, oleks sisuliselt rohkem RESTFUL kasutada GET meetodit, kui aga salvestab, siis POST meetodit. Siin ülesandes ei eelda me otseselt ühte ega teist, esita lihtsalt mõlemi variandi jaoks.
-->


Veel on oluline teada:
Ülesande vastused saada meiliga nii Tanelile kui Martinile. OK tehtud ülesande eest saab ühe lisapunkti. <!-- Seejures ei pea kõik neli punkti olema tehtud, piisab ka kolmest.-->
* X-tee promo välisriikidesse teevad paljud poliitikud
* Ametlik (vabavaralise) X-tee arendamine toimub viimastel aastatel koos soomlastega organisatsiooni "Nordic Institute for Interoperability solutions" (NIIS) poolt, nende sait on https://x-road.global ja nende hallatav/arendatav [https://github.com/nordic-institute/X-Road vabavaraline X-tee githubis] (vaata veidi ka detailsemat [https://www.youtube.com/watch?v=RV-Dq69yFVE videot] kogu asja ülespanemisest). Vaata head NIIS [https://www.youtube.com/watch?v=YWWknjpZCLs videot] asjast ja organisatsioonist. Vana mitte-maintainitav ainult-eesti repo [https://github.com/ria-ee/X-Road leaid siit].
* Seoste tekitamine riikide vahel (a la mitme eri X-tee ühendamine, nagu Eesti ja Soome vahel veidi toimub) on keeruline: Willemson ja Freudenthal Cyberist on selle kohta kirjutanud artikli [https://link.springer.com/chapter/10.1007%2F978-3-319-69284-5_8 Challenges of Federating National Data Access Infrastructures]
* Peale põhitegija [https://cyber.ee Cybernetica] oma kommertsiaalse [https://cyber.ee/products/secure-data-exchange/ UXP-variandiga] (juhtfiguurid Ansper ja Freudenthal) on veel hulk huvigruppe/firmasid, kes tegelevad X-tee kommertsiaalsete konsultatsioonide, abi, promomise, arenduse jne jne tegevustega välismaale. Vaata [https://x-road.global/xroad-world-map kaarti], kus peal valik erinevas staadiumis/erineva edukusega projekte X-tee rakendamise kohta (sellel kaardil ei ole kõiki kommerts-juurutusi):
** [https://ega.ee/ E-government academy] for-profit konsultatsioonimeeskond: e-valitsemise konsultatsioonid välismaal, ei anna ise tehnilist konsultatsiooni.
** [https://planetway.com/en/ Planetway]: Jaapanisse müügi tiim.
** Erinevad soomega seotud harud, mh väike [https://www.roksnet.com/ Roksnet]




=== Loeng ja töö 7. mail ja sellele järgneval nädalal ===
<!--
Mõnel nädalal antakse väike kohustuslik ülesanne: õppejõule tuleb kas saata emailiga kokkuvõte/mikroessee. Ülesanded pannakse kirja siiasamasse.
-->
<!-- 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.
-->


Teemaks on Eesti riigi infosüstem ja konkreetsemalt Riigi Infosüsteemide Haldussüsteem RIHA.
= Praktikumid =


* Kõigepealt loe süvenemisega läbi ja tutvu kõigi sealtoodud linkidega: <b>[[Lühiülevaade riigi infosüsteemist]].</b>
Kokku on praktikumitöid kaks. Ülesanded jaotatakse kohustuslikuks baasosaks ja valikosadeks: igaühel oma punktiarv. Kumbki praktikum täismahus (baasosa + kõik valikosad) tehtuna annab 25 punkti. Võivad lisanduda ekstrapunktid eriti hästi tehtud osade või täienduste eest. Hilinenud kodutöö eest saab pooled muidu saadaolevad punktid.
* Seejärel sirvi läbi [https://moodle.ria.ee/course/view.php?id=16 RIHA koolitusmaterjalid]: olulisematele olid lingid eelmises lühiülevaates, aga vaata kiirelt kõigile teistele materjalidele ka peale: mis seal umbes on.
* Nüüd sirvi ja uuri pikemalt [https://www.riha.ee/Avaleht RIHA]:
** püüa aru saada, mis sorti andmekogusid on rohkem, mis asutused on enam esindatud jne
** tutvu detailselt mõne väiksema andmekogu kõigi materjalidega ja samuti mõne suurema andmekogu (näiteks rahvastikuregister) materjalidega
** samamoodi uuri paari registri X-tee liideste kirjeldusi
** otsi ka erinevaid andmevälju (Riha kataloog -> Otsi andmeobjektidest nupp), näiteks "aadress", "vanus", "tegevusala")
* Kui sa ei ole varem vaadanud, siis vaata nüüd: Andres Kütt räägib, miks suured (riigi) IT projektid vahel (tihti?) nurja lähevad: [https://www.youtube.com/watch?v=e2kC0fqpV5k&fbclid= Õppetunnid suurtest IT projektidest], eeskätt sotsiaalministeeriumi kurikuulsa SKAIS2 näitel.
8. mai jooksul ilmub siia ka konkreetne koduülesanne, mille sisuks on spetsiifiliste asjade otsimine/uurimine RIHAst ja tulemustest väikese jutu/ülevaate kirjutamine.


<!--
<!--
:[https://www.ria.ee/public/publikatsioonid/x-road.jpg Big official picture of the state IT-architecture]
Õppejõu poolt praktikumides kirjutatud koodinäited on leitavad siit: https://github.com/martinve/ITI0215_25
-->
<!--
:[[Media:Ahto_xtartu.ppt|Ahto Kalja detailne ülevaade X-tee projektist aastast 2004]]
:[https://www.ria.ee/ee/x-tee.html X-road official page] <!--and [https://www.ria.ee/index.php?query=X-tee a materials query] SAMA
:[http://x-road.ee/docs/est/turvaserveri_kasutusjuhend_14.04_lts.pdf X-road security server manual (detailed)]
-->
<!--
:[http://apisuomi.fi/2014/07/soap-rest-json-and-x-road-x-tee/ X-tee from the Finnish perspective] and the [https://portal.educloudalliance.org/x-road-rest-gateway-development-initiated-github X-tee/Json gateway] and [http://www.hel.fi/palvelukarttaws/rest/ver2_en.html a nice REST api example from Finland]
-->
-->
<!--
:[https://www.ria.ee/public/x_tee/X-Road_message_protocol_4.0.1.pdf newest X-road message protocol] and corresponding [https://www.ria.ee/public/x_tee/pr-meta_x-road_service_metadata_protocol_0.7_Y-743-14.pdf metainfo protocol]
-->
<!-- :[[example algorithm for xml serialization of Python data|Example: X-road oriented Soap call tool for Python]] -->


= Aeg, koht =
Praktikumitööd on järgmised:


Semester: kevad<br>
* [[Hajussüsteemid prax 1 2026 kevad| 1 praks on P2P rakendus]]: distributed ledgeri komponent.  Grupitöö 1-3 inimest. See on sarnane esimesele praktikumile eelmisest aastast.
Tulemus: eksam<br>
Hindamise meetod: praktikumide tulemused (pool) pluss eksam (teine pool)<br>
Praktikum: neljapäeval kell 08:15-09:45 ruumis ICT-A1<br>
Loeng: neljapäeval kell 10:00-11:30 ruumis ICT-A1


= Praktilised tööd ja tähtajad =
* [[Hajussüsteemid prax 2 2026 kevad| 2 praks on faili või ledgeri konsensus hajutatud süsteemis]].


Kokku on töid 2. Kumbki praktikum täismahus tehtuna annab 25 punkti, sellele võivad lisanduda ekstrapunktid. Puudulikult tehtud töö punktiarv jääb alla 25 punkti. Hilinenud kodutöö eest saab pooled muidu saadaolevad punktid.
'''Praktikumitööde tähtajad on ''':
* 1. praktikumil - 24. märts 2026. Virtuaalse kaitsmisjärjekorra moodustamiseks täida palun see vorm: https://docs.google.com/forms/d/e/1FAIpQLScuNxm815NwwgA1ftqfvQu6x9RcnsIgg0nsMmVmcfHk95BIWg/viewform?usp=sharing&ouid=115666979704635249359


Teine praktikumiülesanne on hetkeseisuga 2019 aastast, 2020 aastal seda veidi muudetakse. Esimene praktikumiülesanne on up-to-date.
** 24. märts [https://teams.microsoft.com/meet/35901742087439?p=JOYLLXpqYojDNRgbj4 kell 11:00 kaitsmiste teamsi link]
** 24. märts [https://teams.microsoft.com/meet/399321298889734?p=ur8NG5Tw9eY6YelGm7 kell 14:00 kaitsmiste teamsi link]


* [[Vorgurakendused 2 prax 1 2020 kevad| 1 praks on P2P rakendus]]: kas distributed ledgeri komponent või anonümiseeriv võrk. Tähtaeg 26 märts (nihutatud üks nädal algsest hilisemaks). Grupitöö 1-3 inimest.  
* 2. praktikumil - 12. mai 2026. Teise praktikumi ülesandes võib  veel tulla väiksemaid muutusi.
* [[Vorgurakendused 2 prax 2 2020 kevad | 2 praks]]: Grupitöö 1-3 inimest. Tähtaeg mai keskpaik, enne auditoorse töö lõppu.


= Hindamine =
Praktikumitöö esitamiseks tee järgmist:
 
* Pane oma töö TTÜ gitlabi või avalikku githubi või gitlabi reposse.
Hindamine: praktikumid annavad kokku 50% kogupunktidest ning eksam teise 50%. Kursuse edukaks sooritamiseks on sul vaja:
* 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.
* saada arvestatud mõlemid praktikumid
* teha eksam tasemel vähemalt 1/3 eksami kogupunktidest.
* saada praktikumid+eksam kokku vähemalt 50 punkti.


NB! Eksamile võtta kaasa pildiga dokument.  
Praktikumijuhendaja on Martin Verrev.


= Loengukava =
= Loengukava =


Kursus jaguneb laias laastus viieks teemaks:  
Kursus jaguneb laias laastus kolmeks teemaks:  


* P2P ja protokollid (neil teemadel - pluss veidi andme-apidest- esimene praks),  
* P2P ja protokollid (neil teemadel - pluss veidi andme-apidest- esimene praks), sh distributed ledger ehk bitcoini alustehnoloogia
* Distributed ledger ehk bitcoini alustehnoloogia
* Paralleelrehkendused ja konsensus, lukustamine, sünkroniseerimine (selle kohta teine praks)
* Andme-apid, autentimine, pilvekeskkonnad, andmete hajutamine ja hajutatud andmete koondamine.
* Näited reaalsetest hajutatud süsteemidest
* Paralleelrehkendused
* X-tee ja riigi IT-korraldus


Päris hea õpiku saad tasuta alla laadida [https://www.distributed-systems.net/index.php/books/ds3/  siit]. Meie kursuse sisu on sellest õpikust küllalt erinev, samas on ka ühisosi.
Päris hea õpiku saad tasuta alla laadida [https://www.distributed-systems.net/index.php/books/ds3/  siit]. Meie kursuse sisu on sellest õpikust küllalt erinev, samas on ka ühisosi. Hea mõte on lugeda soenduseks läbi jutt [https://d1.awsstatic.com/builderslibrary/pdfs/challenges-with-distributed-systems.pdf hajussüsteemide probleemide] ühest valdkonnast (aga neid on veel hulga).


Üldist materjali ja kursusi mujalt:
Üldist materjali ja kursusi mujalt:
308. rida: 249. rida:
<!-- :http://www.eecs.harvard.edu/cs262/ DEAD -->
<!-- :http://www.eecs.harvard.edu/cs262/ DEAD -->
:http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-824-distributed-computer-systems-engineering-spring-2006/index.htm
: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/
:https://www.scs.stanford.edu/24sp-cs244b/
 
NB! Allolevad loengumaterjalid <b>tuleviku</b> kohta on pärit 2024 aastast, neid kursuse käigus uuendatakse ja muudetakse. Juba toimunud või antud nädala loengumaterjalid on uuendatud 2025 aasta jaoks.


== Protokollid ja P2P ==
== Protokollid ja P2P ==


===  Protokollid, 2. veebruar ===


===  P2P sissejuhatus, 30. jaanuar ===
:<b>Kohustuslikud osad lugeda</b>:


:<b>Kohustuslikud osad lugeda</b>:
:Http ja json: [[võrgurakenduste protokollid 1]] <!-- (loengus kuni https, edasised osad järgmises loengus) --> <font color="red">E1</font>
 
:<b>Täiendavalt soovitav lugeda</b>:
 
:Gaffer on games: [https://gafferongames.com/post/udp_vs_tcp/ UDP vs TCP] ja [https://gafferongames.com/categories/game-networking/ täiendavalt]
 
:Veidi seotud asi [https://en.wikipedia.org/wiki/Wireless_ad_hoc_network ad hoc networks] vt ka  <!--[http://www.eliko.ee/smart-streetlight-control-system-3/ ELIKO valgustussüsteemid] DEAD ja --> [http://www.freepatentsonline.com/8966046.html Defendeci ja Jürgo Predeni patent]
 
:Http ja json: [[võrgurakenduste protokollid 1]] lõpuosa alates https
:Loe lisaks [https://medium.com/@animeshgaitonde/how-https-works-part-1-building-blocks-64f9915b1f39 https kohta]
 
:<b>Võrgunduse baasprotokollide</b> kohta on soovitav lugeda (aga, need ei ole meie kursuse fookuses) [https://beej.us/guide/ siit: Beej's guides]:
 
===  P2P sissejuhatus, 9. veebruar ===


:[http://en.wikipedia.org/wiki/Peer-to-peer vikipeedia ülevaade]
: loengumaterjal: [[Media:P2p_overview.ppt|pikem ülevaade eri P2P tehnoloogiatest]] <font color="red">E1</font>
:[http://en.wikipedia.org/wiki/Peer-to-peer vikipeedia ülevaade] <font color="red">E2</font>
<!-- :[http://www.srdc.metu.edu.tr/webpage/seminars/p2p/P2P.ppt hea paraja detailsusega sissejuhatus] -->
<!-- :[http://www.srdc.metu.edu.tr/webpage/seminars/p2p/P2P.ppt hea paraja detailsusega sissejuhatus] -->
<!-- :[http://www.cs.ucy.ac.cy/courses/EPL420/Slides/Chapter2_4ed-P2P.ppt ülevaatepresentatsioon] -->
<!-- :[http://www.cs.ucy.ac.cy/courses/EPL420/Slides/Chapter2_4ed-P2P.ppt ülevaatepresentatsioon] -->
<!-- :[http://www.it.lut.fi/comlab/ssotc/ssotc08/presentations/Lappeenranta_summer_school_Jukka_K_Nurminen.ppt alternatiivne ülevaatepresentatsioon] -->
<!-- :[http://www.it.lut.fi/comlab/ssotc/ssotc08/presentations/Lappeenranta_summer_school_Jukka_K_Nurminen.ppt alternatiivne ülevaatepresentatsioon] -->
<!-- :[http://www14.in.tum.de/personen/schmiste/dynamo08.ppt hea detailne ülevaade eri P2P tehnoloogiatest] -->
<!-- :[http://www14.in.tum.de/personen/schmiste/dynamo08.ppt hea detailne ülevaade eri P2P tehnoloogiatest] -->
: loengumaterjal: [[Media:P2p_overview.ppt|pikem ülevaade eri P2P tehnoloogiatest]]
:[http://en.wikipedia.org/wiki/Tor_%28anonymity_network%29 TOR wikipedias] <font color="red">E2</font>
:[http://en.wikipedia.org/wiki/Tor_%28anonymity_network%29 TOR wikipedias]


=== Protokollid, 6. veebruar ===
=== Andmekodeerimine/vahetus:  JSON-based tech, REST and API styles 16 veebruar ===


<!-- :[[Media:Protocols.ppt|Loengu raampresentatsioon]] -->
Old XML-based tech:
:<b>Kohustuslikud osad lugeda</b>:


:Http ja json: [[võrgurakenduste protokollid 1]] (loengus kuni https, edasised osad järgmises loengus)
<!--
:[[võrgurakenduste protokollid 1]] eriosad: Same origin policy, push/longpoll ja websockets
-->
* xml protokollid xml-rpc, soap ja seotud tehnoloogiad: [[võrgurakenduste protokollid 2]] <font color="red">E1</font>
* Väga vanad tekstid SOAPi probleemidest: [[veebiteenuste võlu ja valu]] ja [http://harmful.cat-v.org/software/xml/soap/simple s stands for simple]


:<b>Täiendavalt soovitav lugeda</b>:
Mainstream: REST, JSON, Graphql:


:[http://gafferongames.com/networking-for-game-programmers/udp-vs-tcp/ Gaffer on games: UDP vs TCP] ja [http://gafferongames.com/2015/09/12/is-it-just-me-or-is-networking-really-hard/ selle jätk]
Lugemiseks:
:Veidi seotud asi [https://en.wikipedia.org/wiki/Wireless_ad_hoc_network ad hoc networks] vt ka  <!--[http://www.eliko.ee/smart-streetlight-control-system-3/ ELIKO valgustussüsteemid] DEAD ja --> [http://www.freepatentsonline.com/8966046.html Defendeci ja Jürgo Predeni patent]


===  Protok lõpp: http fancy stuff, 13 veebruar ===
* Päris alustuseks loe süvenemisega läbi Microsofti [https://docs.microsoft.com/en-us/azure/architecture/best-practices/api-design REST api design soovitused]
* [https://en.wikipedia.org/wiki/Representational_state_transfer rest wikipedias] ja [http://www.restapitutorial.com/ rest tutorial (vt linke all!)]
* [http://www.odata.org/ odata.org: microsoft/oasis recommendations for rest style]
* [https://graphql.org/ Graphql start] and [https://blog.pusher.com/rest-versus-graphql/ graphql vs rest].


:Http ja json: [[võrgurakenduste protokollid 1]] lõpuosa alates https
Päris hea ülevaate leiad siit: [https://www.moesif.com/blog/api-guide/ Moesif API guide]
:Loe lisaks [https://medium.com/@animeshgaitonde/how-https-works-part-1-building-blocks-64f9915b1f39 https kohta]
:xml protokollid xml-rpc, soap ja seotud tehnoloogiad: [[võrgurakenduste protokollid 2]]
:Vanad tekstid SOAPi probleemidest: [[veebiteenuste võlu ja valu]] ja [http://harmful.cat-v.org/software/xml/soap/simple s stands for simple]


=== P2P DHT  ja bittorrent, 20 veebruar ===
Lihtsa REST-tüüpi APIde head näited on LLMide apid:
* [https://developers.openai.com/api/reference/overview/ openai gpt API]
* [https://ai.google.dev/gemini-api/docs google gemini API]


<b>DHT (distributed hash tables)</b>:
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):
:[http://en.wikipedia.org/wiki/Distributed_hash_table  ülevaade wikipedias]
* tutvuda levinumate soovitustega REST-stiilis APi-de ehitamiseks:
:Chord:
** Kui sa hästi ei mäleta REST-stiili põhipointe, siis sissejuhatuseks vaata üle [https://en.wikipedia.org/wiki/Representational_state_transfer wikipedia jutt].
:Põhimaterjal - kas [http://pdos.csail.mit.edu/~rtm/slides/harvard02.ppt vanem versioon, loe kuni Ivy osani] või [https://www.cse.buffalo.edu/~okennedy/courses/cse704fa2012/8.1-Chord.ppt uuem, Chordi põhimõtted]. Täiendavalt võib vaadata [https://people.eecs.berkeley.edu/~kubitron/courses/cs294-4-F03/slides/lec03-chord.ppt seda presentatsiooni] visualiseeritud algoritmidega (ppt presentatsioonirezhiimis!) ja eriti detailideks [https://www.kth.se/social/upload/51647996f276545db53654c0/3-chord.pdf seda presentatsiooni]
*** 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.  
<!-- :Täiendavalt juurde lugeda [http://www.ece.utexas.edu/~garg/f04/dist2/papers/chord.ppt chordi ülevaadet algoritmide skeemi] ja põhiteoreemidega (ilma tõestusteta) -->
*** 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.
:Lisaks tasuks veidi uurida artikleid [http://en.wikipedia.org/wiki/Chord_%28peer-to-peer%29 wikipedia] sissekande lõpus (external links)
** Tutvu siin peatüki alguses juba viidatud Microsofti [https://docs.microsoft.com/en-us/azure/architecture/best-practices/api-design api design soovitustega], täiendavalt võib uurida [https://github.com/Microsoft/api-guidelines/blob/master/Guidelines.md lisadetaile]
:Kademlia:
** Tutvu Google soovitustega: [https://google.aip.dev/1 AIP].
:Põhimaterjal [http://www.cs.uiowa.edu/~ghosh/kademlia.ppt presentatsioon autoritelt]
** Hea mõte on lisaks võtta alternatiivina leiad [https://pages.apigee.com/eBook-Web-API-Design-The-Missing-Link-reg.html?int_source=resources-main&int_medium=website&int_campaign=ebook&int_content=web-api-design-missing-link sellelt urlilt] api disaini väike raamat ja sellega tutvuda.
:Täiendavalt [https://github.com/ntoll/p4p2p/blob/master/papers/maymounkov-kademlia-lncs.pdf autorite artikkel] ja [https://www.kth.se/social/upload/516479a5f276545d6a965080/3-kademlia.pdf detailsem presentatsioon]
** Vaata [https://www.odata.org/getting-started/ odata] veidi eksootilisemaid, aga autoriteetse standardiorganisatsiooni oasis soovitusi REST stiilis API ehitamiseks, konkreetselt alusta [https://www.odata.org/getting-started/understand-odata-in-6-steps/ kiirsissejuhatusega], siis loe [https://www.odata.org/getting-started/basic-tutorial/ basic tutorial] ja lõpuks tutvu kiirelt [http://docs.oasis-open.org/odata/odata/v4.0/odata-v4.0-part2-url-conventions.html pika standardidoku] peatükiga 5: [http://docs.oasis-open.org/odata/odata/v4.0/errata03/os/complete/part2-url-conventions/odata-v4.0-errata03-os-part2-url-conventions-complete.html#_Toc453752356 query options]
<b>Bittorrent</b>
** Väike [[pure-rest/odata/cgi stiilide võrdlus]]
:[http://www.cs.uiowa.edu/~ghosh/bittorrent.ppt bittorrenti protokoll ja ülevaade]
* 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:
:[http://en.wikipedia.org/wiki/BitTorrent_%28protocol%29 täiendavalt wikipediast]
** Alusta [https://en.wikipedia.org/wiki/GraphQL 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 [https://www.apollographql.com/docs/apollo-server/getting-started/ Apollo server], ja progeda sinna juurde päringud oma andmebaasi, või seada üles [https://github.com/graphql/graphql-js graphql.js] server ja teha sinna juurde päringud. Kumbki on suurem töö, kui lihtsa REST api ehitamine.
** Loe läbi [https://phil.tech/api/2017/01/24/graphql-vs-rest-overview/ rest-vs-graphql] jutt
** Loe läbi [https://graphql.org/learn/ grapqhl kiirtutorial] (lehekülgede lõpus link järgmisele)


== Distributed ledger, ajatemplid ja bitcoin ==


Soovitav on lugeda neid materjale algusest: põhiasjad on esimestes, ning mida kaugemale edasi, seda detailsemad/spetsiifilisemad materjalid tulevad.


=== Kriitiline taust järgneva mõistmiseks ===
Vt ka suured avalikud andme-apid:


* https://en.wikipedia.org/wiki/Cryptographic_hash_function : ühtlaselt jaotuv hash, nii et kui püüad leida stringi S, et hash(S)=teadaolev_hash, siis parim viis S leidmiseks on lihtsalt random S-de katsetamine. Bitcoin kasutab [https://en.wikipedia.org/wiki/SHA-2 SHA2] hash algoritmi varianti, mis annab tulemuseks 256 bitise (ehk 32 baiti) väärtuse.
: [https://developers.google.com/apis-explorer/#p/ google api explorer]
* https://en.wikipedia.org/wiki/Merkle_tree : kirjete sidumine hashide puuna (veidi keerukam/efektiivsem, kui lihtne hashiahel). Mis on hashiahel: kui tahad siduda kirjeid K1, K2, K3, siis salvestad [K1,hash(K1)], [K2,hash(K2+eelmise hash (ehk hash(K1)))],  [K3,hash(K3+eelmise hash(ehk hash(K2+hash(K1))))], jne, kus hashi-osa node N jaoks on üldiselt hash(KN+(KN-1 hashi-osa)) ehk hash(KN+hash(KN-1+hash(KN-2+hash(KN-3+...) ...)
: [https://google.aip.dev/ google api style guidelines]
* https://en.wikipedia.org/wiki/Proof-of-work_system : arvuti sundimine mõttetut tööd tegema, et raskendada spammimist. Levinud meetod on nõuda, et hashi alguses oleks N nulli (mida suurem N, seda raskem leida). Selleks tuleb sul hash(S) asemel katsetada läbi palju hash(S+nonce) arvutusi, kus nonce on random string, kuni juhtumisi saad N nulliga algava hashi. Reaalselt kasutab Bitcoin ajas muutuvat keerukust (mida aeg edasi, seda keerulisem ülesanne), detaile vaata [https://en.bitcoin.it/wiki/Proof_of_work siit] ja [https://en.bitcoin.it/wiki/Target siit] ja [https://en.bitcoin.it/wiki/Difficulty siit].
: [[Andme-apide märkmed loengust|Andme-apide näiteid]]
* https://en.wikipedia.org/wiki/Blockchain : lihtsalt ülevaade kogu teemast
: [https://techcrunch.com/2018/04/04/facebook-instagram-api-shut-down/ facebook api limitations/shutdowns in 2018]
* [https://anders.com/blockchain/ Eelmiste asjade 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.


=== Kasulik taust laiema pildi jaoks ===
== Paralleelrehkendused ja konsensus ==


* Konsensus hajutatud süsteemides: [http://www.di.univaq.it/~proietti/slide_algdist2010/5-Consensus.ppt hea presentatsioon põhjalikumaks arusaamiseks] ([http://lamport.azurewebsites.net/pubs/byz.pdf siin on] klassikaline Bütsantsi kindralite probleemi artikkel, mis on suht keeruline)
* [https://blog.acolyer.org/2015/03/01/cant-we-all-just-agree/ Põhjalikum konsensuse-artiklite-selgituste kogu]
* RIA tellitud ja küberi koostatud [https://www.ria.ee/public/RIA/kruptograafiliste_algoritmide_elutsukli_uuring_2017.pdf eestikeelsest uuringust] lugeda alates lk 15 ptk "Plokiahelad"


=== Best intro for reading ===
=== Data synchronization, DHT, start distributed ledger: 2.märts  ===
<!--
<font color="red">NB!</font>This lecture will be the following recording from 2024 pluss self-study reading and experiments only, not in the lecture room:


* https://bitsonblocks.net/2015/09/01/a-gentle-introduction-to-bitcoin/
[http://turing.cs.ttu.ee/~tanel.tammet/dht_blockchain_intro.mp4 Recording]
* https://bitsonblocks.net/2015/09/09/a-gentle-introduction-to-blockchain-technology/
-->
* https://bitsonblocks.net/2015/09/21/a-gentle-introduction-to-bitcoin-mining/
Sissejuhatus teemasse: [[andmete sünkroniseerimine]]. <font color="red">E1</font>


=== Põhjalik õpik ===
Plokiahel:


* Lae alla  [https://d28rh4a8wq0iu5.cloudfront.net/bitcointech/readings/princeton_bitcoin_book.pdf hea tasuta õpik]
*Alustame [[Kriitiline taust blockchaini mõistmiseks]] teemadesse. Palun süvene neisse materjalidesse lisaks loengus räägitule.
* Kui eelmine link mingil põhjusel ei tööta, [http://bitcoinbook.cs.princeton.edu/ mine õpiku lehele ] (sealt leiad ka videoloengud) ja otsi sealt alapealkiri "Free pre-publication draft" mille all on link "... for download here".
* Kindlasti süvene [https://andersbrownworth.com/blockchain/ 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  [https://andersbrownworth.com/blockchain/ sama saidi videosid]
*[[Media:plokiahel_tt.pdf|detailsem plokiahela ülevaade]]  <font color="red">E2</font>


=== Python examples with detailed explanations ===
Huvi pärast vaata ka [https://alphabill.org/ Guardtime AlphaBill projekti], [https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=9834329 siin artikkel]: üliskaleeritav plokiahela-süsteem.


It is enough to go through one or two of these:
* [http://lambda.ee/w/images/8/84/Blockchain_lecture_1.pdf Dirk Draheimi materjal samal teemal: mitmete komponentide väga head illustratsioonid]


* One example http://ecomunsing.com/build-your-own-blockchain
Kasulikke linke spetsiifilise infoga: [https://coinmarketcap.com/all/views/all/ market cap], [https://www.blockchain.com/explorer blockchain explorer], [https://en.bitcoin.it/wiki/Main_Page Bitcoin wiki]
* Another example
** https://medium.com/crypto-currently/lets-build-the-tiniest-blockchain-e70965a248b
** https://medium.com/crypto-currently/lets-make-the-tiniest-blockchain-bigger-ac360a328f4d
* An even more detailed example
** https://bigishdata.com/2017/10/17/write-your-own-blockchain-part-1-creating-storing-syncing-displaying-mining-and-proving-work/
** https://bigishdata.com/2017/10/27/build-your-own-blockchain-part-2-syncing-chains-from-different-nodes/
** https://bigishdata.com/2017/11/02/build-your-own-blockchain-part-3-writing-nodes-that-mine/
** https://bigishdata.com/2017/11/21/how-to-build-your-own-blockchain-part-4-2-ethereum-proof-of-work-difficulty-explained/
* And then some:
** https://github.com/cosme12/SimpleCoin
** https://hackernoon.com/learn-blockchains-by-building-one-117428612f46


=== More details and tutorials ===


Have a look at the actual bitcoin data, latest blocks and transactions:
=== Blockchain continues ja DHT: 9 märts ===


* https://blockexplorer.com/
Algul jätkame eelmise loengu lõpu materjalidega.


How does the P2P stuff work, i.e finding nodes:
Seejärel distributed hash tables (DHT) :


* https://bitcoin.stackexchange.com/questions/3536/how-do-bitcoin-clients-find-each-other
* [http://en.wikipedia.org/wiki/Distributed_hash_table  ülevaade wikipedias] <font color="red">E1</font>
* https://en.bitcoin.it/wiki/Satoshi_Client_Node_Discovery
* Chord:
<!-- * https://www.coindesk.com/bitcoin-nodes-need/
:Põhimaterjal: [https://www.cse.buffalo.edu/~okennedy/courses/cse704fa2012/8.1-Chord.ppt Chordi põhimõtted] <font color="red">E2</font>.  Täiendavalt võib vaadata [https://people.eecs.berkeley.edu/~kubitron/courses/cs294-4-F03/slides/lec03-chord.ppt seda presentatsiooni] visualiseeritud algoritmidega (ppt presentatsioonirezhiimis!) ja eriti detailideks [https://www.kth.se/social/upload/51647996f276545db53654c0/3-chord.pdf seda presentatsiooni] (seda varianti kasutame ka loengus!).
* https://bitnodes.earn.com/dashboard/
-->


Real hardcore documentation:
:Lisaks tasuks veidi uurida artikleid [http://en.wikipedia.org/wiki/Chord_%28peer-to-peer%29 wikipedia] sissekande lõpus (external links)
* Kademlia:
:Materjal [http://www.cs.uiowa.edu/~ghosh/kademlia.ppt presentatsioon autoritelt]
:Täiendavalt [https://github.com/ntoll/p4p2p/blob/master/papers/maymounkov-kademlia-lncs.pdf autorite artikkel] ja eriti hea [https://www.kth.se/social/upload/516479a5f276545d6a965080/3-kademlia.pdf detailsem presentatsioon]
* Kademliat kasutav hajutatud failisüsteem: [https://docs.ipfs.io/ IPFS]
* Natuke sarnase ideega mõõdukalt lihtne andmestruktuur (mitte hajutatud): [https://en.wikipedia.org/wiki/Skip_list skip list]


* https://bitcoin.org/en/developer-guide#p2p-network
=== Konsensus hajutatud süsteemides: 16. märts. ===
* https://en.bitcoin.it/wiki/Protocol_documentation


Just a big collection of materials and examples: https://github.com/openblockchains/awesome-blockchains
Siin blokis asume tegelema keerumakate teooria-teemade lugemisega: infovahetus ja <b>konsensus hajutatud süsteemides</b>, 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.


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


* The Blockchain Explained to Web Developers, Part 1: The Theory. https://marmelab.com/blog/2016/04/28/blockchain-for-web-developers-the-theory.html
* The Blockchain Explained to Web Developers, Part 2: In Practice https://marmelab.com/blog/2016/05/20/blockchain-for-web-developers-in-practice.html
* https://medium.com/blockchain-review/how-does-the-blockchain-work-for-dummies-explained-simply-9f94d386e093
* Ever wonder how Bitcoin (and other cryptocurrencies) actually work? https://youtu.be/bBC-nXj3Ng4
* https://medium.com/@annamcabee/learning-about-block-chain-with-python-8b2178cf1fca
* https://crypto.stanford.edu/cs251/


* Soenduseks loe läbi väga praktilisi hajussüsteemide probleeme kirjeldav [https://aws.amazon.com/builders-library/challenges-with-distributed-systems/ jutt Amazonilt] (siin [https://d1.awsstatic.com/builderslibrary/pdfs/challenges-with-distributed-systems.pdf otselink pdf-le]).


== Andme-apid, autentimine, pilveteenused, andmete koondamine ==
* Lisaks tasub veidi vaadata [https://rai-skumar.medium.com/10000-foot-view-of-consensus-in-distributed-data-systems-145628b17285 kiirülevaadet] konsensuseteema eri harudest (mh hea pilt) ja sarnaselt [https://en.wikipedia.org/wiki/Consensus_(computer_science) wikipedia kiirülevaadet] harudest ja terminitest. Uuri kindlasti välja, mis tähendab sünkroonne/asünkroonne, partition tolerant/nontolerant, permissioned/permissionless.


=== Erinevad API-stiilid ===
* Seejärel - põhiasjana - tööta süvenemisega läbi [http://turing.cs.ttu.ee/~tanel.tammet/5-Consensus.ppt hea presentatsioon põhjalikumaks arusaamiseks] <font color="red">E1</font>  up to page 73 (allikas [https://people.disim.univaq.it/~guido.proietti/slide_algdist2017/ siin]. Sinu põhiülesanne on see presentatsioon <b>väga aeglaselt</b> 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.


* [https://en.wikipedia.org/wiki/Representational_state_transfer rest wikipedias] ja [http://www.restapitutorial.com/ rest tutorial (vt linke all!)]
Kui sul rohkem huvi, siis on olemas näiteks <!-- [http://people.disim.univaq.it/guido.proietti/Lecture%20notes%20Attiya.pdf põhjalik õpik] --> [http://lib.ysu.am/disciplines_bk/c95d04e111f3e28ae4cc589bfda1e18b.pdf põhjalik õpik] ja meie kasutatud presentatsiooni autoril on [http://people.disim.univaq.it/guido.proietti/lezioni_algdist2023.html põhjalik kursus] hajutatud süsteemidest (viimane sait paistab hetkel olevat maas: ehk taastub?)
* [http://www.odata.org/ odata.org: microsoft/oasis recommendations for rest style]
* [https://docs-apis.apigee.io/files/Web-design-the-missing-link-ebook-2016-11.pdf api design book download] or [https://pages.apigee.com/eBook-Web-API-Design-The-Missing-Link-reg.html?int_source=resources-main&int_medium=website&int_campaign=ebook&int_content=web-api-design-missing-link api design book (must register)]
* [https://graphql.org/ Graphql start] and [https://blog.pusher.com/rest-versus-graphql/ graphql vs rest] and [https://medium.com/codingthesmartway-com-blog/rest-vs-graphql-418eac2e3083 similar take on rest vs graphql] and [https://blog.graph.cool/how-to-wrap-a-rest-api-with-graphql-8bf3fb17547d wrap rest in graphql]


=== Suured avalikud andme-apid ===
=== Konsensus hajutatud süsteemides jätkub 23. märts ===


: [https://market.mashape.com/ API-de kogu uurimiseks]
Selle nädala teemaks on
: [https://en.wikipedia.org/wiki/List_of_open_APIs list of open apis from wikipedia]
: [https://developers.google.com/apis-explorer/#p/ google api explorer]
: [[Andme-apide märkmed loengust|Andme-apide näiteid]]
: [https://techcrunch.com/2018/04/04/facebook-instagram-api-shut-down/ facebook api limitations/shutdowns in 2018]


===  Autentimine ===
* Rafti konsensusalgoritm
** [https://en.wikipedia.org/wiki/Raft_(algorithm) raftist] vt ka head [http://thesecretlivesofdata.com/raft/ visualisatsiooni] ja [https://raft.github.io/raft.pdf originaalartikkel] ja detailsemalt selgitav sari [https://codeburst.io/making-sense-of-the-raft-distributed-consensus-algorithm-part-1-3ecf90b0b361 osa 1], [https://codeburst.io/making-sense-of-the-raft-distributed-consensus-algorithm-part-2-4f12057b019a osa 2], [https://codeburst.io/making-sense-of-the-raft-distributed-consensus-algorithm-part-3-9f3a5cdba514 osa 3].
** ja vbl veidi ka [https://www.alibabacloud.com/blog/paxos-raft-epaxos-how-has-distributed-consensus-technology-evolved_597127 Raft/Paxos võrdlust].
* ja misasi on [https://en.wikipedia.org/wiki/CAP_theorem CAP theorem]. [https://medium.com/@ngneha090/understanding-the-cap-theorem-balancing-consistency-availability-and-partition-cb11c2b97e2b Lisaks 1 (definitsioonid)] <!-- ja [https://dev.to/katkelly/cap-theorem-why-you-can-t-have-it-all-ga1 lisaks 2] --> ja [https://www.ibm.com/think/topics/cap-theorem lisaks nosql-baasidest] ja [https://medium.com/@ajayverma23/demystifying-the-cap-theorem-understanding-consistency-availability-and-partition-tolerance-446de8452fac veel andmebaaside vaatest]


: facebook, google, pangalink.
Taustaks oluline: [[Phase king vs raft vs paxos vs zookeeper]]
:[[Autentimise märkmed: facebook ja google]]


:[http://eid.eesti.ee/index.php/Kasutaja_tuvastamine_veebis veebiserveri seadistamine id-kaardi jaoks] ja [https://github.com/tammet/eid abistavad koodijupid]
Pluss:
:[http://eid.eesti.ee/index.php/EID_rakendusjuhend#Tehnoloogilised_detailid_ja_taustinfo taustaks id-kaardi kasutusstsenaariumid]
* Konsensuse [https://decentralizedthoughts.github.io/start-here/ materjalikogu] ja [https://a16zcrypto.com/posts/article/consensus-canon/ veel üks]
<!-- * Täiendavalt konsensusest, hulk algoritme: [https://ac.informatik.uni-freiburg.de/teaching/ss_15/dist_sys/lectures/06_Consensus_p2.pdf osa 1 (shared memory)] ja edasi message-passing [https://ac.informatik.uni-freiburg.de/teaching/ss_15/dist_sys/lectures/06_Consensus_p2.pdf osa 2] ja [https://ac.informatik.uni-freiburg.de/teaching/ss_15/dist_sys/lectures/06_Consensus_p3.pdf osa 3] -->
* veidi [https://www.geeksforgeeks.org/practical-byzantine-fault-tolerancepbft/ practical byzantine fault tolerance (pbft)] teemal.


:[[Autentimise märkmed: mobiil-ID]]
=== Fork ja thread: 30 märts ===


=== Pilvekeskkonnad  ===
Fork/thread loengumaterjal: [[Media:Processes_fork_thread.pptx|Processes_fork_thread.pptx]], [[Media:Processes_fork_thread.pdf|Processes_fork_thread.pdf]]. <font color="red">E1</font>


[https://support.rackspace.com/white-paper/understanding-the-cloud-computing-stack-saas-paas-iaas/ Understanding cloud computing]
[[Loengunäited paralleelvärkidest 2026]]


Suured:
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:
* [http://www.csl.mtu.edu/cs4411.ck/www/NOTES/process/fork/create.html  fork]
* [https://www.cs.cmu.edu/afs/cs/academic/class/15492-f07/www/pthreads.html threads] tutorial ja sarnane [https://randu.org/tutorials/threads/ tutorial]
* [http://www.cs.kent.edu/~ruttan/sysprog/lectures/shmem/shmem.html shared memory]
* [http://stackoverflow.com/a/16207592 Thread, Queue ja Lock] Pythonis
* [https://docs.python.org/3/library/multiprocessing.html multiprocessing] Pythonis
* [https://docs.python.org/3/library/threading.html threading] Pythonis
* [https://beej.us/guide/bgipc/ Beej's guide to interprocess communication], vaata ka [https://beej.us/guide/bgc/html/split/multithreading.html#multithreading multithreading chapter] in Beej's guide to C programming


* [https://aws.amazon.com/ Amazon AWS]
Viimaste taustaks on kasulik vaadata korra [https://www.tecmint.com/linux-process-management/ protsesside managementi linuxis].
* [http://azure.microsoft.com/ Microsoft Azure]
* [https://cloud.google.com/ Google Cloud]


Pilveteenuse tarkvara:
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.


[https://en.wikipedia.org/wiki/OpenStack OpenStack]
Soovitus kuulata [https://lexfridman.com/jim-keller/ Jim Kelleri episoodi "Moore’s Law, Microprocessors, Abstractions, and First Principles"] heast ja populaarsest [https://lexfridman.com/ai/ ai podcastist]: Jim räägib mh pikemalt protsessori-sisesest parallelismist ja automaatsest branchi-ennustamisest.


Näide: Azure
=== Distributed databases and e-government IT systems: 6. april  ===


[[Azure märkmed]]
We will jump into the examples of distributed systems before coming back to low-level stuff such as locking/transactions next week.


=== Google appengine, database api, google bigtable and file system stack ===
Themes:


http://cloud.google.com/appengine/ AppEngine on nüüd osa Google Cloud platvormist
* [[Hajutatud andmebaaside teema lahtikirjutus ja lugemisülesanded]]
* [[Lühiülevaade riigi infosüsteemist]]
* X-road/UXP: [[x-tee märkmed loengust]]


[[Hajutatud failisüsteemide märkmed loengust]]
<!-- : this will be covered in detail by Margus Freudenthal in a separate lecture. -->


== Paralleelrehkendused  ==
=== Lukustamine ja paralleelprotsessid ja transaktsioonid: 13. aprill ===


=== Esimene osa ===
NB! See nädal loengut ei toimu: selle asemel iseõpe Priidu videosalvestusega: [https://echo360.org.uk/media/f80715c5-3632-410b-b331-209a4c6289af/public siin].


Vt ka ülal "nädala ülesanded" blokki: seal on uus ülesanne konkreetselt selle nädala teema kohta.


Nädala eesmärk on aru saada lukustamise baasmehhanismidest ja andmebaasi-transaktsioonidest.


Näited:
Lukustamine on vajalik paralleelsete protsesside juures, mis kasutavad ühist
<!-- :[[Java näide loengust]] -->
mälujuppi / muutujat, kas siis näiteks threadide ühises mäluosas või shared memorys.


:C: alguses oli [http://www.csl.mtu.edu/cs4411.ck/www/NOTES/process/fork/create.html  fork()], hea [https://computing.llnl.gov/tutorials/pthreads/ pthreads tutorial].
Lukustamise jaoks on mitu erinevat mehhanismi ja kasutusstenaariumi ning nad
:[http://stackoverflow.com/a/16207592 Thread, Queue ja Lock] Pythonis
vajavad veidi tuge protsessorilt spetsiifiliste atomaarsete käskude näol.


Presentatsioonid lugemiseks:
Paralleelsus andmebaasides: hulk probleeme ja mitmeid lahendusviise, mis alusena kasutavad
baas-lukustamismehhanisme.


* [[Media:Locking_v2.ppt|lukustamine]]
Loe selles järjekorras:
* [[Media:na2_ccdb_slides.pdf|Paralleelsus andmebaasides]].


<!--
* [[Media:Locking_v2.ppt|Lukustamise sissejuhatav presentatsioon]]: <font color="red">E2</font> räägib alustuseks praktilistest vajadustest ja põhimehhanismidest.
Loengunäide: TCP (HTTP) socket server
* [[Media:na2_sync.pdf|Detailsem konspekt lukustamise kohta]]: <font color="red">E2</font> semafor, mutexid ja detailselt spinlockist. Loe seda <b>aeglaselt</b>!


Kuidas TCP server elementaarsel tasemel töötab (Java tutorialid): [http://javarevisited.blogspot.com.ee/2015/06/how-to-create-http-server-in-java-serversocket-example.html Socket serveri sissejuhatus], [http://www.javaworld.com/article/2853780/core-java/socket-programming-for-scalable-systems.html threadidega server].
Optsionaalselt võib olla abi nendest lukustamist seletavatest videotest:
-->
<!--
Skaleeruvus praktikas: [http://merbist.com/2011/01/18/causality-of-scalability/ Causality of Scalability], [http://merbist.com/2011/01/31/designing-for-scalability/ Designing for Scalability].
-->
<!--:Veebiserverid, nende sise-elu ja konf
:ip/tcp, socketid, http jne
-->


=== Lukustamine, andmebaasid jms ===
* [https://www.youtube.com/watch?v=cEcNLfXEaZs&t=2s spinlocki loeng] arusaamise hõlbustamiseks
* [https://www.youtube.com/watch?v=yB8sm-pwvZo spinlocki riistvara-tuge seletav loeng]
* [https://www.youtube.com/watch?v=8wcuLCvMmF8&t=440s loeng semafor vs mutex]: mis on mis


Lisaks võib lugeda:
Lisaks võib lugeda:
:[[Media:na2_ccdb.pdf|Konspekt]], käsitleb teemat oluliselt põhjalikumalt kui loeng/slaidid
:[[Media:11-transactions.pdf|Introduction to Transactions (slaidid)]]


:[[Media:11-transactions.pdf|Introduction to Transactions (slaidid)]] <font color="red">E2</font>
:Sünkroniseerimisprimitiivid: [[Media:na2_sync_slides.pdf|slaidid]]
:Sünkroniseerimisprimitiivid: [[Media:na2_sync_slides.pdf|slaidid]]


Mittekohustuslik lisalugemine:
== Näited hajutatud süsteemidest ==
:[[Media:na2_sync.pdf|Konspekt]] pikemalt ja põhjalikumalt loengus läbitud teemadest.
 


=== Nädalaülesandest, X-road / UXP and EU digital passport and the CIRPASS project: 20 April ===
<!--
The X-road/UXP (see [[x-tee märkmed loengust]]) <font color="red">E2</font> will be covered in detail by Margus Freudenthal.
-->


Kõigepealt paar tähelepanekut viimase nädalaülesande kohta.


=== Paralleliseerimise automatiseerimine ja klastrid ===
Then for X road see
* [[x-tee märkmed loengust]]  <font color="red">E2</font>
* [[Media:Distributed-systems-xroad2025.pdf|lecture materials by Margus Freudenthal]] <font color="red">E1</font>
* and [https://livettu.sharepoint.com/:v:/r/sites/Hajusssteemid2025/Shared%20Documents/General/Recordings/Hajuss%C3%BCsteemide%20kursuse%20loeng%202025-20250422_160133-Meeting%20Recording.mp4?csf=1&web=1&e=v16wn1&nav=eyJyZWZlcnJhbEluZm8iOnsicmVmZXJyYWxBcHAiOiJTdHJlYW1XZWJBcHAiLCJyZWZlcnJhbFZpZXciOiJTaGFyZURpYWxvZy1MaW5rIiwicmVmZXJyYWxBcHBQbGF0Zm9ybSI6IldlYiIsInJlZmVycmFsTW9kZSI6InZpZXcifX0%3D the recording by Margus]


:[https://en.wikipedia.org/wiki/MapReduce Mapreduce framework]
For the [https://cirpass2.eu/ digital product passport] architecture, ideas and politics around it see:
<!--:[http://www.google.com/url?sa=t&source=web&cd=2&ved=0CBkQxQEwAQ&url=http%3A%2F%2Fdocs.google.com%2Fviewer%3Fa%3Dv%26q%3Dcache%3AziVIMWHr2GsJ%3Anet.pku.edu.cn%2F~course%2Fcs501%2F2008%2Fresource%2Fmapreduce_in_a_week%2Fllm3-mapreduce.ppt%2Bgoogle%2Bmapreduce%2Btheory%2Band%2Bimplementation%2BChristophe%2BBisciglia%2C%2BAaron%2BKimball%2Bllm3%26hl%3Den%26pid%3Dbl%26srcid%3DADGEESiMwU-9htEZEAthU5bRtGGBQgkzwUf5vM549R-6QBooeBv10FFd-GLvrklDHx-RhI3OehhNio1E7m5GvwKyKK9ndM6oNbDO3LERl8M8YSZ5tdO4bRQ3PEs8sQ6_sdJVIF_Splx7%26sig%3DAHIEtbQVGyhnhEx0aTA0W7okwP8KdVqG1w&rct=j&q=google%20mapreduce%20theory%20and%20implementation%20Christophe%20Bisciglia%2C%20Aaron%20Kimball%20llm3&ei=plH_TPWOI4ay8gPVss2MCw&usg=AFQjCNE9y0GiXVo_hNWPmywfUjt_3ZhQqg&cad=rja Mapreduce sissejuhatus] -->
:[[Mapreduce katsetused Azure platvormil]]
:Mapreduce [http://research.google.com/archive/mapreduce.html klassikaline põhiartikkel]
:memcached
:[http://www.majordojo.com/2007/03/memcached-howto.php memcached ülevaade]


* [https://data.europa.eu/en/news-events/news/eus-digital-product-passport-advancing-transparency-and-sustainability EU digital passport]
* [https://eur-lex.europa.eu/eli/reg/2024/1781/oj  ESPR act: the law introducing EU digital passports]
* [https://cirpass2.eu/ CIRPASS-2: the EU R&D project for developing the digital passport architecture, knowledge representation etc]
* [[Media:cirpass_draft.pdf|draft full architecture]]
* [[Media:dpp_simple.pdf|draft simple architecture]]
* [[Media:dpp_simple_2024.pdf|early draft of the simple architecture]]
* [https://link.springer.com/chapter/10.1007/978-3-032-11976-6_23 our recent paper]


=== Hajutatud andmekogud ===
<!--
=== EU digital passport and the CIRPASS project: 20 April, second part ===


Tanel will focus on the details of the [https://cirpass2.eu/ digital product passport] architecture, ideas and politics around it.


Some links and materials:
* [https://data.europa.eu/en/news-events/news/eus-digital-product-passport-advancing-transparency-and-sustainability EU digital passport
* [https://eur-lex.europa.eu/eli/reg/2024/1781/oj  ESPR act: the law introducing EU digital passports]
* [https://cirpass2.eu/ CIRPASS-2: the EU R&D project for developing the digital passport architecture, knowledge representation etc]
* [[Media:cirpass_draft.pdf|draft full architecture]]
* [[Media:dpp_simple.pdf|draft simple architecture]]
* [[Media:dpp_simple_2024.pdf|early draft of the simple architecture]]
-->


Integreerimine:  
===  Exploring some very large distributed systems: 27 April ===


:[[Integreerimise lühimärkmed]]
A reading session: we will read and attempt to understand together some case studies.
:[http://research.cs.wisc.edu/dibook/slides/Chapter_10.ppt data warehousing]


Hajutamine:
* [https://www.figma.com/ Figma] (see [https://en.wikipedia.org/wiki/Figma wikipedia]): [https://www.figma.com/blog/how-figmas-multiplayer-technology-works/ how Figma distributed tech works]
* Google [https://static.googleusercontent.com/media/research.google.com/en//archive/bigtable-osdi06.pdf bigtable] vs [https://static.googleusercontent.com/media/research.google.com/en//archive/spanner-osdi2012.pdf spanner]
* [https://www.uber.com/ Uber] (see [https://en.wikipedia.org/wiki/Uber wikipedia]):  [https://www.uber.com/us/en/blog/schemaless-part-one-mysql-datastore/?utm_source=chatgpt.com how Uber distributed tech works]


:[[Hajutamise lühimärkmed]]
=== Combined machine learning (federated learning): 4 May ===
:[https://memcached.org/ memcached]
:[http://momjian.us/main/writings/pgsql/replication.pdf Postgres replication intro]
:[http://wiki.postgresql.org/wiki/Replication,_Clustering,_and_Connection_Pooling Postgres clustering and replication]


Konsensus:
Oluline tagapõhi: [https://en.wikipedia.org/wiki/Differential_privacy differential privacy] <font color="red">E2</font>


: [https://en.wikipedia.org/wiki/Paxos_(computer_science) Paxos algoritm] ja [https://understandingpaxos.wordpress.com/ veel Paxos] ja [https://github.com/dgryski/awesome-consensus väga palju Paxost ja sõpru]
Lecture by Priit Järv, focusing on applied research in combining machine learning by different hospitals / medical facilities.
: [https://en.wikipedia.org/wiki/Proof-of-work_system bitcoinist tuttav proof-of-work]


Hulk teemasid põhjalikult:
[[Media:Fl.pdf|Lecture presentation]]


:[http://christophermeiklejohn.com/distributed/systems/2013/07/12/readings-in-distributed-systems.html readings in distributed databases]
=== Microservices, scaling large systems: 11 May ===
:[http://codex.cs.yale.edu/avi/db-book/db6/slide-dir/PPT-dir/ch19.ppt Chapter for db system concepts book]


Detailsed lisamaterjalid:
Your task is to look through the whole lecture recording from 2023 about [http://turing.cs.ttu.ee/~tanel.tammet/hajussysteemid_skaleerimine.mp4 scaling large distributed systems]. Slides in English, speech in Estonian.


: [http://www.postgresql.org/docs/current/interactive/high-availability.html Postgres high availability]
=== Consultation for the exam: 18 May, <b>teams only</b> ===
<!-- : [http://goanna.cs.rmit.edu.au/~e76763/tiger_ref/lkmt10-dnis.pdf Integrating distributed sem web data] -->
: [http://docs.oracle.com/cd/B28359_01/server.111/b28318/integrat.htm Oracle information integration]


Overview of the exam and consultation.


== X-tee ja e-riigi IT korraldus ==




===  X-tee  ===


:[[x-tee märkmed loengust]]


Kasulikud lisamaterjalid:


:[https://www.x-tee.ee/docs/live/xroad/pr-mess_x-road_message_protocol.html x-tee protokolli spec]
:[https://cyber.ee/products/secure-data-exchange/ UXP]: AS Cybernetica eksport-kommertsversioon X-teest.
:Kaks screencasti UXP keskserveri konfimisest [https://vimeo.com/321936653 1] ja [https://vimeo.com/321936768 2]
<!--
<!--
:[https://www.ria.ee/public/publikatsioonid/x-road.jpg Big official picture of the state IT-architecture]
 
=== Data warehouses, data lineage and related issues ===
 
The talk will be given by Kalle Tomingas from [https://www.oriongovernance.com/ Orion governance]. Vt taustaks ka [https://digikogu.taltech.ee/et/item/a05c55e4-054a-4758-9b0b-e2671105055c dissertatsiooni].
 
===  Microservices, scaling large systems and related ===
 
Lecture will be on teams only (not the lecture room) and very briefly at the beginning: administrative stuff.
 
The main task is to look through the whole lecture recording from 2023 about [http://turing.cs.ttu.ee/~tanel.tammet/hajussysteemid_skaleerimine.mp4 scaling large distributed systems]. Slides in English, speech in Estonian.
 
===  Consultation for the exam ===
-->
-->
:[[Media:Ahto_xtartu.ppt|Ahto Kalja detailne ülevaade X-tee projektist aastast 2004]]
:[https://www.ria.ee/ee/x-tee.html X-road official page] <!--and [https://www.ria.ee/index.php?query=X-tee a materials query] SAMA -->
:[http://x-road.ee/docs/est/turvaserveri_kasutusjuhend_14.04_lts.pdf X-road security server manual (detailed)]
<!--
<!--
:[http://apisuomi.fi/2014/07/soap-rest-json-and-x-road-x-tee/ X-tee from the Finnish perspective] and the [https://portal.educloudalliance.org/x-road-rest-gateway-development-initiated-github X-tee/Json gateway] and [http://www.hel.fi/palvelukarttaws/rest/ver2_en.html a nice REST api example from Finland]
=== X-road / UXP: 22. April ===
 
The X-road/UXP (see [[x-tee märkmed loengust]]) will be covered in detail by Margus Freudenthal.
 
 
The X-road/UXP (see [[x-tee märkmed loengust]]) will be covered in detail by Margus Freudenthal.
 
-->
-->
<!--
<!--
:[https://www.ria.ee/public/x_tee/X-Road_message_protocol_4.0.1.pdf newest X-road message protocol] and corresponding [https://www.ria.ee/public/x_tee/pr-meta_x-road_service_metadata_protocol_0.7_Y-743-14.pdf metainfo protocol]
=== Stream processing, message queues ja Apache Kafka ===
 
Materials to be added later.
 
-->
-->
<!-- :[[example algorithm for xml serialization of Python data|Example: X-road oriented Soap call tool for Python]] -->
<!--
:[http://research.cyber.ee/~jan/publ/xroadares07final.pdf Paper by Ansper and Willemson]


===  Riigi IT-infrastruktuuri korraldus ===
=== Hajutatud andmebaasid ja riigi it-süsteemid ===


:[[Riigi IT korralduse märkmeid loengust]]


Kasulikud lisamaterjalid:
Kaks teemat:


:[https://riha.eesti.ee/ RIHA] ja [https://www.ria.ee/ee/riha.html jutud RIHA kohta]
* [[Hajutatud andmebaaside teema lahtikirjutus ja lugemisülesanded]]
* [[Lühiülevaade riigi infosüsteemist]] ja [[x-tee märkmed loengust]]
 
-->






[[Category:Kursus]]
[[Category:Kursus]]

Viimane redaktsioon: 12. juuni 2026, kell 22:02

revolutsioon
revolutsioon

Ainekoodid: ITI0215
Aine nimed: Hajussüsteemid
Link: http://lambda.ee/wiki/Hajuss%C3%BCsteemid
Punkte: 6 EAP
Õppejõud: Tanel Tammet tanel.tammet@ttu.ee
Praktikumijuhendaja: Martin Verrev
Olemas on ka 2025 aasta materjalide arhiiv.

Eksamitulemused

Siin:

Eksamiks konsultatsioonid

18. mai eksamikonsultatsioon oli plaanis ainult teamsis, mitte auditooriumis, kuid tehnilistel põhjustel ei õnnestunud.

Selle asemel:

(a) väike salvestuse teamsi, teemaks siis eksamikorraldus, ülesanded jne: salvestus siin, asub kursuse teamsi-salvestuste kataloogis.

(b)meil olid ka väikese ekstra-teamsi 20. ja 25. mail kell 10:00:

Eksamikorraldus ja materjalid õppimiseks

Eksamiks on kokku aega 2.5 tundi, aga enamik peaks saama hakkama ca 1.5 tunniga.

Eksam on kirjalik, samas ruumis/ajal toimub ka teadmiste formaliseerimise kirjalik eksam.

Eksamiks registreeruda ei ole vaja.

Allolevad punase E1-ga on eksami jaoks kõige olulisemad materjalid, E2 veidi vähem olulised. NB! Võrreldes varasemaga on lisandunud üks E2 materjal allpool ja teine märgitud E2-ks:

Teemad, mille kohta küsimused eksamil tulevad:

  • Protokollid http (sh veidi teada ka uuematest versioonides), https, XML-RPC, Rest, SOAP baasosad
  • P2P süsteemid, sh klassikalised ning Chord, Bittorrent ja TOR
  • Distributed ledger ja Bitcoin
  • Konsensus hajutatud süsteemides.
  • Fork, thread, shared memory
  • Lukustamine, transaktsioonid
  • Xtee
  • Misasi on diferentsiaalprivaatsus

Sul on vaja nende teemade põhimõtteid/protokolle/algoritme selgitada ja mõnel puhul tuua ise väikeseid näiteid.

Ülaltoodud teemade küsimused tulevad ainult asjadest, mida on loengus ja märgistatud materjalides käsitletud. Enamasti on lisaks loengusalvestusele allpool nende jaoks ka konkreetsete loengute materjalid.

Eksamil esitatakse küsimusi viie teema kohta, ja teil tuleb neist valida neli, mida vastata. Kui on vastatud viis, siis õppejõud hindab neist teemadest ikakgi nelja (valides parimate tulemustega neli), mitte ei summeeri kõiki viit.

NB! 2. iseseisva töö kaitsmisjärjekord

Link kaitsmisjärjekorra moodustamiseks on siin: https://forms.gle/ZF3aCboBSzfEwkgf9 Palun täitke see ära hiljemalt pühapäevaks 24.05 kell 23:59

Eksamipäevad

Siin on täpsustunud esimese kahe eksami ajad:

  • 27 mai, kolmapäev, kell 11:00 (koos teadmiste esitamise eksamiga). Auditoorium NRG-226.
  • 1 juuni, esmaspäev: eraldi eksamiajad hajussüsteemide (11:00) ja teadmiste esitamise (14:00) jaoks. Auditoorium SOC-211a.
  • 8 juuni, esmaspäev: kell 11:00 (koos teadmiste esitamise eksamiga). Auditoorium ICT-315.

Eksamiks registreeruda ei ole vaja.


Aeg, koht

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

Loeng (Tanel): esmaspäeval 10:00-11:30 ruumis SOC-414.
Praktikum (Martin): teisipäeval kell 12:00-13:30 ruumis ICO-316.

Plaan on teha enamik loenguid kohapeal ja väiksem osa distantsilt. Praksid toimuvad vähemalt esialgu kohapeal, ja võimalik, et osad hiljem distantsilt. NB! Ei ole garantiid, et teamsi-salvestused alati õnnestuvad.

Kogu info, materjalid ja ülesanded on siinsamas lambda lehel.

Palun liitu kursuse teamsi grupiga: iseregistreerumise võti on q1nrfb2.

Iganädalase teamsi loengu-meeti link.

Iganädalase teamsi praksi-meeti link.


NB! Allpool olev blokkide struktuur on sarnane, kui 2025 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%.

The materials below marked with the red E1 are the main materials for the exam, while E2 materials will also come up, but less and/or in a simpler form.


Ülesande vastused saada meiliga nii Tanelile kui Martinile. OK tehtud ülesande eest saab ühe lisapunkti.


Praktikumid

Kokku on praktikumitöid kaks. Ülesanded jaotatakse kohustuslikuks baasosaks ja valikosadeks: igaühel oma punktiarv. Kumbki praktikum täismahus (baasosa + kõik valikosad) tehtuna annab 25 punkti. Võivad lisanduda ekstrapunktid eriti hästi tehtud osade või täienduste eest. 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 sarnane esimesele praktikumile eelmisest aastast.

Praktikumitööde tähtajad on :

  • 2. praktikumil - 12. mai 2026. Teise praktikumi ülesandes võib veel tulla väiksemaid muutusi.

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 Martin Verrev.

Loengukava

Kursus jaguneb laias laastus kolmeks teemaks:

  • P2P ja protokollid (neil teemadel - pluss veidi andme-apidest- esimene praks), sh distributed ledger ehk bitcoini alustehnoloogia
  • Paralleelrehkendused ja konsensus, lukustamine, sünkroniseerimine (selle kohta teine praks)
  • Näited reaalsetest hajutatud süsteemidest

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
https://www.scs.stanford.edu/24sp-cs244b/

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

Protokollid ja P2P

Protokollid, 2. veebruar

Kohustuslikud osad lugeda:
Http ja json: võrgurakenduste protokollid 1 E1
Täiendavalt soovitav lugeda:
Gaffer on games: UDP vs TCP ja täiendavalt
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:

P2P sissejuhatus, 9. veebruar

loengumaterjal: pikem ülevaade eri P2P tehnoloogiatest E1
vikipeedia ülevaade E2
TOR wikipedias E2

Andmekodeerimine/vahetus: JSON-based tech, REST and API styles 16 veebruar

Old XML-based tech:

Mainstream: REST, JSON, Graphql:

Lugemiseks:

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

Lihtsa REST-tüüpi APIde head näited on LLMide apid:

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
    • Tutvu Google soovitustega: AIP.
    • 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

Paralleelrehkendused ja konsensus

Data synchronization, DHT, start distributed ledger: 2.märts

Sissejuhatus teemasse: andmete sünkroniseerimine. E1

Plokiahel:

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

Kasulikke linke spetsiifilise infoga: market cap, blockchain explorer, Bitcoin wiki


Blockchain continues ja DHT: 9 märts

Algul jätkame eelmise loengu lõpu materjalidega.

Seejärel distributed hash tables (DHT) :

Põhimaterjal: Chordi põhimõtted E2. 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

Konsensus hajutatud süsteemides: 16. märts.

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 E1 up to page 73 (allikas siin. 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.

Kui sul rohkem huvi, siis on olemas näiteks põhjalik õpik ja meie kasutatud presentatsiooni autoril on põhjalik kursus hajutatud süsteemidest (viimane sait paistab hetkel olevat maas: ehk taastub?)

Konsensus hajutatud süsteemides jätkub 23. märts

Selle nädala teemaks on

Taustaks oluline: Phase king vs raft vs paxos vs zookeeper

Pluss:

Fork ja thread: 30 märts

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

Loengunäited paralleelvärkidest 2026

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.

Distributed databases and e-government IT systems: 6. april

We will jump into the examples of distributed systems before coming back to low-level stuff such as locking/transactions next week.

Themes:


Lukustamine ja paralleelprotsessid ja transaktsioonid: 13. aprill

NB! See nädal loengut ei toimu: selle asemel iseõpe Priidu videosalvestusega: siin.

Vt ka ülal "nädala ülesanded" blokki: seal on uus ülesanne konkreetselt selle nädala teema kohta.

Nädala eesmärk on aru saada lukustamise baasmehhanismidest ja andmebaasi-transaktsioonidest.

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.

Paralleelsus andmebaasides: hulk probleeme ja mitmeid lahendusviise, mis alusena kasutavad baas-lukustamismehhanisme.

Loe selles järjekorras:

Optsionaalselt võib olla abi nendest lukustamist seletavatest videotest:

Lisaks võib lugeda:

Introduction to Transactions (slaidid) E2
Sünkroniseerimisprimitiivid: slaidid

Näited hajutatud süsteemidest

Nädalaülesandest, X-road / UXP and EU digital passport and the CIRPASS project: 20 April

Kõigepealt paar tähelepanekut viimase nädalaülesande kohta.

Then for X road see

For the digital product passport architecture, ideas and politics around it see:


Exploring some very large distributed systems: 27 April

A reading session: we will read and attempt to understand together some case studies.

Combined machine learning (federated learning): 4 May

Oluline tagapõhi: differential privacy E2

Lecture by Priit Järv, focusing on applied research in combining machine learning by different hospitals / medical facilities.

Lecture presentation

Microservices, scaling large systems: 11 May

Your task is to look through the whole lecture recording from 2023 about scaling large distributed systems. Slides in English, speech in Estonian.

Consultation for the exam: 18 May, teams only

Overview of the exam and consultation.