Hajussüsteemid: erinevus redaktsioonide vahel

Allikas: Lambda
Mine navigeerimisribale Mine otsikasti
Martinv (arutelu | kaastöö)
 
(ei näidata 3 kasutaja 860 vahepealset redaktsiooni)
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 [[Hajussüsteemid 2020|2020 aasta materjalide arhiiv]].
Olemas on ka [[Hajussüsteemid 2025|2025 aasta materjalide arhiiv]].
</td>
</td>
</tr>
</tr>
</table>
</table>


= Eksamitulemused =


= Aeg, koht =
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 =
 
18. mai eksamikonsultatsioon oli plaanis ainult teamsis, mitte auditooriumis, kuid tehnilistel põhjustel ei õnnestunud.
 
Selle asemel:


Semester: kevad<br>
(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.
Tulemus: eksam<br>
Hindamise meetod: praktikumide tulemused (40%) pluss iganädalased ülesanded (10%) ja eksam (50%)<br>
Loeng: neljapäeval kell 10:00-11:30, esialgu videoloeng ja hiljem (kui piirangud leevenevad) ruumis U03-103<br>
Praktikum: neljapäeval kell 12:00-13:30, esialgu telco ja hiljem (kui piirangud leevenevad) ruumis ICT-121/122<br>


<!--
(b)meil olid ka väikese ekstra-teamsi 20. ja 25. mail kell 10:00:
<font color="red">NB!</font> Please go to the teams page for the lecture at 4. February: [https://teams.microsoft.com/l/meetup-join/19%3ad2600168806e48d1b7f7d73a4ff8e75d%40thread.tacv2/1612424587111?context=%7b%22Tid%22%3a%223efd4d88-9b88-4fc9-b6c0-c7ca50f1db57%22%2c%22Oid%22%3a%22e3e55dca-e89b-46ae-b8ee-1d158e79281d%22%7d this link] should also take you to the lecture.
.-->


= Lingid ja saidid loengute, prakside ja hinnete jaoks =
* [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


Please join the [https://teams.microsoft.com/l/team/19:d2600168806e48d1b7f7d73a4ff8e75d@thread.tacv2/0 teams site for the course] : you may need the teams joining code: 4raxxh5
= Eksamikorraldus ja materjalid õppimiseks =
<!--
[https://teams.microsoft.com/l/meetup-join/19%3ad2600168806e48d1b7f7d73a4ff8e75d%40thread.tacv2/1612424587111?context=%7b%22Tid%22%3a%223efd4d88-9b88-4fc9-b6c0-c7ca50f1db57%22%2c%22Oid%22%3a%22e3e55dca-e89b-46ae-b8ee-1d158e79281d%22%7d this link] should go directly to the 4. February meeting.
-->


The practice sessions the same day at 12:00 will be in the same teams space. <!--, and most likely [https://teams.microsoft.com/l/meetup-join/19%3ad2600168806e48d1b7f7d73a4ff8e75d%40thread.tacv2/1611826339142?context=%7b%22Tid%22%3a%223efd4d88-9b88-4fc9-b6c0-c7ca50f1db57%22%2c%22Oid%22%3a%229f691ca3-c3f1-419c-a376-022de4181553%22%7d at this link] -->
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.


<font color="red">NB!</font>In case you run into trouble (cannot join or no sound etc) please write via [https://www.facebook.com/tanel.tammet/ fb messenger] or email tanel.tammet at taltech.ee.
Eksamiks registreeruda ei ole vaja.


Olemas on ka [https://moodle.taltech.ee/course/view.php?id=31544 hinnete sait] regamiskood yzwnJ2pL Esialgu seal muidugi hindeid ei ole.
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:


Loengusalvestused leiad teamsist või siin lehel allpool eraldi loengute järel.
* 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>
[https://teams.microsoft.com/l/meetup-join/19%3ad2600168806e48d1b7f7d73a4ff8e75d%40thread.tacv2/1613030308410?context=%7b%22Tid%22%3a%223efd4d88-9b88-4fc9-b6c0-c7ca50f1db57%22%2c%22Oid%22%3a%22e3e55dca-e89b-46ae-b8ee-1d158e79281d%22%7d otselink 11. veebruari loengule]


[https://web.microsoftstream.com/video/bee3f417-724a-41e2-823b-6755d546f82e Link 28. jaanuari loengu salvestusele] alates ca 20-st minutist (algust esialgu ei ole).
Teemad, mille kohta küsimused eksamil tulevad:
-->


= Hindamine =
*    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


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


* saada arvestatud mõlemid praktikumid
Ü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.
* teha eksam tasemel vähemalt 1/3 eksami kogupunktidest.
* saada praktikumid + iganädalased tööd + eksam kokku vähemalt 50 punkti.


Nagu eelnevas kirjas, annavad hindamisel praktikumid kokku 40% kogupunktidest, iganädalased ülesanded 10% ning eksam 50%.  
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! Eksamile võtta kaasa pildiga dokument. -->


= Nädala ülesanded =
= <font color="red">NB!</font> 2. iseseisva töö kaitsmisjärjekord =


Iga nädal antakse väike kohustuslik ülesanne: õppejõule tuleb kas saata emailiga kokkuvõte/mikroessee või laadida see Moodlesse vastava nädala ülesdade üles. Juhul kui
Link kaitsmisjärjekorra moodustamiseks on siin: https://forms.gle/ZF3aCboBSzfEwkgf9
sul on mitu faili, siis palun zipi need enne kokku.
Palun täitke see ära hiljemalt pühapäevaks 24.05 kell 23:59


Kolmanda nädala ülesandeks (<font color="red">11 veebruari</font> loengu järel) on käsitöö: jsonis data esitamine xml-rpc ja SOAPi kujul. Sul on jsoni list [1, 3.1, "kala"] ja on vaja saata see miskile urlile postiga kahel eri viisil (a) XML-RPC esituses (b) SOAPi mingis esituses. Konkreetselt kirjutagi selle listi esitus (a) XML-RPC kujul (b) SOAPi kujul ja emaili mõlemid õppejõule: tanel.tammet at taltech.ee, pane emaili pealkirja sisse sõna hajussüsteemid.
= Eksamipäevad =


Pane tähele, et XML-RPC tahaks saada funktsiooni calli nime. Jsoni datas seda pole, leiuta seega ise mingi dummy nimi.
Siin on täpsustunud esimese kahe eksami ajad:


Pane tähele, et SOAP-i kujul esitus ei ole kuidagi fikseeritud/üheselt selge. Pane oma soapi sõnumisse miski header ja sinna mingi mõistlik pisike näite-sisu. Listi ja data kodeerimiseks tee veidi uuringuid: googelda, et kuidas on kombeks soapis liste esitada (seal ei ole ühte kohustuslikku viisi, vaid pigem soovitavad) ja kuidas on kombeks tüüpe (meil int, float ja string) esitada. Kasuta neid leitud soovituslikke/konventsionaalseid viise. Soapis on võimali asju kodeerida nii rpc kujul (st dummy funktsiooni nimi tuleks leiutada) kui ilma rpc-ta. Soovitav on kasutada ilma rpc-ta stiili, sest meil ju funktsiooni pole teada.  
* 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.


Veel on soovitus mitte üritada tegeleda WSDLi või igasugu WS-I või muude erikeeruliste täeindustega: kirjuta nö basic soapi sõnum ilma taoliste lisadeta.
Eksamiks registreeruda ei ole vaja.


<!--
<!--
Teise nädala ülesandeks (<font color="red">4 veebruari</font> loengu järel) on väikese programmi tegemine, mis toetab (või on mingil moel osa) esimese praksi ülesandest. Sul on vaja teha ja käima panna programm, mis võtab vastu http get ja post päringuid ja saadab tagasi plain tekstina (text/plain) täpselt sellesama postitatud data (kui on post) koos kõigi headeritega (nii geti kui posti puhul). Ehk siis, vastuseks on kättesaadud headerid, tühi rida ja postitatud data plain tekstina. Igasugu muud liiki päringute vastuvõtmine on samuti ok, aga get ja post peaksid kindlasti töötama.
= <font color="red">NB!</font> 11. mai loengu asemel iseõpe =


Programm tuleb võrku üles panna nii, et õppejõud saaks seda proovida: saata brauserist või curliga sinna get või post sõnumeid ja vaadata, mis vastuseks tuleb.


Konkreetne programmeerimiskeel on vabalt valitav. Kõige mõistlikum on teha seda samas keeles, milles programmeerid esimest praksi, alternatiivselt võib õpetlik olla kirjutada ta C keeles.
11. mail loengut ei toimu: vaata läbi allpool 11 mai juures toodud varsem loengusalvestus suurte süsteemide hajutatud skaleerimisest wise näitel.
-->
<!--
-->
<!--
Endiselt on nüüd ja edaspidi praksid IT kolledzhis ICO-316, mitte Mektorys.
-->
<!--
= <font color="red">NB! 13 aprill iseõpe loenguvideo ja materjalidega</font> =


Server, kuhu programmi üles paned, on ka vabalt valitav. Hea mõte on kasutada näiteks tehnikaülikooli mõnda serverit, kus sul on konto (dijkstra.cs.ttu.ee või mõni muu). Kui sul ei ole kuskil serveris kontot, siis tee ise näites digitaloceani serverisse konto või küsi praktikumijuhendajalt abi.
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.


Ära püüa kättesaadud datat kuidagi töödelda, seda pole vaja. Samuti ignoreeri headerite sisu: sul on vaja nad lihtsalt vastusesse tagasi saata, mitte neid sisuliselt kasutada.
Vt ka siin all "nädala ülesanded" blokki: seal on uus ülesanne konkreetselt selle nädala teema kohta.
-->


Lõpuks on sul vaja saata email, kus kirjutad urli, kuhu post sõnumeid katseks saata ja kirjutad paar lauset, et kuidas programm on ehitatud: mis keeles, mis teeke kasutades jms.
= Aeg, koht =


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


-->
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>  
Esimese nädala ülesanne (<b>tähtaeg 3 veebruar</b>) on taustaks ja orientatsiooniks: saada palun email aadressil tanel.tammet at taltech.ee, pane emaili pealkirja sisse sõna hajussüsteemid ja kirjelda seal hästi lühidalt:
* Kas (ja kui, siis umbes milline) kokkupuude on sul olnud kursuse blokkide teemadega
** Protokollid ja P2P,
** Distributed ledger, ajatemplid ja bitcoin,
** Andme-apid, autentimine, pilveteenused, andmete koondamine
** Paralleelrehkendused
** X-tee ja e-riigi IT korraldus
* Kas on mingi blokk või teema, mida kursusele võiks lisada?
* Kas on mingi blokk või teema, mida kursuselt võiks ära võtta?
* Kui sul on ideid või soove praktikumitöö variantide osas (a la ettepanek mõneks teistsuguseks praktikumitööks), siis anna teada.
-->


= Praktikumid =
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.


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


* [[Vorgurakendused 2 prax 1 2021 kevad| 1 praks on P2P rakendus]]: distributed ledgeri komponent. Grupitöö 1-3 inimest.
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.
* [[Vorgurakendused 2 prax 2 2021 kevad | 2 praks]]: See on näide eelmisest aastast, 2021 tuleb siia muutusi.  


Praktikumitööde tähtajad on:
Iganädalase [https://teams.microsoft.com/meet/3625241488921?p=xuNcAp5hlNYvG2htjz teamsi loengu-meeti link].
* 1. praktikumil - 25. märts 2021, eelistatav kui saaks praktikumitöö esitatud varem.  


Iganädalase [https://teams.microsoft.com/meet/3561914989815?p=fgLPiNJJUBMDCQPOET teamsi praksi-meeti link].


Praktikumid ja tööde arvestamise teeme Teamis või muus chatis online standardsel praktikumiajal.


Praktikumitöö esitamiseks tee järgmist:
<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.  
* 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.
= Serverid =
* 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)
 
See info on vaja 2025 aasta jaoks uuendada, hetkel võib olla vananenud:
 
Kui teie meeskonnal on vaja servereid, siis palun täitke ära vorm siin: https://moodle.taltech.ee/mod/assign/view.php?id=444470
 
Linuxi ja Maci all leiad avaliku võtme failist `~/.ssh/id_rsa.pub`. Kui seda pole saad selle genereerida `ssh-keygen` käsuga. Windowsi all vaata avaliku võtme leidmiseks või genereerikmiseks seda õpetust: https://docs.acquia.com/cloud-platform/manage/ssh/generate/
 
Serveri tellinutele on lisatud Moodles kommentaarina selle avalik IP, sisse saate logida kasutajaga ubuntu, nt kui see on 193.40.155.11, siis sisselogimiseks kasuta <code>ubuntu@193.40.156.35</code>.
 
Serveris on lahti port 22. Muude portide kasutamiseks pead tekitama SSH tunneli. Kuidas seda teha vaata 6. praktikumi loengusalvestist ja neid materjale: https://linuxize.com/post/how-to-setup-ssh-tunneling/ ja https://www.ssh.com/academy/ssh/tunneling/example või vaata seda videot: https://www.youtube.com/watch?v=N8f5zv9UUMI
 
Loe ka [[Vorgurakendused 2 2022 kevad serveritest | serverite kasutamisest]]:
-->
-->
* Kui tekib tehnilisi probleeme, kirjuta Martinile otsesõnumiga Teamsis, mis probleem tekkis.


Kui sa parasjagu ei taha praktikumitööd esitada, vaid lihtsalt nõu küsida, siis kasuta põhimõtteliselt sama protseduuri: vaata, et Martinil oleks ligipääs repole, saada talle emailiga link ja võta üles videokõne.
= Hindamine =


= Loengukava =
Kursuse edukaks sooritamiseks on sul vaja:


Kursus jaguneb laias laastus viieks teemaks:
* saada arvestatud mõlemid praktikumid
* teha eksam tasemel vähemalt 1/3 eksami kogupunktidest.
* saada praktikumid + eksam kokku vähemalt 50 punkti.


* P2P ja protokollid (neil teemadel - pluss veidi andme-apidest- esimene praks),
Kursuse hinde rehkendamisel annavad praktikumid kokku 50% kogupunktidest ning eksam 50%.
* Distributed ledger ehk bitcoini alustehnoloogia
<!-- NB! Eksamile võtta kaasa pildiga dokument. -->
* Andme-apid, autentimine, pilvekeskkonnad, andmete hajutamine ja hajutatud andmete koondamine.
* Paralleelrehkendused
* X-tee ja riigi IT-korraldus


Päris hea õpiku saad tasuta alla laadida [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).
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.


Üldist materjali ja kursusi mujalt:
:http://en.wikipedia.org/wiki/Distributed_computing
:http://dcg.ethz.ch/lectures/podc_allstars/index.html
<!-- :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://www.stanford.edu/class/cs244b/


== Protokollid ja P2P ==
<!--
= Nädala ülesanded =


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


===  P2P sissejuhatus, 28. jaanuar ===
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.


[https://web.microsoftstream.com/video/bee3f417-724a-41e2-823b-6755d546f82e Link 28. jaanuari loengu salvestusele] alates ca 20-st minutist (algust esialgu ei ole). Kui see link ei tööta, leiame asap alternatiivse viisi jagamiseks.
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).  


:<b>Kohustuslikud osad lugeda</b>:
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.


:[http://en.wikipedia.org/wiki/Peer-to-peer vikipeedia ülevaade]
<!-- :[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.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] -->
: loengumaterjal: [[Media:P2p_overview.ppt|pikem ülevaade eri P2P tehnoloogiatest]]
:[http://en.wikipedia.org/wiki/Tor_%28anonymity_network%29 TOR wikipedias]


=== Protokollid, 4. veebruar ===
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.


<!-- :[[Media:Protocols.ppt|Loengu raampresentatsioon]] -->
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>


Salvestus teamsis, otselink [https://teams.microsoft.com/l/meetup-join/19%3ad2600168806e48d1b7f7d73a4ff8e75d%40thread.tacv2/1612424587111?context=%7b%22Tid%22%3a%223efd4d88-9b88-4fc9-b6c0-c7ca50f1db57%22%2c%22Oid%22%3a%22e3e55dca-e89b-46ae-b8ee-1d158e79281d%22%7d siin] .
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.


:<b>Kohustuslikud osad lugeda</b>:
* Kõige minimaalsem SOAP: nii vähe muutusi/täiendusi, kui veel võimalik, et oleks legaalne SOAP. Saatmiseks POST käsuga.
* "Normaalses" stiilis SOAP, nagu on tüüpiliselt kombeks (hulk variante, vali lihtsalt üks).
* REST: JSON postitamiseks.
* REST: GET ja parameetrid URLs.


:Http ja json: [[võrgurakenduste protokollid 1]] (loengus kuni https, edasised osad järgmises loengus)
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.
-->


:<b>Täiendavalt soovitav lugeda</b>:
Ü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.-->


:[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]
: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: quic and http fancy stuff, 11 veebruar ===
<!--
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.
-->


[https://web.microsoftstream.com/video/a5cf7604-e575-406d-9f0b-bbf7aa7373f6 otselink loengusalvestusele]
= Praktikumid =


:Http ja json: [[võrgurakenduste protokollid 1]] lõpuosa alates https
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.
: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]


=== Data synchronization, P2P DHT  ja bittorrent, 18 veebruar ===
<!--
Õppejõu poolt praktikumides kirjutatud koodinäited on leitavad siit: https://github.com/martinve/ITI0215_25
-->


[https://web.microsoftstream.com/video/28614bb8-64a5-4d40-965a-4e67b1dc1538 otselink loengusalvestusele]
Praktikumitööd on järgmised:


Sissejuhatus teemasse: [[andmete sünkroniseerimine]].
* [[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.  


<b>DHT (distributed hash tables)</b>:
* [[Hajussüsteemid prax 2 2026 kevad| 2 praks on faili või ledgeri konsensus hajutatud süsteemis]].  
:[http://en.wikipedia.org/wiki/Distributed_hash_table  ülevaade wikipedias]
:Chord:
: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] (seda varianti kasutame ka loengus!).
<!-- :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) -->
:Lisaks tasuks veidi uurida artikleid [http://en.wikipedia.org/wiki/Chord_%28peer-to-peer%29 wikipedia] sissekande lõpus (external links)
:Kademlia:
:Põhimaterjal [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 [https://www.kth.se/social/upload/516479a5f276545d6a965080/3-kademlia.pdf detailsem presentatsioon]
<b>Bittorrent</b>
:[http://www.cs.uiowa.edu/~ghosh/bittorrent.ppt bittorrenti protokoll ja ülevaade]
:[http://en.wikipedia.org/wiki/BitTorrent_%28protocol%29 täiendavalt wikipediast]


== Teemablokk: distributed ledger, ajatemplid ja bitcoin ==
'''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


Soovitav on lugeda neid materjale algusest: põhiasjad on esimestes, ning mida kaugemale edasi, seda detailsemad/spetsiifilisemad materjalid tulevad.
** 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]


=== 25 veebruari loeng: taust ja sissejihatus distributed ledgerisse ===
* 2. praktikumil - 12. mai 2026. Teise praktikumi ülesandes võib  veel tulla väiksemaid muutusi.


Loeng toimub teamsi grupis: süveneme järgmistes paragrahvides antule. Alustame 10:05
Praktikumitöö esitamiseks tee järgmist:
[https://teams.microsoft.com/l/meetup-join/19%3ad2600168806e48d1b7f7d73a4ff8e75d%40thread.tacv2/1614240221642?context=%7b%22Tid%22%3a%223efd4d88-9b88-4fc9-b6c0-c7ca50f1db57%22%2c%22Oid%22%3a%22e3e55dca-e89b-46ae-b8ee-1d158e79281d%22%7d sellelt otselingilt].
* 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.


=== Kriitiline taust järgneva mõistmiseks ===
Praktikumijuhendaja on Martin Verrev.


* 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.
= Loengukava =
* 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://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].
* https://en.wikipedia.org/wiki/Blockchain : lihtsalt ülevaade kogu teemast
* [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 ===
Kursus jaguneb laias laastus kolmeks teemaks:


* 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)
* P2P ja protokollid (neil teemadel - pluss veidi andme-apidest- esimene praks), sh distributed ledger ehk bitcoini alustehnoloogia
* [https://blog.acolyer.org/2015/03/01/cant-we-all-just-agree/ Põhjalikum konsensuse-artiklite-selgituste kogu]
* Paralleelrehkendused ja konsensus, lukustamine, sünkroniseerimine (selle kohta teine praks)
* 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"
* Näited reaalsetest hajutatud süsteemidest


=== Best intro for reading ===
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).


* https://bitsonblocks.net/2015/09/01/a-gentle-introduction-to-bitcoin/
Üldist materjali ja kursusi mujalt:
* https://bitsonblocks.net/2015/09/09/a-gentle-introduction-to-blockchain-technology/
:http://en.wikipedia.org/wiki/Distributed_computing
* https://bitsonblocks.net/2015/09/21/a-gentle-introduction-to-bitcoin-mining/
:http://dcg.ethz.ch/lectures/podc_allstars/index.html
<!-- :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
:https://www.scs.stanford.edu/24sp-cs244b/


=== Põhjalik õpik ===
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.


* Lae alla  [https://d28rh4a8wq0iu5.cloudfront.net/bitcointech/readings/princeton_bitcoin_book.pdf hea tasuta õpik]
== Protokollid ja P2P ==
* 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".


=== Python examples with detailed explanations ===
=== Protokollid, 2. veebruar ===


It is enough to go through one or two of these:
:<b>Kohustuslikud osad lugeda</b>:


* One example http://ecomunsing.com/build-your-own-blockchain
:Http ja json: [[võrgurakenduste protokollid 1]] <!-- (loengus kuni https, edasised osad järgmises loengus) --> <font color="red">E1</font>
* 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 ===
:<b>Täiendavalt soovitav lugeda</b>:


Have a look at the actual bitcoin data, latest blocks and transactions:
:Gaffer on games: [https://gafferongames.com/post/udp_vs_tcp/ UDP vs TCP] ja [https://gafferongames.com/categories/game-networking/ täiendavalt]


* https://blockexplorer.com/
: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]


How does the P2P stuff work, i.e finding nodes:
: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]
* https://bitcoin.stackexchange.com/questions/3536/how-do-bitcoin-clients-find-each-other
* https://en.bitcoin.it/wiki/Satoshi_Client_Node_Discovery
<!-- * https://www.coindesk.com/bitcoin-nodes-need/
* https://bitnodes.earn.com/dashboard/
-->


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


* https://bitcoin.org/en/developer-guide#p2p-network
===  P2P sissejuhatus, 9. veebruar ===
* https://en.bitcoin.it/wiki/Protocol_documentation


Just a big collection of materials and examples: https://github.com/openblockchains/awesome-blockchains
: 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.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://www14.in.tum.de/personen/schmiste/dynamo08.ppt hea detailne ülevaade eri P2P tehnoloogiatest] -->
:[http://en.wikipedia.org/wiki/Tor_%28anonymity_network%29 TOR wikipedias] <font color="red">E2</font>


Some additional OK tutorials:
===  Andmekodeerimine/vahetus: JSON-based tech, REST and API styles 16 veebruar ===


* The Blockchain Explained to Web Developers, Part 1: The Theory. https://marmelab.com/blog/2016/04/28/blockchain-for-web-developers-the-theory.html
Old XML-based tech:
* 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/


<!--
:[[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]


== Andme-apid, autentimine, pilveteenused, andmete koondamine ==
Mainstream: REST, JSON, Graphql:


=== Erinevad API-stiilid ===
Lugemiseks:


* 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!)]  
* [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]
* [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].
* [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]
 
Päris hea ülevaate leiad siit: [https://www.moesif.com/blog/api-guide/ Moesif API guide]
 
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]


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):
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):
303. rida: 312. rida:
*** 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.  
*** 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.
*** 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].
** 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]
** Tutvu Google soovitustega: [https://google.aip.dev/1 AIP].
** 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.
** 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]
** 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]
** 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:
* 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
** Alusta [https://en.wikipedia.org/wiki/GraphQL wikipedia] kiirülevaatest
313. rida: 325. rida:




===  Suured avalikud andme-apid ===
Vt ka suured avalikud andme-apid:


: [https://market.mashape.com/ API-de kogu uurimiseks]
: [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]
: [https://developers.google.com/apis-explorer/#p/ google api explorer]
: [https://google.aip.dev/ google api style guidelines]
: [[Andme-apide märkmed loengust|Andme-apide näiteid]]
: [[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]
: [https://techcrunch.com/2018/04/04/facebook-instagram-api-shut-down/ facebook api limitations/shutdowns in 2018]


===  Autentimine ===
== Paralleelrehkendused ja konsensus ==


: facebook, google, pangalink.
:[[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]
=== Data synchronization, DHT, start distributed ledger: 2.märts  ===
:[http://eid.eesti.ee/index.php/EID_rakendusjuhend#Tehnoloogilised_detailid_ja_taustinfo taustaks id-kaardi kasutusstsenaariumid]
<!--
<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:


:[[Autentimise märkmed: mobiil-ID]]
[http://turing.cs.ttu.ee/~tanel.tammet/dht_blockchain_intro.mp4 Recording]
-->
Sissejuhatus teemasse: [[andmete sünkroniseerimine]]. <font color="red">E1</font>


=== Pilvekeskkonnad  ===
Plokiahel:


[https://support.rackspace.com/white-paper/understanding-the-cloud-computing-stack-saas-paas-iaas/ Understanding cloud computing]
*Alustame [[Kriitiline taust blockchaini mõistmiseks]] teemadesse. Palun süvene neisse materjalidesse lisaks loengus räägitule.
* 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>


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


* [https://aws.amazon.com/ Amazon AWS]
* [http://lambda.ee/w/images/8/84/Blockchain_lecture_1.pdf Dirk Draheimi materjal samal teemal: mitmete komponentide väga head illustratsioonid]
* [http://azure.microsoft.com/ Microsoft Azure]
* [https://cloud.google.com/ Google Cloud]


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


[https://en.wikipedia.org/wiki/OpenStack OpenStack]


Näide: Azure
=== Blockchain continues ja DHT: 9 märts ===


[[Azure märkmed]]
Algul jätkame eelmise loengu lõpu materjalidega.


=== Google appengine, database api, google bigtable and file system stack ===
Seejärel distributed hash tables (DHT) :


http://cloud.google.com/appengine/ AppEngine on nüüd osa Google Cloud platvormist
* [http://en.wikipedia.org/wiki/Distributed_hash_table  ülevaade wikipedias] <font color="red">E1</font>
* Chord:
: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!).


[[Hajutatud failisüsteemide märkmed loengust]]
:Lisaks tasuks veidi uurida artikleid [http://en.wikipedia.org/wiki/Chord_%28peer-to-peer%29 wikipedia] sissekande lõpus (external links)
 
* Kademlia:
== Paralleelrehkendused  ==
: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]


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


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.
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.
362. rida: 379. rida:
Bitcoini plokiahela mehhanism ongi üks konkreetne võimalik mehhanism konsenuse saavutamiseks mitte-üleni-usaldusväärses hajutatud süsteemis.
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.
* 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]).


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


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


=== Esimene osa ===
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?)


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


Selle nädala teemaks on


Näited:
* Rafti konsensusalgoritm
<!-- :[[Java näide loengust]] -->
** [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]


: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].
Taustaks oluline: [[Phase king vs raft vs paxos vs zookeeper]]
:[http://stackoverflow.com/a/16207592 Thread, Queue ja Lock] Pythonis


Presentatsioonid lugemiseks:
Pluss:
* 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.


* [[Media:Locking_v2.ppt|lukustamine]]
=== Fork ja thread: 30 märts ===
* [[Media:na2_ccdb_slides.pdf|Paralleelsus andmebaasides]].


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>


Selle nädala teemaks on parallelismi baasmehhanismid tavaprogrammides, konkreetselt fork,
[[Loengunäited paralleelvärkidest 2026]]
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.


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]
* [http://www.csl.mtu.edu/cs4411.ck/www/NOTES/process/fork/create.html  fork]
* [https://computing.llnl.gov/tutorials/pthreads/ thread].
* [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://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


Taustaks on kasulik vaadata korra [https://www.tecmint.com/linux-process-management/ protsesside managementi linuxis].
Viimaste taustaks on kasulik vaadata korra [https://www.tecmint.com/linux-process-management/ 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ä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
404. rida: 427. rida:
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.
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.


=== 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:
* [[Hajutatud andmebaaside teema lahtikirjutus ja lugemisülesanded]]
* [[Lühiülevaade riigi infosüsteemist]]
* X-road/UXP: [[x-tee märkmed loengust]]
<!-- : this will be covered in detail by Margus Freudenthal in a separate lecture. -->


<!--
=== Lukustamine ja paralleelprotsessid ja transaktsioonid: 13. aprill ===
Loengunäide: TCP (HTTP) socket server


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].
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].
-->
<!--
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 ===
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.


Selle nädala eesmärk on aru saada lukustamise baasmehhanismidest.
Lukustamine on vajalik paralleelsete protsesside juures, mis kasutavad ühist
Lukustamine on vajalik paralleelsete protsesside juures, mis kasutavad ühist
mälujuppi / muutujat, kas siis näiteks threadide ühises mäluosas või shared memorys.
mälujuppi / muutujat, kas siis näiteks threadide ühises mäluosas või shared memorys.
427. rida: 453. rida:
vajavad veidi tuge protsessorilt spetsiifiliste atomaarsete käskude näol.
vajavad veidi tuge protsessorilt spetsiifiliste atomaarsete käskude näol.


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


Loe selles järjekorras ja vaata läbi ka need kolm lühikest loengut:
Loe selles järjekorras:
 
* [[Media:Locking_v2.ppt|Lukustamise sissejuhatav presentatsioon]]: <font color="red">E2</font> räägib alustuseks praktilistest vajadustest ja põhimehhanismidest.
* [[Media:na2_sync.pdf|Detailsem konspekt lukustamise kohta]]: <font color="red">E2</font> semafor, mutexid ja detailselt spinlockist. Loe seda <b>aeglaselt</b>!
 
Optsionaalselt võib olla abi nendest lukustamist seletavatest videotest:


* [[Media:Locking_v2.ppt|Lukustamise sissejuhatav presentatsioon]]: räägib alustuseks praktilistest vajadustest ja põhimehhanismidest (andmebaaside paralleelsuse teemasse süveneme järgmine nädal).
* [[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=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=yB8sm-pwvZo spinlocki riistvara-tuge seletav loeng]
440. rida: 468. rida:


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


=== Paralleliseerimise automatiseerimine ja klastrid ===
Kõigepealt paar tähelepanekut viimase nädalaülesande kohta.


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]


Selle nädala eesmärk on aru saada paralleelsuse kontrollist andmebaasides:  
For the [https://cirpass2.eu/ digital product passport] architecture, ideas and politics around it see:
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.
* [https://data.europa.eu/en/news-events/news/eus-digital-product-passport-advancing-transparency-and-sustainability EU digital passport]
* [[Media:na2_ccdb.pdf|Konspekt]], käsitleb sama teemat oluliselt põhjalikumalt kui eelnevad slaidid. <b>Loe aeglaselt</b>!
* [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]


Soovitav on täiendavalt vaadata konspektis käsitletud mvcc jaoks:
<!--
=== EU digital passport and the CIRPASS project: 20 April, second part ===


* [https://www.youtube.com/watch?v=GILqZvxD6_g&t=3536s cmu videolengut] mvcc kohta ja vaadata
Tanel will focus on the details of the [https://cirpass2.eu/ digital product passport] architecture, ideas and politics around it.
* [https://15445.courses.cs.cmu.edu/fall2018/slides/19-multiversioning.pdf sinna juurde sama loengu slaide]


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


:[https://en.wikipedia.org/wiki/MapReduce Mapreduce framework]
=== Exploring some very large distributed systems: 27 April ===
<!--:[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]


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


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:
* [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]


[[Hajutatud andmebaaside teema lahtikirjutus ja lugemisülesanded]]
=== Combined machine learning (federated learning): 4 May ===


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


:[[Integreerimise lühimärkmed]]
Lecture by Priit Järv, focusing on applied research in combining machine learning by different hospitals / medical facilities.
:[http://research.cs.wisc.edu/dibook/slides/Chapter_10.ppt data warehousing]


Hajutamine:
[[Media:Fl.pdf|Lecture presentation]]


:[[Hajutamise lühimärkmed]]
=== Microservices, scaling large systems: 11 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:
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.


: [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]
=== Consultation for the exam: 18 May, <b>teams only</b> ===
: [https://en.wikipedia.org/wiki/Proof-of-work_system bitcoinist tuttav proof-of-work]


Hulk teemasid põhjalikult:
Overview of the exam and consultation.


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


Detailsed lisamaterjalid:


: [http://www.postgresql.org/docs/current/interactive/high-availability.html Postgres high availability]
<!-- : [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]


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




===  X-tee  ===
<!--


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.
=== Data warehouses, data lineage and related issues ===


Tööta ise läbi järgmised materjalid:
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].


Esimese asjana
===  Microservices, scaling large systems and related ===
* 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:
Lecture will be on teams only (not the lecture room) and very briefly at the beginning: administrative stuff.
* Ansperi ja Willemsoni korralik lühike artikkel [https://research.cyber.ee/~janwil/publ/xroadares07final.pdf X-tee sisulise tehnilise ülevaatega] 
* [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.
* 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
* 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].
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.


Veel on oluline teada:
===  Consultation for the exam ===
* 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]
=== X-road / UXP: 22. April ===
* 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]


The X-road/UXP (see [[x-tee märkmed loengust]]) will be covered in detail by Margus Freudenthal.




Kasulikud lisamaterjalid:
The X-road/UXP (see [[x-tee märkmed loengust]]) will be covered in detail by Margus Freudenthal.


:[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]
-->
-->
:[[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]
=== Stream processing, message queues ja Apache Kafka ===
 
Materials to be added later.
 
-->
-->
<!--
<!--
:[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]] -->
:[http://research.cyber.ee/~jan/publ/xroadares07final.pdf Paper by Ansper and Willemson]


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


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


* Kõigepealt loe süvenemisega läbi ja tutvu kõigi sealtoodud linkidega: <b>[[Lühiülevaade riigi infosüsteemist]].</b>
Kaks teemat:
* 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.


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


Kasulikud lisamaterjalid:
-->


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