Hajussüsteemid

Allikas: Lambda
revolutsioon

Ainekoodid: ITI0215
Aine nimed: Hajussüsteemid
Link: http://lambda.ee/wiki/Hajuss%C3%BCsteemid
Punkte: 6 EAP

Õppejõud: Tanel Tammet, Martin Verrev
Kontakt: tanel.tammet@ttu.ee
Olemas on ka 2019 aasta materjalide arhiiv.



Sisukord

Eksamikorraldus

Eksamite plaan on järgmine:

Eksamid toimuvad sel aastal ainult kaugtööna: eksami algusajaks paneb õppejõud küsimused/ülesanded siia wikilehele ning kolme tunni jooksul tuleb saata emailiga vastused. Eksamile registeeruda ei ole vaja. Ajad on:

Eksamil on kaks osa:

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

Hajussüsteemide eksamiks õppimine

Loengud ja seminarid piiranguajal

Loengud

  • Loenguajaks paneb õppejõud üles senisest detailsemad soovitused, et mida kuni järgmise loenguajani iseseisvalt lugeda.
  • Lisaks teeb õppejõud loenguajaks kas väikese sissejuhatava video või jutu nende asjade kohta, mida lugeda antakse, ja see video/jutt läheb vastava loengu peatükki wikis.
  • Samuti antakse iga nädal väike kohustuslik ülesanne: nädala jooksul tuleb õppejõule saata emailiga kokkuvõte/mikroessee.
  • Piiranguaja loengu-list on siin wikis kohe järgmise praktikumide alapeatüki järel.
  • Värsked 7 mai materjalid ja ülesanded. Loe materjalid kõigepealt süvenemisega läbi. Konkreetne ülesanne ilmub siia 8. mai jooksul.

Praktikumid

Esimese praktikumi esitamistähtaja nihutame 26. märtsile. Arusaadavalt on soovitav esitada juba 16. märtsil, nii vähendame esitamisjärjekorra pikkust.

Praktikumid ja tööde arvestamise teeme Skypes või muus chatis videoga standardsel praktikumiajal, mida vajadusel pikendame.

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 Martin saaks seda repot lugeda: kui ei ole avalik repo, lisa ta developeriks (Github: martinve, TTU Gitlab: Martin Verrev). TTU Gitlabis peab olema developer õigustes, et koodi lugeda.
  • Saada Martinile martin.verrev@gmail.com email -- enne kaitsmist -- kuhu Subject reale kirjuta "Hajussüsteemid praktikum" ja pane kirja sisse grupi liikmed ja link sinu repole.
  • Praktikumiajal jälgi seda linki Hajussüsteemide praktikumi järjekord. Seal on kirjas, mis grupid on kaitsnud ja millised järgmisena kaitsevad. Uuenda iga paari minuti tagant seda lehte, kuni järjekord jõuab sinu grupini.
  • Kui järjekord jõuab sinu grupini, võta Martiniga üles videokõne (Skype: martin.verrev Zoom: https://us04web.zoom.us/j/4988482784 Hangouts: martin.verrev@gmail.com)
  • Kui tekib tehnilisi probleeme, kirjuta Martinile martin.verrev@gmail.com, mis probleem tekkis.

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

Loeng ja töö 19. märtsil ja sellele järgneval nädalal

Sinu ülesanne on iseseisvalt tutvuda detailsemalt REST-stiiliga ja tutvuda natuke graphql päringu/vastustekeelega (need on siis kaks täiesti erinevat asja):

  • tutvuda levinumate soovitustega REST-stiilis APi-de ehitamiseks:
    • Kui sa hästi ei mäleta REST-stiili põhipointe, siis sissejuhatuseks vaata üle wikipedia jutt.
      • Põhi-idee on kasutada HTTP harilikke get, put, post "käske", et öelda, kas tahad datat, lisad datat või uuendad datat, identifitseerida data-objekte urli abil stiilis http://miski.org/data/people/25 (siin on variante), anda vigade korral tagasi HTTP veakoode, kodeerida autentimisinfot ja muud metainfot HTTP päistesse ja püüda kodeerida API päringud ja vastused võimalikult kergelt arusaadavalt.
      • Pane tähele, et viisid otsingupäringu (inimesed nimega "Jaan"), vastuste arvu (ntx max 100) ja akna/batchi (ntx alga 200-ndast), sorteerimise jne indikeerimiseks ei ole RESTi-stiilis konkreetselt soovitatud, igaüks teeb kuidas tahab: ODATA allpool pakub oma soovitusi, aga need ei ole arusaadavalt kohustuslikud või "REST" stiili osad.
    • Loe läbi terve api design book alternatiivina leiad sellelt urlilt.
    • 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
  • 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)
  • kirjutada ca üks lehekülg vabas vormis ülevaadet (a) sinu jaoks uutest/huvitavamatest või vastupidi, kahtlusi tekitavatest soovitustest, mida RESTI kohta lugesid, (b) oma kogemustest REST stiilis API ehitamisest või grapqhl kasutamisest, kui oled seda teinud: kas/milleks oled seda teinud ja kuidas päringud/vastused välja nägid (näited oleks ideaalsed) ja saata see hiljemalt 25. märtsiks õppejõule emailiga tanel.tammet@ttu.ee, panes Subject rea algusse sõna "Hajussüsteemid".


