Hajussüsteemid: erinevus redaktsioonide vahel

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


= Eksamitulemused =
Siin:
* [[Esimese (27 mai) hajussüsteemid 2026 eksami tulemused]]
* [[Teise (1 juuni) hajussüsteemid 2026 eksami tulemused]]
* [[Kolmanda (8 juuni) hajussüsteemid 2026 eksami tulemused]]
= Eksamiks konsultatsioonid =
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 (pool) pluss eksam (teine pool)<br>
Hindamise meetod: praktikumide tulemused (50%) ja eksam (50%)<br>
Praktikum: neljapäeval kell 08:15-09:45 ruumis ICT-A1<br>
Loeng: neljapäeval kell 10:00-11:30 ruumis ICT-A1


= Praktilised tööd ja tähtajad =
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>


Kokku on töid 2. Kumbki praktikum täismahus tehtuna annab 25 punkti, sellele võivad lisanduda ekstrapunktid. Puudulikult tehtud töö punktiarv jääb alla 25 punkti. Hilinenud kodutöö eest saab pooled muidu saadaolevad punktid.
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.


Teine praktikumiülesanne on hetkeseisuga 2019 aastast, 2020 aastal seda veidi muudetakse. Esimene praktikumiülesanne on up-to-date.
Kogu info, materjalid ja ülesanded on siinsamas lambda lehel.  


* [[Vorgurakendused 2 prax 1 2020 kevad| 1 praks on P2P rakendus]]: kas distributed ledgeri komponent või anonümiseeriv võrk. Tähtaeg 19 märts. 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 2019 kevad | 2 praks]]: Grupitöö 1-3 inimest. Tähtaeg mai keskpaik, enne auditoorse töö lõppu.
 
