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>


= <font color="red">Loengud ja seminarid piiranguajal</font> =
= Eksamitulemused =


=== Loengud ===
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]]


* Loenguajaks paneb õppejõud üles senisest detailsemad soovitused, et mida kuni järgmise loenguajani iseseisvalt lugeda.
= Eksamiks konsultatsioonid =
* 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.


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


=== Praktikumid ===
Selle asemel:


Esimese praktikumi esitamistähtaja nihutame 26. märtsile. Arusaadavalt on soovitav esitada juba 16. märtsil, nii vähendame esitamisjärjekorra pikkust.
(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.


Praktikumid ja tööde arvestamise teeme Skypes või muus chatis videoga standardsel praktikumiajal, mida vajadusel pikendame.  
(b)meil olid ka väikese ekstra-teamsi 20. ja 25. mail kell 10:00:


Praktikumitöö esitamiseks tee järgmist:
* [https://teams.microsoft.com/meet/389598994335128?p=XBih7Eos2RrsfIHiM8 eksamikonsultatsioon] 20. mai kell 10:00-10:30
* Pane oma töö TTÜ gitlabi või avalikku githubi või gitlabi reposse.
* [https://teams.microsoft.com/meet/380607922335173?p=C39x1ZFCPIwdpA0ZKP eksamikonsultatsioon] 25. mai kell 10:00-10:30
* 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.
= Eksamikorraldus ja materjalid õppimiseks =
* 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.
Eksamiks on kokku aega 2.5 tundi, aga enamik peaks saama hakkama ca 1.5 tunniga.
* 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.
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:
 
* 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 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.
Teemad, mille kohta küsimused eksamil tulevad:


=== Loeng ja töö 19. märtsil ja sellele järgneval nädalal ===
*    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


Sinu ülesanne on iseseisvalt tutvuda detailsemalt REST-stiiliga ja tutvuda natuke graphql päringu/vastustekeelega (need on siis kaks täiesti erinevat asja):
Sul on vaja nende teemade põhimõtteid/protokolle/algoritme selgitada ja mõnel puhul tuua ise väikeseid näiteid.
* 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".  


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


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


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.
= <font color="red">NB!</font> 2. iseseisva töö kaitsmisjärjekord =


Bitcoini plokiahela mehhanism ongi üks konkreetne võimalik mehhanism konsenuse saavutamiseks mitte-üleni-usaldusväärses hajutatud süsteemis.
Link kaitsmisjärjekorra moodustamiseks on siin: https://forms.gle/ZF3aCboBSzfEwkgf9
Palun täitke see ära hiljemalt pühapäevaks 24.05 kell 23:59


* 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)
= Eksamipäevad =


* 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].
Siin on täpsustunud esimese kahe eksami ajad:


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


* 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.
Eksamiks registreeruda ei ole vaja.


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).
<!--
= <font color="red">NB!</font> 11. mai loengu asemel iseõpe =




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.
Endiselt on nüüd ja edaspidi praksid IT kolledzhis ICO-316, mitte Mektorys.
-->
-->
<!--
<!--
= <font color="red">NB! 5. märtsi loeng jääb ära</font> =
= <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.


NB! 5. märtsi loeng jääb ootamatutel põhjustel ära.
Vt ka siin all "nädala ülesanded" blokki: seal on uus ülesanne konkreetselt selle nädala teema kohta.
-->
-->


= Aeg, koht =


=== Loeng ja töö 2. aprillil ja sellele järgneval nädalal ===
Semester: kevad<br>
Tulemus: eksam<br>
Hindamise meetod: praktikumide tulemused (50%) ja eksam (50%)<br>