Loeng ja töö 26. märtsil ja sellele järgneval nädalal

Sellel nädalal asume tegelema keerumakate teooria-teemade lugemisega: infovahetus ja 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.

  • Seejärel - põhiasjana - tööta süvenemisega läbi hea presentatsioon põhjalikumaks arusaamiseks. Sinu põhiülesanne on see presentatsioon väga aeglaselt 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 see coursera loeng mis juhatab sama probleemi aeglaselt sisse, aga ei jõua veel selle lahendusvariantideni. järgmine loeng selgitab juba ühte lahendusvarianti analoogiliselt powerpoindile.
  • Lõpetuseks saada, nagu eelmisel nädalal, aadressile tanel.tammet@taltech.ee väike jutt (subject line "Hajussüsteemid"), kus räägi (a) kas oled taoliste probleemidega kunagi kokku puutunud (tõenäoliselt ei ole, aga mine tea) (b) mis olid huvitavamad või ootamatumad asjad, mis sulle materjalist meelde jäid.

Kui jõuad ja sul tekib ekstrahuvi teema vastu, siis siit leiad põhjaliku kogu keerukamate artiklite lühikokkuvõtetega edasiuurimiseks (see ei ole üldse kohustuslik).



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

Selle nädala teemaks on 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.

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.

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

Ülesandest sõltumatult soovitus kuulata 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.


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

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

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

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

Loe selles järjekorras ja vaata läbi ka need kolm lühikest loengut:


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

Selle nädala ülesanne on aru saada paralleelsuse kontrollist andmebaasides: mis võib valesti minna ja mis on erinevad levinud mehhanismid atomaarsete operatsioonide ehitamiseks. See värk on korraga ootamatult deep ja praktilises elus oluline. Loe läbi mõlemid materjalid:

Soovitav on täiendavalt vaadata konspektis käsitletud mvcc jaoks:

Eelmise nädala koduülesanne jäi ära, sest järgmine koduülesanne puudutab samavõrd mõlemit teemat:

Selle nädala koduülesanne on ise koostada programm, mis teeb paralleeltööd ühise ressursi kallal, aga lukustamist või atomaarseid operatsioone ei kasuta, ning seetõttu tekivad vahel vead. Õppejõule tuleks saata programmi kood ja arusaadava jutuna ülevaade, mis juhtus: kui sageli vead tekkisid ja mis sul oli vaja teha, et sa vea tekkimiseni tegelikult jõuaks. Käima ma programme ei pane, aga vaatan lühidalt pilguga üle, et mismoodi on asi lahendatud. Programmeerimiskeel on seega vaba ja installeerimisõpetusi pole vaja. Eriti huvitav oleks, kui jõuad katsetada selle programmi variante ja teha väikese kokkuvõtte, mis puhul vigu sagemini tuli ja mis puhul harvemini (see "eriti huvitav" osa ei ole kohustuslik).

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

On väga tõenäoline, et vigu esialgu ei ilmnegi. Siis püüa oma programmi nii modifitseerida, et vahel ikkagi ilmneks (näiteks, tee rohkem paralleelprotsesse, käivita kogu tegevust väikse massiivi peal, aga väga palju kordi, kuni viga tekib, kontrolli, et ei kasutataks andmebaasi paralleelsus-mehhanisme (näiteks pythoni andmebaasiteegid võivad vaikimisi alustada transaktsioone ilma, et sina neid ise lisaks) vms).

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

Selle nädala teemaks on hajutatud andmebaasid: eesmärk aru saada, (a) miks on andmebaasid vahel hajutatud ja mis see konkreetselt võib tähendada (b) mis probleemid seejuures tekivad ja kuidas neid probleeme lahendatakse, paremini või halvemini. Lugemisülesanded on järgmisel eraldi wikilehel:

Hajutatud andmebaaside teema lahtikirjutus ja lugemisülesanded

Ülesanne on see nädal suhteliselt lihtne: kirjuta väike jutt ja saada, nagu varem, õppejõu emailile: jutus vasta (a) kas oled mingit sorti hajutatud andmebaasiga kokku puutunud ja kui, siis mis asi oli ja mis seal toimus, (b) selgita oma parema arusaamise järgi, kas saaks enamust riigi ametlikke registreid ja andmebaase (isikud, kinnisvara, autod, ehitised, raha liikumine jne jne) hoida põhimõtteliselt ühes suures andmebaasis ja kui seda saaks teha, siis milliseid positiivseid aspekte ja milliseid probleeme see kaasa tooks.

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

Teemaks on X-tee, ehk eesti e-riigi põhi-infrastruktuur. X-tee on API-süsteem asutus-asutus IT süsteemide otsesuhtluseks (P2P), kus kõik kasutavad samu põhimõtteid ja on olemas väike keskne kontrolli/turvamissüsteem.

Õppejõule saatmise ülesannet sel nädalal ei ole. Tööta ise läbi järgmised materjalid:

Esimese asjana

Järgmisena vaata läbi mõõduka süvenemisega selles järjekorras:

Kolmandaks tutvu veidi süsteemiga, mille nimi on UXP: (vaata sealt ka paariminutist videot) see on AS Cybernetica eksport-kommertsversioon X-teest. Cybernetica on ka standard-X-tee autor, aga pakub lisaks kommertstoega (planeerimine, install, kohandamine jne jne) oma versiooni, mida on paigaldatud päris paljudesse riikidesse. Muuhulgas võib olla huvitav natuke vaadata kahte screencasti UXP keskserveri konfimisest (keeruline värk): osa 1 ja osa 2.

Veel on oluline teada:

  • X-tee promo välisriikidesse teevad paljud poliitikud
  • Ametlik (vabavaralise) X-tee arendamine toimub viimastel aastatel koos soomlastega organisatsiooni "Nordic Institute for Interoperability solutions" (NIIS) poolt, nende sait on https://x-road.global ja nende hallatav/arendatav vabavaraline X-tee githubis (vaata veidi ka detailsemat videot kogu asja ülespanemisest). Vaata head NIIS videot asjast ja organisatsioonist. Vana mitte-maintainitav ainult-eesti repo leaid siit.
  • Seoste tekitamine riikide vahel (a la mitme eri X-tee ühendamine, nagu Eesti ja Soome vahel veidi toimub) on keeruline: Willemson ja Freudenthal Cyberist on selle kohta kirjutanud artikli Challenges of Federating National Data Access Infrastructures
  • Peale põhitegija Cybernetica oma kommertsiaalse UXP-variandiga (juhtfiguurid Ansper ja Freudenthal) on veel hulk huvigruppe/firmasid, kes tegelevad X-tee kommertsiaalsete konsultatsioonide, abi, promomise, arenduse jne jne tegevustega välismaale. Vaata kaarti, kus peal valik erinevas staadiumis/erineva edukusega projekte X-tee rakendamise kohta (sellel kaardil ei ole kõiki kommerts-juurutusi):
    • E-government academy for-profit konsultatsioonimeeskond: e-valitsemise konsultatsioonid välismaal, ei anna ise tehnilist konsultatsiooni.
    • Planetway: Jaapanisse müügi tiim.
    • Erinevad soomega seotud harud, mh väike Roksnet


Loeng ja töö 7. mail ja sellele järgneval nädalal

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

  • Kõigepealt loe süvenemisega läbi ja tutvu kõigi sealtoodud linkidega: Lühiülevaade riigi infosüsteemist.
  • Seejärel sirvi läbi RIHA koolitusmaterjalid: olulisematele olid lingid eelmises lühiülevaates, aga vaata kiirelt kõigile teistele materjalidele ka peale: mis seal umbes on.
  • Nüüd sirvi ja uuri pikemalt RIHA:
    • püüa aru saada, mis sorti andmekogusid on rohkem, mis asutused on enam esindatud jne
    • tutvu detailselt mõne väiksema andmekogu kõigi materjalidega ja samuti mõne suurema andmekogu (näiteks rahvastikuregister) materjalidega
    • samamoodi uuri paari registri X-tee liideste kirjeldusi
    • otsi ka erinevaid andmevälju (Riha kataloog -> Otsi andmeobjektidest nupp), näiteks "aadress", "vanus", "tegevusala")
  • Kui sa ei ole varem vaadanud, siis vaata nüüd: Andres Kütt räägib, miks suured (riigi) IT projektid vahel (tihti?) nurja lähevad: Õppetunnid suurtest IT projektidest, eeskätt sotsiaalministeeriumi kurikuulsa SKAIS2 näitel.