Iganädalase [https://teams.microsoft.com/meet/3625241488921?p=xuNcAp5hlNYvG2htjz teamsi loengu-meeti link].
 
Iganädalase [https://teams.microsoft.com/meet/3561914989815?p=fgLPiNJJUBMDCQPOET teamsi praksi-meeti link].
 
 
<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 =


Hindamine: praktikumid annavad kokku 50% kogupunktidest ning eksam teise 50%. Kursuse edukaks sooritamiseks on sul vaja:
Kursuse edukaks sooritamiseks on sul vaja:


* 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+eksam kokku vähemalt 50 punkti.
* saada praktikumid + eksam kokku vähemalt 50 punkti.
 
Kursuse hinde rehkendamisel annavad praktikumid kokku 50% kogupunktidest ning eksam 50%.
<!-- 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 =
 
<font color="red">Uus</font> nädalaülesanne, tähtaeg 21 aprill. Seekord on ülesanne veidi keerulisem, aga vabatahtlik ja annab ühe lisapunkti.
 
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.
 
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).
 
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.
 
 
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.
 
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>
 
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.
 
* 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.
 
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.
-->


NB! Eksamile võtta kaasa pildiga dokument.  
Ü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.-->
 
 
<!--
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.
 
<!--
Õppejõu poolt praktikumides kirjutatud koodinäited on leitavad siit: https://github.com/martinve/ITI0215_25
-->
 
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.
Päris hea õpiku saad tasuta alla laadida [https://www.distributed-systems.net/index.php/books/ds3/  siit]. Meie kursuse sisu on sellest õpikust küllalt erinev, samas on ka ühisosi. Hea mõte on lugeda soenduseks läbi jutt [https://d1.awsstatic.com/builderslibrary/pdfs/challenges-with-distributed-systems.pdf hajussüsteemide probleemide] ühest valdkonnast (aga neid on veel hulga).


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


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


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


=== P2P sissejuhatus, 30. jaanuar ===
: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]


:<b>Kohustuslikud osad lugeda</b>:
:Http ja json: [[võrgurakenduste protokollid 1]] lõpuosa alates https
:Loe lisaks [https://medium.com/@animeshgaitonde/how-https-works-part-1-building-blocks-64f9915b1f39 https kohta]
 
:<b>Võrgunduse baasprotokollide</b> kohta on soovitav lugeda (aga, need ei ole meie kursuse fookuses) [https://beej.us/guide/ siit: Beej's guides]:
 
===  P2P sissejuhatus, 9. veebruar ===


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


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


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


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


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


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


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


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


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


<b>DHT (distributed hash tables)</b>:
Sul on vaja iseseisval detailsemalt tutvuda (a) REST-stiiliga ja (b) tutvuda natuke graphql päringu/vastustekeelega (need on siis kaks täiesti erinevat asja):
:[http://en.wikipedia.org/wiki/Distributed_hash_table  ülevaade wikipedias]
* tutvuda levinumate soovitustega REST-stiilis APi-de ehitamiseks:
:Chord:
** Kui sa hästi ei mäleta REST-stiili põhipointe, siis sissejuhatuseks vaata üle [https://en.wikipedia.org/wiki/Representational_state_transfer wikipedia jutt].
:Põhimaterjal - kas [http://pdos.csail.mit.edu/~rtm/slides/harvard02.ppt vanem versioon, loe kuni Ivy osani] või [https://www.cse.buffalo.edu/~okennedy/courses/cse704fa2012/8.1-Chord.ppt uuem, Chordi põhimõtted]. Täiendavalt võib vaadata [https://people.eecs.berkeley.edu/~kubitron/courses/cs294-4-F03/slides/lec03-chord.ppt seda presentatsiooni] visualiseeritud algoritmidega (ppt presentatsioonirezhiimis!) ja eriti detailideks [https://www.kth.se/social/upload/51647996f276545db53654c0/3-chord.pdf seda presentatsiooni]
*** Põhi-idee on kasutada HTTP harilikke get, put, post "käske", et öelda, kas tahad datat, lisad datat või uuendad datat, identifitseerida data-objekte urli abil stiilis http://miski.org/data/people/25 (siin on variante), anda vigade korral tagasi HTTP veakoode, kodeerida autentimisinfot ja muud metainfot HTTP päistesse ja püüda kodeerida API päringud ja vastused võimalikult kergelt arusaadavalt.  
<!-- :Täiendavalt juurde lugeda [http://www.ece.utexas.edu/~garg/f04/dist2/papers/chord.ppt chordi ülevaadet algoritmide skeemi] ja põhiteoreemidega (ilma tõestusteta) -->
*** Pane tähele, et viisid otsingupäringu (inimesed nimega "Jaan"), vastuste arvu (ntx max 100) ja akna/batchi (ntx alga 200-ndast), sorteerimise jne indikeerimiseks ei ole RESTi-stiilis konkreetselt soovitatud, igaüks teeb kuidas tahab: ODATA allpool pakub oma soovitusi, aga need ei ole arusaadavalt kohustuslikud või "REST" stiili osad.
:Lisaks tasuks veidi uurida artikleid [http://en.wikipedia.org/wiki/Chord_%28peer-to-peer%29 wikipedia] sissekande lõpus (external links)
** Tutvu siin peatüki alguses juba viidatud Microsofti [https://docs.microsoft.com/en-us/azure/architecture/best-practices/api-design api design soovitustega], täiendavalt võib uurida [https://github.com/Microsoft/api-guidelines/blob/master/Guidelines.md lisadetaile]
:Kademlia:
** Tutvu Google soovitustega: [https://google.aip.dev/1 AIP].
:Põhimaterjal [http://www.cs.uiowa.edu/~ghosh/kademlia.ppt presentatsioon autoritelt]
** Hea mõte on lisaks võtta alternatiivina leiad [https://pages.apigee.com/eBook-Web-API-Design-The-Missing-Link-reg.html?int_source=resources-main&int_medium=website&int_campaign=ebook&int_content=web-api-design-missing-link sellelt urlilt] api disaini väike raamat ja sellega tutvuda.
:Täiendavalt [https://github.com/ntoll/p4p2p/blob/master/papers/maymounkov-kademlia-lncs.pdf autorite artikkel] ja [https://www.kth.se/social/upload/516479a5f276545d6a965080/3-kademlia.pdf detailsem presentatsioon]
** Vaata [https://www.odata.org/getting-started/ odata] veidi eksootilisemaid, aga autoriteetse standardiorganisatsiooni oasis soovitusi REST stiilis API ehitamiseks, konkreetselt alusta [https://www.odata.org/getting-started/understand-odata-in-6-steps/ kiirsissejuhatusega], siis loe [https://www.odata.org/getting-started/basic-tutorial/ basic tutorial] ja lõpuks tutvu kiirelt [http://docs.oasis-open.org/odata/odata/v4.0/odata-v4.0-part2-url-conventions.html pika standardidoku] peatükiga 5: [http://docs.oasis-open.org/odata/odata/v4.0/errata03/os/complete/part2-url-conventions/odata-v4.0-errata03-os-part2-url-conventions-complete.html#_Toc453752356 query options]
<b>Bittorrent</b>
** Väike [[pure-rest/odata/cgi stiilide võrdlus]]
:[http://www.cs.uiowa.edu/~ghosh/bittorrent.ppt bittorrenti protokoll ja ülevaade]
* tutvuda lühidalt graphql-ga: tegu siis hoopis teistsuguse asjaga kui REST: graphql ei ole stiil, vaid täiesti konkreetne päringute/vastuste keel a la sql, mille töötas välja facebook:
:[http://en.wikipedia.org/wiki/BitTorrent_%28protocol%29 täiendavalt wikipediast]
** Alusta [https://en.wikipedia.org/wiki/GraphQL wikipedia] kiirülevaatest
** Tähelepanek: graphql ülesseadmine oma data peale ei ole lihtne ülesanne: ilmselt ei jaksa sa ise programmeerida päringukeele parserit/otsimootorit jne. Levinud lahendused on seada üles [https://www.apollographql.com/docs/apollo-server/getting-started/ Apollo server], ja progeda sinna juurde päringud oma andmebaasi, või seada üles [https://github.com/graphql/graphql-js graphql.js] server ja teha sinna juurde päringud. Kumbki on suurem töö, kui lihtsa REST api ehitamine.
** Loe läbi [https://phil.tech/api/2017/01/24/graphql-vs-rest-overview/ rest-vs-graphql] jutt
** Loe läbi [https://graphql.org/learn/ grapqhl kiirtutorial] (lehekülgede lõpus link järgmisele)


== Distributed ledger, ajatemplid ja bitcoin ==


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


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


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


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


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


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


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


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


* Lae alla  [https://d28rh4a8wq0iu5.cloudfront.net/bitcointech/readings/princeton_bitcoin_book.pdf hea tasuta õpik]
*Alustame [[Kriitiline taust blockchaini mõistmiseks]] teemadesse. Palun süvene neisse materjalidesse lisaks loengus räägitule.
* Kui eelmine link mingil põhjusel ei tööta, [http://bitcoinbook.cs.princeton.edu/ mine õpiku lehele ] (sealt leiad ka videoloengud) ja otsi sealt alapealkiri "Free pre-publication draft" mille all on link "... for download here".
* Kindlasti süvene [https://andersbrownworth.com/blockchain/ blockchaini põhimõtete demosse]: vajuta üleval "Hash", "Block", "Blockchain" linkidele ja proovi igal lehel ise datat muuta ja "Mine" nupule vajutada. "Mine" teeb proof-of-worki ehk otsib random stringi (nonce) mille lisamisel datale saame mitme nulliga algava hashi. Hea mõte on vaadata ka  [https://andersbrownworth.com/blockchain/ sama saidi videosid]
*[[Media:plokiahel_tt.pdf|detailsem plokiahela ülevaade]]  <font color="red">E2</font>


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


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


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


=== More details and tutorials ===


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


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


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


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


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


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


Just a big collection of materials and examples: https://github.com/openblockchains/awesome-blockchains
Siin blokis asume tegelema keerumakate teooria-teemade lugemisega: infovahetus ja <b>konsensus hajutatud süsteemides</b>, kus midagi võib rikki minna. Ehk, kuidas saavutada, et hajutatud süsteem funktsioneeriks ok, kui mingid osad on katki või kui mõni osa teeb meelega jama, et teisi segada? See on üks fundamentaalsemaid hajutatud süsteemide küsimusi üldse.


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


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


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


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


=== Erinevad API-stiilid ===
* Seejärel - põhiasjana - tööta süvenemisega läbi [http://turing.cs.ttu.ee/~tanel.tammet/5-Consensus.ppt hea presentatsioon põhjalikumaks arusaamiseks] <font color="red">E1</font>  up to page 73 (allikas [https://people.disim.univaq.it/~guido.proietti/slide_algdist2017/ siin]. Sinu põhiülesanne on see presentatsioon <b>väga aeglaselt</b> läbi töötada ja järjest slaididest ja asjadest aru saada. Lõpupoole läheb keeruliseks. King algoritmi detaile ei pea oskama, aga põhiideest tuleks aru saada. Ca lk 73 läheb värk päris keeruliseks ja sealt edasi võid katki jätta.


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


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


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


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


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


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


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


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


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


Suured:
Parallelismi baasmehhanismid tavaprogrammides, konkreetselt fork, thread ja shared memory. Uurime neid asju C/opsüsteemi tasemel: abstraktsemates keeltes kasutatakse neidsamu C/opsüsteemi mehhanisme. Sul on vaja (a) aru saada, mida need  mehhanismid teevad, (b) panna käima näited:
* [http://www.csl.mtu.edu/cs4411.ck/www/NOTES/process/fork/create.html  fork]
* [https://www.cs.cmu.edu/afs/cs/academic/class/15492-f07/www/pthreads.html threads] tutorial ja sarnane [https://randu.org/tutorials/threads/ tutorial]
* [http://www.cs.kent.edu/~ruttan/sysprog/lectures/shmem/shmem.html shared memory]
* [http://stackoverflow.com/a/16207592 Thread, Queue ja Lock] Pythonis
* [https://docs.python.org/3/library/multiprocessing.html multiprocessing] Pythonis
* [https://docs.python.org/3/library/threading.html threading] Pythonis
* [https://beej.us/guide/bgipc/ Beej's guide to interprocess communication], vaata ka [https://beej.us/guide/bgc/html/split/multithreading.html#multithreading multithreading chapter] in Beej's guide to C programming


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


Pilveteenuse tarkvara:
Näidete käimapanekuks on väga soovitav kasutada linuxit või maci: threadid ja shared memory (aga mitte fork) on olemas ka windowsis, aga ülaltoodud materjalide
näited on linuxi (üldisemalt, unixi) näited. Logi sisse dijkstrasse, kasuta mõnda muud linuxi masinat, millel sulle ligipääs, või pane windows 10s käima wsl (windows subsystem for linux).
Kui sul juba ei ole installeeritud C kompilaatorit, installeeri gcc või clang.


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


Overview of the exam and consultation.


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




===  X-tee  ===


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


Kasulikud lisamaterjalid:


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


===  Riigi IT-infrastruktuuri korraldus ===


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


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


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






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

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

revolutsioon
revolutsioon

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

Eksamitulemused

Siin:

Eksamiks konsultatsioonid

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

Selle asemel:

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

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

Eksamikorraldus ja materjalid õppimiseks

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

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

Eksamiks registreeruda ei ole vaja.

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

Teemad, mille kohta küsimused eksamil tulevad:

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

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

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

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

NB! 2. iseseisva töö kaitsmisjärjekord

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

Eksamipäevad

Siin on täpsustunud esimese kahe eksami ajad:

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

Eksamiks registreeruda ei ole vaja.


Aeg, koht

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

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

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

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

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

Iganädalase teamsi loengu-meeti link.

Iganädalase teamsi praksi-meeti link.


NB! Allpool olev blokkide struktuur on sarnane, kui 2025 aastal, aga mitte päris sama. Toimunud loengute materjalid ja salvestused osaliselt uuendatakse/muudetakse: kogu info veel mitte toimunud loengute ja veel mitte selgitatud/uuendatud prakside kohta on esialgne.

Hindamine

Kursuse edukaks sooritamiseks on sul vaja:

  • saada arvestatud mõlemid praktikumid
  • teha eksam tasemel vähemalt 1/3 eksami kogupunktidest.
  • saada praktikumid + eksam kokku vähemalt 50 punkti.

Kursuse hinde rehkendamisel annavad praktikumid kokku 50% kogupunktidest ning eksam 50%.

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


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


Praktikumid

Kokku on praktikumitöid kaks. Ülesanded jaotatakse kohustuslikuks baasosaks ja valikosadeks: igaühel oma punktiarv. Kumbki praktikum täismahus (baasosa + kõik valikosad) tehtuna annab 25 punkti. Võivad lisanduda ekstrapunktid eriti hästi tehtud osade või täienduste eest. Hilinenud kodutöö eest saab pooled muidu saadaolevad punktid.


Praktikumitööd on järgmised:

  • 1 praks on P2P rakendus: distributed ledgeri komponent. Grupitöö 1-3 inimest. See on sarnane esimesele praktikumile eelmisest aastast.

Praktikumitööde tähtajad on :

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

Praktikumitöö esitamiseks tee järgmist:

  • Pane oma töö TTÜ gitlabi või avalikku githubi või gitlabi reposse.
  • Pane repo esilehele loetav ülevaade protokollidest, mida su töö kasutab, koos töö üldpõhimõtete kirjeldusega.
  • Tee nii, et juhendaja saaks seda repot lugeda: kui ei ole avalik repo, lisa ta developeriks. TTU Gitlabis peab olema developer õigustes, et koodi lugeda.

Praktikumijuhendaja on Martin Verrev.

Loengukava

Kursus jaguneb laias laastus kolmeks teemaks:

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

Päris hea õpiku saad tasuta alla laadida siit. Meie kursuse sisu on sellest õpikust küllalt erinev, samas on ka ühisosi. Hea mõte on lugeda soenduseks läbi jutt hajussüsteemide probleemide ühest valdkonnast (aga neid on veel hulga).

Üldist materjali ja kursusi mujalt:

http://en.wikipedia.org/wiki/Distributed_computing
http://dcg.ethz.ch/lectures/podc_allstars/index.html
http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-824-distributed-computer-systems-engineering-spring-2006/index.htm
https://www.scs.stanford.edu/24sp-cs244b/

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

Protokollid ja P2P

Protokollid, 2. veebruar

Kohustuslikud osad lugeda:
Http ja json: võrgurakenduste protokollid 1 E1
Täiendavalt soovitav lugeda:
Gaffer on games: UDP vs TCP ja täiendavalt
Veidi seotud asi ad hoc networks vt ka Defendeci ja Jürgo Predeni patent
Http ja json: võrgurakenduste protokollid 1 lõpuosa alates https
Loe lisaks https kohta
Võrgunduse baasprotokollide kohta on soovitav lugeda (aga, need ei ole meie kursuse fookuses) siit: Beej's guides:

P2P sissejuhatus, 9. veebruar

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

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

Old XML-based tech:

Mainstream: REST, JSON, Graphql:

Lugemiseks:

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

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

Sul on vaja iseseisval detailsemalt tutvuda (a) REST-stiiliga ja (b) tutvuda natuke graphql päringu/vastustekeelega (need on siis kaks täiesti erinevat asja):

  • tutvuda levinumate soovitustega REST-stiilis APi-de ehitamiseks:
    • Kui sa hästi ei mäleta REST-stiili põhipointe, siis sissejuhatuseks vaata üle wikipedia jutt.
      • Põhi-idee on kasutada HTTP harilikke get, put, post "käske", et öelda, kas tahad datat, lisad datat või uuendad datat, identifitseerida data-objekte urli abil stiilis http://miski.org/data/people/25 (siin on variante), anda vigade korral tagasi HTTP veakoode, kodeerida autentimisinfot ja muud metainfot HTTP päistesse ja püüda kodeerida API päringud ja vastused võimalikult kergelt arusaadavalt.
      • Pane tähele, et viisid otsingupäringu (inimesed nimega "Jaan"), vastuste arvu (ntx max 100) ja akna/batchi (ntx alga 200-ndast), sorteerimise jne indikeerimiseks ei ole RESTi-stiilis konkreetselt soovitatud, igaüks teeb kuidas tahab: ODATA allpool pakub oma soovitusi, aga need ei ole arusaadavalt kohustuslikud või "REST" stiili osad.
    • Tutvu siin peatüki alguses juba viidatud Microsofti api design soovitustega, täiendavalt võib uurida lisadetaile
    • Tutvu Google soovitustega: AIP.
    • Hea mõte on lisaks võtta alternatiivina leiad sellelt urlilt api disaini väike raamat ja sellega tutvuda.
    • Vaata odata veidi eksootilisemaid, aga autoriteetse standardiorganisatsiooni oasis soovitusi REST stiilis API ehitamiseks, konkreetselt alusta kiirsissejuhatusega, siis loe basic tutorial ja lõpuks tutvu kiirelt pika standardidoku peatükiga 5: query options
    • Väike pure-rest/odata/cgi stiilide võrdlus
  • tutvuda lühidalt graphql-ga: tegu siis hoopis teistsuguse asjaga kui REST: graphql ei ole stiil, vaid täiesti konkreetne päringute/vastuste keel a la sql, mille töötas välja facebook:
    • Alusta wikipedia kiirülevaatest
    • Tähelepanek: graphql ülesseadmine oma data peale ei ole lihtne ülesanne: ilmselt ei jaksa sa ise programmeerida päringukeele parserit/otsimootorit jne. Levinud lahendused on seada üles Apollo server, ja progeda sinna juurde päringud oma andmebaasi, või seada üles graphql.js server ja teha sinna juurde päringud. Kumbki on suurem töö, kui lihtsa REST api ehitamine.
    • Loe läbi rest-vs-graphql jutt
    • Loe läbi grapqhl kiirtutorial (lehekülgede lõpus link järgmisele)


Vt ka suured avalikud andme-apid:

google api explorer
google api style guidelines
Andme-apide näiteid
facebook api limitations/shutdowns in 2018

Paralleelrehkendused ja konsensus

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

Sissejuhatus teemasse: andmete sünkroniseerimine. E1

Plokiahel:

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

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


Blockchain continues ja DHT: 9 märts

Algul jätkame eelmise loengu lõpu materjalidega.

Seejärel distributed hash tables (DHT) :

Põhimaterjal: Chordi põhimõtted E2. Täiendavalt võib vaadata seda presentatsiooni visualiseeritud algoritmidega (ppt presentatsioonirezhiimis!) ja eriti detailideks seda presentatsiooni (seda varianti kasutame ka loengus!).
Lisaks tasuks veidi uurida artikleid wikipedia sissekande lõpus (external links)
  • Kademlia:
Materjal presentatsioon autoritelt
Täiendavalt autorite artikkel ja eriti hea detailsem presentatsioon
  • Kademliat kasutav hajutatud failisüsteem: IPFS
  • Natuke sarnase ideega mõõdukalt lihtne andmestruktuur (mitte hajutatud): skip list

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

Siin blokis asume tegelema keerumakate teooria-teemade lugemisega: infovahetus ja konsensus hajutatud süsteemides, kus midagi võib rikki minna. Ehk, kuidas saavutada, et hajutatud süsteem funktsioneeriks ok, kui mingid osad on katki või kui mõni osa teeb meelega jama, et teisi segada? See on üks fundamentaalsemaid hajutatud süsteemide küsimusi üldse.

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


  • Lisaks tasub veidi vaadata kiirülevaadet konsensuseteema eri harudest (mh hea pilt) ja sarnaselt wikipedia kiirülevaadet harudest ja terminitest. Uuri kindlasti välja, mis tähendab sünkroonne/asünkroonne, partition tolerant/nontolerant, permissioned/permissionless.
  • Seejärel - põhiasjana - tööta süvenemisega läbi hea presentatsioon põhjalikumaks arusaamiseks E1 up to page 73 (allikas siin. Sinu põhiülesanne on see presentatsioon väga aeglaselt läbi töötada ja järjest slaididest ja asjadest aru saada. Lõpupoole läheb keeruliseks. King algoritmi detaile ei pea oskama, aga põhiideest tuleks aru saada. Ca lk 73 läheb värk päris keeruliseks ja sealt edasi võid katki jätta.

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

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

Selle nädala teemaks on

Taustaks oluline: Phase king vs raft vs paxos vs zookeeper

Pluss:

Fork ja thread: 30 märts

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

Loengunäited paralleelvärkidest 2026

Parallelismi baasmehhanismid tavaprogrammides, konkreetselt fork, thread ja shared memory. Uurime neid asju C/opsüsteemi tasemel: abstraktsemates keeltes kasutatakse neidsamu C/opsüsteemi mehhanisme. Sul on vaja (a) aru saada, mida need mehhanismid teevad, (b) panna käima näited:

Viimaste taustaks on kasulik vaadata korra protsesside managementi linuxis.

Näidete käimapanekuks on väga soovitav kasutada linuxit või maci: threadid ja shared memory (aga mitte fork) on olemas ka windowsis, aga ülaltoodud materjalide näited on linuxi (üldisemalt, unixi) näited. Logi sisse dijkstrasse, kasuta mõnda muud linuxi masinat, millel sulle ligipääs, või pane windows 10s käima wsl (windows subsystem for linux). Kui sul juba ei ole installeeritud C kompilaatorit, installeeri gcc või clang.

Soovitus kuulata Jim Kelleri episoodi "Moore’s Law, Microprocessors, Abstractions, and First Principles" heast ja populaarsest ai podcastist: Jim räägib mh pikemalt protsessori-sisesest parallelismist ja automaatsest branchi-ennustamisest.

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

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

Themes:


Lukustamine ja paralleelprotsessid ja transaktsioonid: 13. aprill

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

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

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

Lukustamine on vajalik paralleelsete protsesside juures, mis kasutavad ühist mälujuppi / muutujat, kas siis näiteks threadide ühises mäluosas või shared memorys.

Lukustamise jaoks on mitu erinevat mehhanismi ja kasutusstenaariumi ning nad vajavad veidi tuge protsessorilt spetsiifiliste atomaarsete käskude näol.

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

Loe selles järjekorras:

Optsionaalselt võib olla abi nendest lukustamist seletavatest videotest:

Lisaks võib lugeda:

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

Näited hajutatud süsteemidest

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

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

Then for X road see

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


Exploring some very large distributed systems: 27 April

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

Combined machine learning (federated learning): 4 May

Oluline tagapõhi: differential privacy E2

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

Lecture presentation

Microservices, scaling large systems: 11 May

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

Consultation for the exam: 18 May, teams only

Overview of the exam and consultation.