Selle nädala teemaks on parallelismi baasmehhanismid tavaprogrammides, konkreetselt fork,
Loeng (Tanel): esmaspäeval 10:00-11:30 ruumis SOC-414.<br>
thread ja shared memory. Uurime neid asju C/opsüsteemi tasemel: abstraktsemates keeltes kasutatakse neidsamu C/opsüsteemi mehhanisme.
Praktikum (Martin): teisipäeval kell 12:00-13:30 ruumis ICO-316.<br>
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]
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.
* [https://computing.llnl.gov/tutorials/pthreads/ thread].
* [http://www.cs.kent.edu/~ruttan/sysprog/lectures/shmem/shmem.html shared memory]


Taustaks on kasulik vaadata korra [https://www.tecmint.com/linux-process-management/ protsesside managementi linuxis].
Kogu info, materjalid ja ülesanded on siinsamas lambda lehel.  


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
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.
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,
Iganädalase [https://teams.microsoft.com/meet/3625241488921?p=xuNcAp5hlNYvG2htjz teamsi loengu-meeti link].
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.
Iganädalase [https://teams.microsoft.com/meet/3561914989815?p=fgLPiNJJUBMDCQPOET teamsi praksi-meeti link].




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


Selle nädala ülesanne on aru saada lukustamise baasmehhanismidest.
See info on vaja 2025 aasta jaoks uuendada, hetkel võib olla vananenud:
Lukustamine on vajalik paralleelsete protsesside juures, mis kasutavad ühist
mälujuppi / muutujat, kas siis näiteks threadide ühises mäluosas või shared memorys.
 
Lukustamise jaoks on mitu erinevat mehhanismi ja kasutusstenaariumi ning nad
vajavad veidi tuge protsessorilt spetsiifiliste atomaarsete käskude näol.


Järgmine nädal liigume lukustamise juurest edasi paralleelsusse andmebaasides: seal
Kui teie meeskonnal on vaja servereid, siis palun täitke ära vorm siin: https://moodle.taltech.ee/mod/assign/view.php?id=444470
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:
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:Locking_v2.ppt|Lukustamise sissejuhatav presentatsioon]]: räägib alustuseks praktilistest vajadustest ja põhimehhanismidest (andmebaaside paralleelsuse teemasse süveneme järgmine nädal).
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>.
* [[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


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


=== Loeng ja töö 16. aprillil ja sellele järgneval nädalal ===
Loe ka [[Vorgurakendused 2 2022 kevad serveritest | serverite kasutamisest]]:
-->


Selle nädala ülesanne on aru saada paralleelsuse kontrollist andmebaasides:
= Hindamine =
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.
Kursuse edukaks sooritamiseks on sul vaja:
* [[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:
* saada arvestatud mõlemid praktikumid
* teha eksam tasemel vähemalt 1/3 eksami kogupunktidest.
* saada praktikumid + eksam kokku vähemalt 50 punkti.


* [https://www.youtube.com/watch?v=GILqZvxD6_g&t=3536s cmu videolengut] mvcc kohta ja vaadata
Kursuse hinde rehkendamisel annavad praktikumid kokku 50% kogupunktidest ning eksam 50%.  
* [https://15445.courses.cs.cmu.edu/fall2018/slides/19-multiversioning.pdf sinna juurde sama loengu slaide]
<!-- NB! Eksamile võtta kaasa pildiga dokument. -->


Eelmise nädala koduülesanne jäi ära, sest järgmine koduülesanne puudutab samavõrd mõlemit teemat:
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.


<b>Selle nädala koduülesanne</b> on ise koostada programm, mis teeb
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.
<!--  
= Nädala ülesanded =


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).
<font color="red">Uus</font> nädalaülesanne, tähtaeg 21 aprill. Seekord on ülesanne veidi keerulisem, aga vabatahtlik ja annab ühe lisapunkti.


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


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:
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).  


[[Hajutatud andmebaaside teema lahtikirjutus ja lugemisülesanded]]
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.


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


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


Teemaks on X-tee, ehk eesti e-riigi põhi-infrastruktuur.
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.
* vaata [https://www.ria.ee/et/riigi-infosusteem/andmevahetuskiht-x-tee.html riigi ametlikku X-tee lühiülevaadet] sh [https://www.youtube.com/watch?v=Qbe5khu62jg&list=PLNPWRftK1TNpOhsckI4QCwdZy0xE-nRvU lühikest tutvustusvideot]
* ja loe <b>süvenemisega</b> läbi lühikesed [[x-tee märkmed loengust]].
* 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
* Kõige minimaalsem SOAP: nii vähe muutusi/täiendusi, kui veel võimalik, et oleks legaalne SOAP. Saatmiseks POST käsuga.
* [https://research.cyber.ee/~janwil/publ/xroadares07final.pdf Ansperi ja Willemsoni] korralik artikkel 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.
* [http://x-road.ee/docs/est/turvaserveri_kasutusjuhend_14.04_lts.pdf X-road security server manual (detailed)]
* REST: GET ja parameetrid URLs.


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 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
* Peale põhitegija Cybernetica on veel hulk huvigruppe/firmasid, kes tegelevad X-tee konsultatsioonide, abi, promomise, arenduse jne jne tegevustega välismaale
* Ametlik (vabavaralise) X-tee arendamine toimub viimastel aastatel koos soomlastega organisatsiooni "Nordic Institute for Interoperability solutions" poolt, nende sait on https://x-road.global ja nende hallatav/arendatav [https://github.com/nordic-institute/X-Road vabavaraline X-tee githubis]




<!--
<!--
:[https://www.ria.ee/public/publikatsioonid/x-road.jpg Big official picture of the state IT-architecture]
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.
:[[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]
-->
-->
= 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.
<!--
<!--
:[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]
Õppejõu poolt praktikumides kirjutatud koodinäited on leitavad siit: https://github.com/martinve/ITI0215_25
-->
-->
<!-- :[[example algorithm for xml serialization of Python data|Example: X-road oriented Soap call tool for Python]] -->
= Aeg, koht =


Semester: kevad<br>
Praktikumitööd on järgmised:
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 1 2026 kevad| 1 praks on P2P rakendus]]: distributed ledgeri komponent.  Grupitöö 1-3 inimest. See on sarnane esimesele praktikumile eelmisest aastast.


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.
* [[Hajussüsteemid prax 2 2026 kevad| 2 praks on faili või ledgeri konsensus hajutatud süsteemis]].  


Teine praktikumiülesanne on hetkeseisuga 2019 aastast, 2020 aastal seda veidi muudetakse. Esimene praktikumiülesanne on up-to-date.
'''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


* [[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.  
** 24. märts [https://teams.microsoft.com/meet/35901742087439?p=JOYLLXpqYojDNRgbj4 kell 11:00 kaitsmiste teamsi link]
* [[Vorgurakendused 2 prax 2 2020 kevad | 2 praks]]: Grupitöö 1-3 inimest. Tähtaeg mai keskpaik, enne auditoorse töö lõppu.
** 24. märts [https://teams.microsoft.com/meet/399321298889734?p=ur8NG5Tw9eY6YelGm7 kell 14:00 kaitsmiste teamsi link]


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


Hindamine: praktikumid annavad kokku 50% kogupunktidest ning eksam teise 50%. Kursuse edukaks sooritamiseks on sul vaja:
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.


* saada arvestatud mõlemid praktikumid
Praktikumijuhendaja on Martin Verrev.
* teha eksam tasemel vähemalt 1/3 eksami kogupunktidest.
* saada praktikumid+eksam kokku vähemalt 50 punkti.
 
NB! Eksamile võtta kaasa pildiga dokument.  


= 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:
248. 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 ===
:<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]


===  P2P sissejuhatus, 30. jaanuar ===
:<b>Võrgunduse baasprotokollide</b> kohta on soovitav lugeda (aga, need ei ole meie kursuse fookuses) [https://beej.us/guide/ siit: Beej's guides]:


:<b>Kohustuslikud osad lugeda</b>:
===  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]
 
=== Hajutatud andmebaasid ja riigi it-süsteemid  ===


===  Riigi IT-infrastruktuuri korraldus ===


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


Kasulikud lisamaterjalid:
* [[Hajutatud andmebaaside teema lahtikirjutus ja lugemisülesanded]]
* [[Lühiülevaade riigi infosüsteemist]] ja [[x-tee märkmed loengust]]


:[https://riha.eesti.ee/ RIHA] ja [https://www.ria.ee/ee/riha.html jutud RIHA kohta]
-->






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