Aeg, koht

Semester: kevad
Tulemus: eksam
Hindamise meetod: praktikumide tulemused (pool) pluss eksam (teine pool)
Praktikum: neljapäeval kell 08:15-09:45 ruumis ICT-A1
Loeng: neljapäeval kell 10:00-11:30 ruumis ICT-A1

Praktilised tööd ja tähtajad

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.

Teine praktikumiülesanne on hetkeseisuga 2019 aastast, 2020 aastal seda veidi muudetakse. Esimene praktikumiülesanne on up-to-date.

  • 1 praks on P2P rakendus: kas distributed ledgeri komponent või anonümiseeriv võrk. Tähtaeg 26 märts (nihutatud üks nädal algsest hilisemaks). Grupitöö 1-3 inimest.
  • 2 praks: Grupitöö 1-3 inimest. Tähtaeg mai keskpaik, enne auditoorse töö lõppu.

Hindamine

Hindamine: praktikumid annavad kokku 50% kogupunktidest ning eksam teise 50%. 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.

NB! Eksamile võtta kaasa pildiga dokument.

Loengukava

Kursus jaguneb laias laastus viieks teemaks:

  • P2P ja protokollid (neil teemadel - pluss veidi andme-apidest- esimene praks),
  • Distributed ledger ehk bitcoini alustehnoloogia
  • Andme-apid, autentimine, pilvekeskkonnad, andmete hajutamine ja hajutatud andmete koondamine.
  • Paralleelrehkendused
  • X-tee ja riigi IT-korraldus

Päris hea õpiku saad tasuta alla laadida siit. Meie kursuse sisu on sellest õpikust küllalt erinev, samas on ka ühisosi.

Ü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
http://www.stanford.edu/class/cs244b/

Protokollid ja P2P

P2P sissejuhatus, 30. jaanuar

Kohustuslikud osad lugeda:
vikipeedia ülevaade
loengumaterjal: pikem ülevaade eri P2P tehnoloogiatest
TOR wikipedias

Protokollid, 6. veebruar

Kohustuslikud osad lugeda:
Http ja json: võrgurakenduste protokollid 1 (loengus kuni https, edasised osad järgmises loengus)
Täiendavalt soovitav lugeda:
Gaffer on games: UDP vs TCP ja selle jätk
Veidi seotud asi ad hoc networks vt ka Defendeci ja Jürgo Predeni patent

Protok lõpp: http fancy stuff, 13 veebruar

Http ja json: võrgurakenduste protokollid 1 lõpuosa alates https
Loe lisaks https kohta
xml protokollid xml-rpc, soap ja seotud tehnoloogiad: võrgurakenduste protokollid 2
Vanad tekstid SOAPi probleemidest: veebiteenuste võlu ja valu ja s stands for simple

P2P DHT ja bittorrent, 20 veebruar

DHT (distributed hash tables):

ülevaade wikipedias
Chord:
Põhimaterjal - kas vanem versioon, loe kuni Ivy osani või uuem, Chordi põhimõtted. Täiendavalt võib vaadata seda presentatsiooni visualiseeritud algoritmidega (ppt presentatsioonirezhiimis!) ja eriti detailideks seda presentatsiooni
Lisaks tasuks veidi uurida artikleid wikipedia sissekande lõpus (external links)
Kademlia:
Põhimaterjal presentatsioon autoritelt
Täiendavalt autorite artikkel ja detailsem presentatsioon

Bittorrent

