Hajussüsteemid: erinevus redaktsioonide vahel

Allikas: Lambda
Mine navigeerimisribale Mine otsikasti
Resümee puudub
 
(ei näidata 3 kasutaja 730 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 2021|2021 aasta materjalide arhiiv]].
Olemas on ka [[Hajussüsteemid 2025|2025 aasta materjalide arhiiv]].
</td>
</td>
</tr>
</tr>
</table>
</table>


= Eksamitulemused =
Siin:
* [[Esimese (27 mai) hajussüsteemid 2026 eksami tulemused]]
* [[Teise (1 juuni) hajussüsteemid 2026 eksami tulemused]]
* [[Kolmanda (8 juuni) hajussüsteemid 2026 eksami tulemused]]
= Eksamiks konsultatsioonid =
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: [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.
(b)meil olid ka väikese ekstra-teamsi 20. ja 25. mail kell 10:00:
* [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
= 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:
* 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>
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.
= <font color="red">NB!</font> 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.
<!--
= <font color="red">NB!</font> 11. mai loengu asemel iseõpe =
11. mail loengut ei toimu: vaata läbi allpool 11 mai juures toodud varsem loengusalvestus suurte süsteemide hajutatud skaleerimisest wise näitel.
-->
<!--
-->
<!--
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> =
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.
Vt ka siin all "nädala ülesanded" blokki: seal on uus ülesanne konkreetselt selle nädala teema kohta.
-->


= Aeg, koht =
= Aeg, koht =
21. rida: 105. rida:
Semester: kevad<br>
Semester: kevad<br>
Tulemus: eksam<br>
Tulemus: eksam<br>
Hindamise meetod: praktikumide tulemused (40%) pluss iganädalased ülesanded (10%) ja eksam (50%)<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>  


Loeng: Teisipäeval 12:00-13:30 ruumis U06A-201<br>
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.
Praktikum: kolmapäeval kell 10:00-11:30 ruumis ICT-A1<br>


Plaan on teha osa loengutest kohapeal (esialgu kindlasti kohapeal) ja osa distantsilt. Väga suure tõenäosusega salvestame loenguid.
Kogu info, materjalid ja ülesanded on siinsamas lambda lehel.  
Esimese loengu teamsi salvestuse leiad altpoolt esimese loengu (25 jaanuar) alt.


Praksidega samamoodi: esimesed praksid teeme kohapeal, aga üritan ka salvestada / üle kanda, edaspidi tõenäoliselt tuleb rohkem prakse distantsilt (teamsis).
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.


Kogu info, materjalid ja ülesanded on lambda lehel, kursuse [https://moodle.taltech.ee/course/view.php?id=31544 Moodles] hoitakse jooksvaid tulemusi. Moodle iseregistreerumise võti on <strong>yzwnJ2pL</strong>
Iganädalase [https://teams.microsoft.com/meet/3625241488921?p=xuNcAp5hlNYvG2htjz teamsi loengu-meeti link].


Palun liitu kursuse [https://teams.microsoft.com/l/team/19%3ar_PBOvBcdzek7w8YGQ-XvROAcmkf2ihNT4nrRfzASGQ1%40thread.tacv2/conversations?groupId=a41321c3-235b-4910-bc47-3941b8a5dee1&tenantId=3efd4d88-9b88-4fc9-b6c0-c7ca50f1db57 teamsi grupiga], iseregistreerumise võti on <strong>ebzlg49</strong>.
Iganädalase [https://teams.microsoft.com/meet/3561914989815?p=fgLPiNJJUBMDCQPOET teamsi praksi-meeti link].




<font color="red">NB!</font> Allpool olev blokkide struktuur on põhiliselt sama, kui 2021 aastal. Toimunud loengute materjalid ja salvestused osaliselt uuendatakse/muudetakse: kogu info veel mitte toimunud loengute kohta on esialgne. Ülesanded ja praksid, välja arvatud teine praks, on up to date ja mõeldud tegemiseks :)
<font color="red">NB!</font> Allpool olev blokkide struktuur on sarnane, kui 2025 aastal, aga mitte päris sama. Toimunud loengute materjalid ja salvestused osaliselt uuendatakse/muudetakse: kogu info veel mitte toimunud loengute ja veel mitte selgitatud/uuendatud prakside kohta on esialgne.  
<!--
= Serverid =
 
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]]:
-->


= Hindamine =
= Hindamine =
44. rida: 144. rida:
* saada arvestatud mõlemid praktikumid
* saada arvestatud mõlemid praktikumid
* teha eksam tasemel vähemalt 1/3 eksami kogupunktidest.
* teha eksam tasemel vähemalt 1/3 eksami kogupunktidest.
* saada praktikumid + iganädalased tööd + eksam kokku vähemalt 50 punkti.
* saada praktikumid + eksam kokku vähemalt 50 punkti.


Kursuse hinde rehkendamisel annavad praktikumid kokku 40% kogupunktidest, iganädalased ülesanded 10% ning eksam 50%.  
Kursuse hinde rehkendamisel annavad praktikumid kokku 50% kogupunktidest ning eksam 50%.  
<!-- NB! Eksamile võtta kaasa pildiga dokument. -->
<!-- NB! Eksamile võtta kaasa pildiga dokument. -->


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.
<!--
= Nädala ülesanded =
= Nädala ülesanded =


Mõnel nädalal antakse väike kohustuslik ülesanne: õppejõule tuleb kas saata emailiga kokkuvõte/mikroessee või laadida see Moodlesse vastava nädala ülesdade üles. Juhul kui sul on mitu faili, siis palun zipi need enne kokku.
<font color="red">Uus</font> nädalaülesanne, tähtaeg 21 aprill. Seekord on ülesanne veidi keerulisem, aga vabatahtlik ja annab ühe lisapunkti.


Esimese nädala ülesanne (<b>tähtaeg 2 veebruar</b>) on taustaks ja orientatsiooniks: saada palun email aadressil tanel.tammet at taltech.ee, pane emaili pealkirja sisse sõna <b>hajussüsteemid</b> ja kirjelda seal hästi lühidalt:
Sul on vaja koostada eksperimentaalprogramm, mis demonstreerib, et liitmine ei ole atomaarne operatsioon. Ehk siis, kui x=10 ja siis teed x=x+20,
* Kas (ja kui, siis umbes milline) kokkupuude on sul olnud kursuse blokkide teemadega
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.
** 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 =
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).


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


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


'''Praktikumitööde tähtajad on''':
Sinu ülesanne on eksperimenteerida, kuni taoline viga tekib, ja tuvastada umbkaudne tõenäosus, et ta mingi konkreetse ajaühiku jooksul vea annab.
* 1. praktikumil - 23. märts 2021, eelistatav kui saaks praktikumitöö esitatud varem.
-->
* 2. praktikumil - 11. mai 2021.  
<!--
Esimene nädalaülesanne, tähtaeg 9. märts: erinevate API-stiilide väike harjutus.


Praktikumitöö esitamiseks tee järgmist:
Võtame wikipedia näite XML RPC callist:
* Pane oma töö TTÜ gitlabi või avalikku githubi või gitlabi reposse.
<pre>
* Pane repo esilehele loetav ülevaade protokollidest, mida su töö kasutab, koos töö üldpõhimõtete kirjeldusega.
<?xml version="1.0"?>
* 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.
<methodCall>
  <methodName>examples.getStateName</methodName>
  <params>
    <param>
        <value><i4>40</i4></value>
    </param>
  </params>
</methodCall>
</pre>


Praktikumijuhendaja on Martin. Tanel assisteerib ja vajadusel asendab Martinit.
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.


== Ülesanne 2. praktikumiks ==
* 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.


02. veebruari prakikumiks peaksite olema:
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.
-->


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


Nädala jooksul lisandub siia Moodle link ülesande esitamiseks.


<!--
<!--
* Järgi [https://docs.google.com/document/d/1njqwyPOXLfBPtdDzRTgviYfz3UYZCra4DscS9B1kqFI/edit#heading=h.th8r0ub1wt9r ajakava]
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.
-->
= 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.
<!--
<!--
* Täida vorm: https://forms.gle/zZnBedSPqpPd8CKF6, selle alusel moodustub kaitsmisgraafik.
Õppejõu poolt praktikumides kirjutatud koodinäited on leitavad siit: https://github.com/martinve/ITI0215_25
* Praktikumiajal jälgi seda linki [https://docs.google.com/document/d/1njqwyPOXLfBPtdDzRTgviYfz3UYZCra4DscS9B1kqFI/edit?usp=sharing | Hajussüsteemide praktikumi ajakava]. Seal on kirjas, ajagraafik mis grupid on kaitsnud ja millised järgmisena kaitsevad.
-->
-->
<!--
* Kui aeg jõuab sinu grupini, võtab Martini sinuga ülesse videokõne Teamasis. Teamsi-kõnes peaksid kohal olema kõik meeskonna liikmed.
* Kui tekib tehnilisi probleeme, kirjuta Martinile otsesõnumiga Teamsis, mis probleem tekkis.


Kui sa parasjagu ei taha praktikumitööd esitada, vaid lihtsalt nõu küsida, siis kasuta põhimõtteliselt sama protseduuri: vaata, et Martinil oleks ligipääs repole, saada talle emailiga link ja võta üles videokõne.
Praktikumitööd on järgmised:
-->
 
* [[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.
 
* [[Hajussüsteemid prax 2 2026 kevad| 2 praks on faili või ledgeri konsensus hajutatud süsteemis]].
 
'''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
 
** 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]
 
* 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 =
= Loengukava =


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


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


Päris hea õpiku saad tasuta alla laadida [https://www.distributed-systems.net/index.php/books/ds3/  siit].  Meie kursuse sisu on sellest õpikust küllalt erinev, samas on ka ühisosi. 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).
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).
123. rida: 249. rida:
<!-- :http://www.eecs.harvard.edu/cs262/ DEAD -->
<!-- :http://www.eecs.harvard.edu/cs262/ DEAD -->
:http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-824-distributed-computer-systems-engineering-spring-2006/index.htm
:http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-824-distributed-computer-systems-engineering-spring-2006/index.htm
:http://www.stanford.edu/class/cs244b/
:https://www.scs.stanford.edu/24sp-cs244b/
 
NB! Allolevad loengumaterjalid <b>tuleviku</b> kohta on pärit 2024 aastast, neid kursuse käigus uuendatakse ja muudetakse. Juba toimunud või antud nädala loengumaterjalid on uuendatud 2025 aasta jaoks.


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


 
===  Protokollid, 2. veebruar ===
===  P2P sissejuhatus, 25. jaanuar ===
 
[https://livettu.sharepoint.com/sites/ITI0215Hajusssteemid2022/Shared%20Documents/General/Recordings/Hajuss%C3%BCsteemide%20loeng%201%2025.%20jaanuar-20220125_120724-Meeting%20Recording.mp4?web=1 Esimese loengu salvestus teamsi grupis (esimesed ca 10 minutit kahjuks puudu)]


:<b>Kohustuslikud osad lugeda</b>:
:<b>Kohustuslikud osad lugeda</b>:


: loengumaterjal: [[Media:P2p_overview.ppt|pikem ülevaade eri P2P tehnoloogiatest]]
:Http ja json: [[võrgurakenduste protokollid 1]] <!-- (loengus kuni https, edasised osad järgmises loengus) --> <font color="red">E1</font>
:[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] -->
:[http://en.wikipedia.org/wiki/Tor_%28anonymity_network%29 TOR wikipedias]
 
=== Protokollid: 1 veebruar ===


<!-- :[[Media:Protocols.ppt|Loengu raampresentatsioon]] -->
:<b>Täiendavalt soovitav lugeda</b>:
 
[https://teams.microsoft.com/l/meetup-join/19%3Ar_PBOvBcdzek7w8YGQ-XvROAcmkf2ihNT4nrRfzASGQ1%40thread.tacv2/1643709475972?context=%7B%22Tid%22%3A%223efd4d88-9b88-4fc9-b6c0-c7ca50f1db57%22%2C%22Oid%22%3A%22e3e55dca-e89b-46ae-b8ee-1d158e79281d%22%7D teamsi meetingu link]
 
:<b>Kohustuslikud osad lugeda</b>:


:Http ja json: [[võrgurakenduste protokollid 1]] (loengus kuni https, edasised osad järgmises loengus)
:Gaffer on games: [https://gafferongames.com/post/udp_vs_tcp/ UDP vs TCP] ja [https://gafferongames.com/categories/game-networking/ täiendavalt]
 
:<b>Täiendavalt soovitav lugeda</b>:


:[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]
: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, http2 ja http3: fancy stuff ===


:Http ja json: [[võrgurakenduste protokollid 1]] lõpuosa alates https
: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]
: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 ===
:<b>Võrgunduse baasprotokollide</b> kohta on soovitav lugeda (aga, need ei ole meie kursuse fookuses) [https://beej.us/guide/ siit: Beej's guides]:


Sissejuhatus teemasse: [[andmete sünkroniseerimine]].
===  P2P sissejuhatus, 9. veebruar ===


<b>DHT (distributed hash tables)</b>:
: loengumaterjal: [[Media:P2p_overview.ppt|pikem ülevaade eri P2P tehnoloogiatest]] <font color="red">E1</font>
:[http://en.wikipedia.org/wiki/Distributed_hash_table  ülevaade wikipedias]
:[http://en.wikipedia.org/wiki/Peer-to-peer vikipeedia ülevaade] <font color="red">E2</font>
:Chord:
<!-- :[http://www.srdc.metu.edu.tr/webpage/seminars/p2p/P2P.ppt hea paraja detailsusega sissejuhatus] -->
: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!).
<!-- :[http://www.cs.ucy.ac.cy/courses/EPL420/Slides/Chapter2_4ed-P2P.ppt ülevaatepresentatsioon] -->
<!-- :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) -->
<!-- :[http://www.it.lut.fi/comlab/ssotc/ssotc08/presentations/Lappeenranta_summer_school_Jukka_K_Nurminen.ppt alternatiivne ülevaatepresentatsioon] -->
:Lisaks tasuks veidi uurida artikleid [http://en.wikipedia.org/wiki/Chord_%28peer-to-peer%29 wikipedia] sissekande lõpus (external links)
<!-- :[http://www14.in.tum.de/personen/schmiste/dynamo08.ppt hea detailne ülevaade eri P2P tehnoloogiatest] -->
:Kademlia:
:[http://en.wikipedia.org/wiki/Tor_%28anonymity_network%29 TOR wikipedias] <font color="red">E2</font>
: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]


== Distributed ledger ja bitcoin ==
===  Andmekodeerimine/vahetus:  JSON-based tech, REST and API styles 16 veebruar ===


Old XML-based tech:


=== Taust ja sissejuhatus distributed ledgerisse ===
<!--
:[[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]


Loengu käigus süvenesime [[Kriitiline taust blockchaini mõistmiseks]]
Mainstream: REST, JSON, Graphql:
teemadesse. Palun süvene neisse materjalidesse lisaks loengus räägitule.


=== Blockchaini funktsioneerimine ===
Lugemiseks:


Baseerudes eelmise loengu taustale, uurime bitcoini näitel, kuidas blockchain tervikuna reaalselt funktsioneerib.
* 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!)]
Kasutame seejuures hulka [[Blockchaini materjale]].
* [http://www.odata.org/ odata.org: microsoft/oasis recommendations for rest style]
 
* [https://graphql.org/ Graphql start] and [https://blog.pusher.com/rest-versus-graphql/ graphql vs rest].
Eelmise loengu materjalidest vaata üle [https://anders.com/blockchain/ blockchaini demo]: vajuta üleval "Hash", "Block", "Blockchain" linkidele ja proovi igal lehel ise datat muuta ja "Mine" nupule vajutada. "Mine" teeb proof-of-worki ehk otsib random stringi (nonce) mille lisamisel datale saame mitme nulliga algava hashi. Hea mõte on vaadata ka  [https://andersbrownworth.com/blockchain/ sama saidi videosid]
 
=== Blockchaini väike lisa ja protokollide algus (REST) ===
 
Hakatuseks uurime veidi täiendavat infot blockchaini kohta. Eriti abiks oleks tudengite tähelepanekud ja küsimused.


Keerulisemat soovitavat materjali, kui konsensuseteema tundus huvitav:
Päris hea ülevaate leiad siit: [https://www.moesif.com/blog/api-guide/ Moesif API guide]
* [https://www.researchgate.net/profile/Vincent-Gramoli/publication/319984012_From_blockchain_consensus_back_to_Byzantine_consensus/links/5b8a8a704585151fd140cc1a/From-blockchain-consensus-back-to-Byzantine-consensus.pdf?origin=publication_detail From blockchain consensus back to Byzantine consensus]
* [https://res.mdpi.com/d_attachment/mathematics/mathematics-08-01782/article_deploy/mathematics-08-01782-v2.pdf A Survey on Blockchain Consensus witha Performance Comparison of PoW, PoS and Pure PoS]


Siis jätkame API protokollide teema alustusega, esimese asjana REST: materjalide jaoks vaata järgmist blokki lehel.
Lihtsa REST-tüüpi APIde head näited on LLMide apid:
 
* [https://developers.openai.com/api/reference/overview/ openai gpt API]
== Andme-apid, autentimine, pilveteenused, andmete koondamine ==
* [https://ai.google.dev/gemini-api/docs google gemini API]
 
=== Erinevad API-stiilid  ===
 
* [https://en.wikipedia.org/wiki/Representational_state_transfer rest wikipedias] ja [http://www.restapitutorial.com/ rest tutorial (vt linke all!)]
* [http://www.odata.org/ odata.org: microsoft/oasis recommendations for rest style]
* [https://docs-apis.apigee.io/files/Web-design-the-missing-link-ebook-2016-11.pdf api design book download] or [https://pages.apigee.com/eBook-Web-API-Design-The-Missing-Link-reg.html?int_source=resources-main&int_medium=website&int_campaign=ebook&int_content=web-api-design-missing-link api design book (must register)]
* [https://graphql.org/ Graphql start] and [https://blog.pusher.com/rest-versus-graphql/ graphql vs rest] and [https://medium.com/codingthesmartway-com-blog/rest-vs-graphql-418eac2e3083 similar take on rest vs graphql] and [https://blog.graph.cool/how-to-wrap-a-rest-api-with-graphql-8bf3fb17547d wrap rest in graphql]


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):
221. 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]]
** Väike [[pure-rest/odata/cgi stiilide võrdlus]]
230. rida: 323. rida:
** Loe läbi [https://graphql.org/learn/ grapqhl kiirtutorial] (lehekülgede lõpus link järgmisele)
** Loe läbi [https://graphql.org/learn/ grapqhl kiirtutorial] (lehekülgede lõpus link järgmisele)


====  Suured avalikud andme-apid ====
 
<!--
 
: [https://market.mashape.com/ API-de kogu uurimiseks]
Vt ka suured avalikud andme-apid:
: [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]


=== Teemad varuks ===
== Paralleelrehkendused ja konsensus ==


====  Autentimine ====


See teema jääb varuks kursuse lõpupoole, kui meil jääb aega. Vastasel korral jätame teema välja.
=== Data synchronization, DHT, start distributed ledger: 2.märts  ===
<!-- Palun võta ühendust kas skypes taneltammet või teamsis või kirjuta tanel.tammet@ttu.ee. Eeskätt võiks esitada oma prakse need tiimid, kes pole veel Martinile oma praksi esitanud. Praksi esitamine tähendab, et annad skypes või teamsis vms screen sharingu abil demo, selgitades seejuures, kuidas asjad töötavad ja lõpuks demod veidi huvitavamaid kohti koodist. Samuti on vaja välja tuua, kes tiimist demo ajal kohal on / esitavad.
<!--
<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:


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


: facebook, google, pangalink.
Plokiahel:
:[[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]
*Alustame [[Kriitiline taust blockchaini mõistmiseks]] teemadesse. Palun süvene neisse materjalidesse lisaks loengus räägitule.
:[http://eid.eesti.ee/index.php/EID_rakendusjuhend#Tehnoloogilised_detailid_ja_taustinfo taustaks id-kaardi kasutusstsenaariumid]
* 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>


:[[Autentimise märkmed: mobiil-ID]]
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.


==== Pilvekeskkonnad  ====
* [http://lambda.ee/w/images/8/84/Blockchain_lecture_1.pdf Dirk Draheimi materjal samal teemal: mitmete komponentide väga head illustratsioonid]


See teema jääb varuks kursuse lõpupoole, kui meil jääb aega. Vastasel korral jätame teema välja.
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]


Suured:


* [https://aws.amazon.com/ Amazon AWS]
=== Blockchain continues ja DHT: 9 märts ===
* [http://azure.microsoft.com/ Microsoft Azure]
* [https://cloud.google.com/ Google Cloud]


Pilveteenuse tarkvara:
Algul jätkame eelmise loengu lõpu materjalidega.


[https://en.wikipedia.org/wiki/OpenStack OpenStack]
Seejärel distributed hash tables (DHT) :


Näide: Azure
* [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!).


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


==== Google appengine, database api, google bigtable and file system stack ====
=== Konsensus hajutatud süsteemides: 16. märts. ===


See teema jääb varuks kursuse lõpupoole, kui meil jääb aega. Vastasel korral jätame teema välja.
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.


http://cloud.google.com/appengine/ AppEngine on nüüd osa Google Cloud platvormist
Bitcoini plokiahela mehhanism ongi üks konkreetne võimalik mehhanism konsenuse saavutamiseks mitte-üleni-usaldusväärses hajutatud süsteemis.


[[Hajutatud failisüsteemide märkmed loengust]]


== Paralleelrehkendused  ==
* 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]).


=== Konsensus hajutatud süsteemides ===
* 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.


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


Bitcoini plokiahela mehhanism ongi üks konkreetne võimalik mehhanism konsenuse saavutamiseks mitte-üleni-usaldusväärses hajutatud süsteemis.
=== Konsensus hajutatud süsteemides jätkub 23. märts ===


<!--
Selle nädala teemaks on  
* 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)
-->
* 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]).


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


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).
Taustaks oluline: [[Phase king vs raft vs paxos vs zookeeper]]


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.


=== Fork ja thread ===
=== Fork ja thread: 30 märts ===


:Loengumaterjal: [[Media:Processes_fork_thread.pptx|Processes_fork_thread.pptx]], [[Media:Processes_fork_thread.pdf|Processes_fork_thread.pdf]].
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
* [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
322. 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.
Loengunäide: TCP (HTTP) socket server
 
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 ===
 
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].


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].
Vt ka ülal "nädala ülesanded" blokki: seal on uus ülesanne konkreetselt selle nädala teema kohta.
-->
<!--
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 ===
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.
344. rida: 453. rida:
vajavad veidi tuge protsessorilt spetsiifiliste atomaarsete käskude näol.
vajavad veidi tuge protsessorilt spetsiifiliste atomaarsete käskude näol.


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


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


* [[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>!


Loe selles järjekorras ja vaata läbi ka need kolm lühikest loengut:
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]
359. rida: 468. rida:


Lisaks võib lugeda:
Lisaks võib lugeda:
:[[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.


=== Paralleelsus andmebaasides ===


Selle nädala eesmärk on aru saada paralleelsuse kontrollist andmebaasides:  
=== Nädalaülesandest, X-road / UXP and EU digital passport and the CIRPASS project: 20 April ===
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:
The X-road/UXP (see [[x-tee märkmed loengust]]) <font color="red">E2</font> will be covered in detail by Margus Freudenthal.
-->


:[[Media:na2_ccdb_slides.pdf|Paralleelsus andmebaasides (slaidid)]].
Kõigepealt paar tähelepanekut viimase nädalaülesande kohta.
:[[Media:na2_ccdb.pdf|Konspekt]], käsitleb teemat oluliselt põhjalikumalt kui loeng/slaidid.  <b>Loe aeglaselt</b>!


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


* [https://www.youtube.com/watch?v=GILqZvxD6_g&t=3536s cmu videolengut] mvcc kohta ja vaadata
For the [https://cirpass2.eu/ digital product passport] architecture, ideas and politics around it see:
* [https://15445.courses.cs.cmu.edu/fall2018/slides/19-multiversioning.pdf sinna juurde sama loengu slaide]
 
* [https://data.europa.eu/en/news-events/news/eus-digital-product-passport-advancing-transparency-and-sustainability EU digital passport]
* [https://eur-lex.europa.eu/eli/reg/2024/1781/oj  ESPR act: the law introducing EU digital passports]
* [https://cirpass2.eu/ CIRPASS-2: the EU R&D project for developing the digital passport architecture, knowledge representation etc]
* [[Media:cirpass_draft.pdf|draft full architecture]]
* [[Media:dpp_simple.pdf|draft simple architecture]]
* [[Media:dpp_simple_2024.pdf|early draft of the simple architecture]]
* [https://link.springer.com/chapter/10.1007/978-3-032-11976-6_23 our recent paper]


<!--
<!--
:[https://en.wikipedia.org/wiki/MapReduce Mapreduce framework] -->
=== EU digital passport and the CIRPASS project: 20 April, second part ===
<!--:[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]]
Tanel will focus on the details of the [https://cirpass2.eu/ digital product passport] architecture, ideas and politics around it.
:Mapreduce [http://research.google.com/archive/mapreduce.html klassikaline põhiartikkel]
 
:memcached
Some links and materials:
:[http://www.majordojo.com/2007/03/memcached-howto.php memcached ülevaade]
* [https://data.europa.eu/en/news-events/news/eus-digital-product-passport-advancing-transparency-and-sustainability EU digital passport
* [https://eur-lex.europa.eu/eli/reg/2024/1781/oj  ESPR act: the law introducing EU digital passports]
* [https://cirpass2.eu/ CIRPASS-2: the EU R&D project for developing the digital passport architecture, knowledge representation etc]
* [[Media:cirpass_draft.pdf|draft full architecture]]
* [[Media:dpp_simple.pdf|draft simple architecture]]
* [[Media:dpp_simple_2024.pdf|early draft of the simple architecture]]
-->
-->


=== Hajutatud andmebaasid ===
=== Exploring some very large distributed systems: 27 April ===
 
A reading session: we will read and attempt to understand together some case studies.
 
* [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]
 
=== Combined machine learning (federated learning): 4 May ===


Teemaks on praktilised meetodid hajutatud andmebaaside juures (mitte siis P2P): eesmärk aru saada, (a) miks on praktilised andmebaasid vahel hajutatud ja mis see konkreetselt võib tähendada (b) mis probleemid seejuures tekivad ja kuidas neid probleeme lahendatakse, paremini või halvemini. Detailid ja lugemist on järgmisel eraldi wikilehel:
Oluline tagapõhi: [https://en.wikipedia.org/wiki/Differential_privacy differential privacy] <font color="red">E2</font>


[[Hajutatud andmebaaside teema lahtikirjutus ja lugemisülesanded]]
Lecture by Priit Järv, focusing on applied research in combining machine learning by different hospitals / medical facilities.
 
[[Media:Fl.pdf|Lecture presentation]]
 
=== Microservices, scaling large systems: 11 May ===
 
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.
 
=== Consultation for the exam: 18 May, <b>teams only</b> ===
 
Overview of the exam and consultation.
 
 
 
 
 
 
<!--
 
=== Data warehouses, data lineage and related issues ===
 
The talk will be given by Kalle Tomingas from [https://www.oriongovernance.com/ Orion governance]. Vt taustaks ka [https://digikogu.taltech.ee/et/item/a05c55e4-054a-4758-9b0b-e2671105055c dissertatsiooni].
 
===  Microservices, scaling large systems and related ===
 
Lecture will be on teams only (not the lecture room) and very briefly at the beginning: administrative stuff.
 
The main task is to look through the whole lecture recording from 2023 about [http://turing.cs.ttu.ee/~tanel.tammet/hajussysteemid_skaleerimine.mp4 scaling large distributed systems]. Slides in English, speech in Estonian.
 
===  Consultation for the exam ===
-->
<!--
<!--
Integreerimine:  
=== X-road / UXP: 22. April ===
 
The X-road/UXP (see [[x-tee märkmed loengust]]) will be covered in detail by Margus Freudenthal.


:[[Integreerimise lühimärkmed]]
:[http://research.cs.wisc.edu/dibook/slides/Chapter_10.ppt data warehousing]


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


:[[Hajutamise lühimärkmed]]
:[https://memcached.org/ memcached] ja [https://redis.io/ redis] ja [https://www.imaginarycloud.com/blog/redis-vs-memcached/ nende võrdlus] ning sarnane [https://www.linkedin.com/pulse/memcached-vs-redis-which-one-pick-ranjeet-vimal/ memcached vs redis]
:[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:
=== Stream processing, message queues ja Apache Kafka ===
 
Materials to be added later.


: [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]
: [https://en.wikipedia.org/wiki/Proof-of-work_system bitcoinist tuttav proof-of-work]
-->
-->
<!--
<!--
Hulk teemasid põhjalikult:


:[http://christophermeiklejohn.com/distributed/systems/2013/07/12/readings-in-distributed-systems.html readings in distributed databases]
=== Hajutatud andmebaasid ja riigi it-süsteemid  ===
:[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 ==
Kaks teemat:


Süveneme mõlemisse teemasse:
* [[Hajutatud andmebaaside teema lahtikirjutus ja lugemisülesanded]]
* [[Lühiülevaade riigi infosüsteemist]].
* [[Lühiülevaade riigi infosüsteemist]] ja [[x-tee märkmed loengust]]
* [[x-tee märkmed loengust]]


== Eksamikonsultatsioon ==
-->






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