bittorrenti protokoll ja ülevaade
täiendavalt wikipediast

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

  • 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 SHA2 hash algoritmi varianti, mis annab tulemuseks 256 bitise (ehk 32 baiti) väärtuse.
  • https://en.wikipedia.org/wiki/Merkle_tree : kirjete sidumine hashide puuna (veidi keerukam/efektiivsem, kui lihtne hashiahel). Mis on hashiahel: kui tahad siduda kirjeid K1, K2, K3, siis salvestad [K1,hash(K1)], [K2,hash(K2+eelmise hash (ehk hash(K1)))], [K3,hash(K3+eelmise hash(ehk hash(K2+hash(K1))))], jne, kus hashi-osa node N jaoks on üldiselt hash(KN+(KN-1 hashi-osa)) ehk hash(KN+hash(KN-1+hash(KN-2+hash(KN-3+...) ...)
  • https://en.wikipedia.org/wiki/Proof-of-work_system : arvuti sundimine mõttetut tööd tegema, et raskendada spammimist. Levinud meetod on nõuda, et hashi alguses oleks N nulli (mida suurem N, seda raskem leida). Selleks tuleb sul hash(S) asemel katsetada läbi palju hash(S+nonce) arvutusi, kus nonce on random string, kuni juhtumisi saad N nulliga algava hashi. Reaalselt kasutab Bitcoin ajas muutuvat keerukust (mida aeg edasi, seda keerulisem ülesanne), detaile vaata siit ja siit ja siit.
  • https://en.wikipedia.org/wiki/Blockchain : lihtsalt ülevaade kogu teemast
  • 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

Best intro for reading

Põhjalik õpik

  • Lae alla hea tasuta õpik
  • Kui eelmine link mingil põhjusel ei tööta, mine õpiku lehele (sealt leiad ka videoloengud) ja otsi sealt alapealkiri "Free pre-publication draft" mille all on link "... for download here".

Python examples with detailed explanations

It is enough to go through one or two of these:

More details and tutorials

Have a look at the actual bitcoin data, latest blocks and transactions:

How does the P2P stuff work, i.e finding nodes:

Real hardcore documentation:

Just a big collection of materials and examples: https://github.com/openblockchains/awesome-blockchains

Some additional OK tutorials:


Andme-apid, autentimine, pilveteenused, andmete koondamine

Erinevad API-stiilid

Suured avalikud andme-apid

API-de kogu uurimiseks
list of open apis from wikipedia
google api explorer
Andme-apide näiteid
facebook api limitations/shutdowns in 2018

Autentimine

facebook, google, pangalink.
Autentimise märkmed: facebook ja google
veebiserveri seadistamine id-kaardi jaoks ja abistavad koodijupid
taustaks id-kaardi kasutusstsenaariumid
Autentimise märkmed: mobiil-ID

Pilvekeskkonnad

Understanding cloud computing

Suured:

Pilveteenuse tarkvara:

OpenStack

Näide: Azure

Azure märkmed

Google appengine, database api, google bigtable and file system stack

http://cloud.google.com/appengine/ AppEngine on nüüd osa Google Cloud platvormist

Hajutatud failisüsteemide märkmed loengust

Paralleelrehkendused

Esimene osa

Näited:

C: alguses oli fork(), hea pthreads tutorial.
Thread, Queue ja Lock Pythonis

Presentatsioonid lugemiseks:


Lukustamine, andmebaasid jms

Lisaks võib lugeda:

Konspekt, käsitleb teemat oluliselt põhjalikumalt kui loeng/slaidid
Introduction to Transactions (slaidid)
Sünkroniseerimisprimitiivid: slaidid

Mittekohustuslik lisalugemine:

Konspekt pikemalt ja põhjalikumalt loengus läbitud teemadest.


Paralleliseerimise automatiseerimine ja klastrid

Mapreduce framework
Mapreduce katsetused Azure platvormil
Mapreduce klassikaline põhiartikkel
memcached
memcached ülevaade


Hajutatud andmekogud

Integreerimine:

Integreerimise lühimärkmed
data warehousing

Hajutamine:

Hajutamise lühimärkmed
memcached
Postgres replication intro
Postgres clustering and replication

Konsensus:

Paxos algoritm ja veel Paxos ja väga palju Paxost ja sõpru
bitcoinist tuttav proof-of-work

Hulk teemasid põhjalikult:

readings in distributed databases
Chapter for db system concepts book

Detailsed lisamaterjalid:

Postgres high availability
Oracle information integration


X-tee ja e-riigi IT korraldus

X-tee

x-tee märkmed loengust

Kasulikud lisamaterjalid:

x-tee protokolli spec
UXP: AS Cybernetica eksport-kommertsversioon X-teest.
Kaks screencasti UXP keskserveri konfimisest 1 ja 2
Ahto Kalja detailne ülevaade X-tee projektist aastast 2004
X-road official page
X-road security server manual (detailed)
Paper by Ansper and Willemson

Riigi IT-infrastruktuuri korraldus

Riigi IT korralduse märkmeid loengust

Kasulikud lisamaterjalid:

RIHA ja jutud RIHA kohta


Hajussüsteemide eksam 21 mai 2020 Hajussüsteemide eksam 28 mai 2020 Hajussüsteemide eksam 4 juuni 2020