• Rezultati Niso Bili Najdeni

Algoritemkotstoritev AljaˇzMarkoviˇc

N/A
N/A
Protected

Academic year: 2022

Share "Algoritemkotstoritev AljaˇzMarkoviˇc"

Copied!
60
0
0

Celotno besedilo

(1)

Univerza v Ljubljani

Fakulteta za raˇ cunalniˇ stvo in informatiko

Aljaˇz Markoviˇc

Algoritem kot storitev

DIPLOMSKO DELO

UNIVERZITETNI ˇSTUDIJSKI PROGRAM PRVE STOPNJE

RA ˇCUNALNIˇSTVO IN INFORMATIKA

Mentor : doc. dr. Jurij Miheliˇ c

Ljubljana, 2021

(2)

Copyright. Rezultati diplomske naloge so intelektualna lastnina avtorja in matiˇcne fakultete Univerze v Ljubljani. Za objavo in koriˇsˇcenje rezul- tatov diplomske naloge je potrebno pisno privoljenje avtorja, fakultete ter mentorja.

Besedilo je oblikovano z urejevalnikom besedil LATEX.

(3)

Fakulteta za raˇcunalniˇstvo in informatiko izdaja naslednjo nalogo:

Tematika naloge:

Razvoj interneta je omogoˇcil veliko novih tehnologij in storitev. Med stori- tvami prevladujejo trije standardni storitveni modeli, ki so precej sploˇsno usmerjeni. V okviru diplomske naloge prouˇcite moˇznosti za razvoj spe- cifiˇcnega modela algoritem kot storitev, ki bo kot storitev nudil razliˇcne al- goritme za reˇsevanje razliˇcnih problemov. Preglejte sorodne reˇsitve in nato predlagajte svojo reˇsitev. Svoj predlog izvedite v enem izmed primernejˇsih programskih okolij. V svojo izvedbo vgradite veˇc algoritmov za enega ali dva problema. Opiˇsite vaˇso izvedbo in podajte navodila, kako v vaˇso izvedbo vgraditi dodatne probleme in algoritme.

(4)
(5)

Zahvaljujem se mentorju doc. dr. Juriju Miheliˇcu za pomoˇc pri izdelavi diplomske naloge. Posebno se zahvaljujem druˇzini, ki me je ves ˇcas podpirala.

(6)
(7)
(8)
(9)

Kazalo

Povzetek Abstract

1 Uvod 1

1.1 Cilj . . . 1 1.2 Struktura . . . 2

2 Pregled podroˇcja 3

2.1 Storitveni modeli . . . 3 2.2 Obstojeˇce reˇsitve . . . 4

3 Storitveni model 7

3.1 Problemi . . . 7 3.2 Predlog modela . . . 9

4 Naˇcrtovanje 11

4.1 Storitev . . . 11 4.2 Arhitektura . . . 12 4.3 Funkcionalnosti . . . 13

5 Izvedba 17

5.1 Uporabljene tehnologije in koncepti . . . 17 5.2 Programski vmesnik . . . 19 5.3 Algoritmi . . . 25

(10)

5.4 Podatkovna baza . . . 31

5.5 Dokumentacija . . . 32

5.6 Spletni vmesnik . . . 34

5.7 Priprava komponent . . . 36

6 Testiranje 39 6.1 Obremenitveni test . . . 39

7 Zakljuˇcek 41

Literatura 43

(11)

Seznam uporabljenih kratic

kratica angleˇsko slovensko API Application Programming In-

terface

aplikacijski programski vme- snik

JSON JavaScript Object Notation javascript notacija objektov REST Representational State Trans-

fer

arhitekturni stil programske opreme

HTTP HyperText Transfer Protocol protokol za prenos hiperteksta JWT JSON Web Token JSON spletni ˇzeton

BSON Binary JSON dvojiˇski JSON

CRUD Create Read Update Delete osnovne funkcije trajne shrambe podatkov

(12)
(13)

Povzetek

Naslov: Algoritem kot storitev Avtor: Aljaˇz Markoviˇc

Cilj diplomske naloge je opredelitev storitvenega modela, ki zajema storitve za izvajanje algoritmov na zahtevo. Poleg tega ˇzelimo izdelati programsko reˇsitev, ki zagotavlja takˇsno storitev. V ta namen najprej na kratko predsta- vimo podroˇcje raˇcunalniˇstva v oblaku, storitvene modele in nekaj sorodnih reˇsitev. Sledi predstavitev problemov in predlog storitvenega modela, ki jih reˇsuje. Nato predstavimo naˇcrtovanje in izvedbo programske reˇsitve za zago- tavljanje storitve. Ta je zasnovana kot REST API in izdelana v programskem jeziku Go. Dodana je spletna aplikacija, ki sluˇzi enostavnejˇsi uporabi reˇsitve.

Na koncu reˇsitev ovrednotimo. Rezultati testiranj kaˇzejo na zadovoljivo de- lovanje.

Kljuˇcne besede: algoritem, storitev, aplikacijski programski vmesnik.

(14)
(15)

Abstract

Title: Algorithm as a service Author: Aljaˇz Markoviˇc

The objective of this thesis is to define a service model, which includes ser- vices that offer algorithm execution on request. Furthermore, we aim to create a software solution that provides such a service. Firstly, we briefly describe the field of cloud computing, service models and a few similar solu- tions. Next, we define the main problems and our solution in the form of a service model. Then, we present the planning and implementation of a soft- ware solution that provides our service. It is designed as a REST API and built using the Go programming language. We add a web application, which serves to simplify the use of our solution. Lastly, we assess our solution. The results show adequate performance.

Keywords: algorithm, service, application programming interface.

(16)
(17)

Poglavje 1 Uvod

Z razvojem interneta se je spremenil naˇcin nudenja mnogih storitev. Eden izmed primerov, ki je zaˇzivel v zadnjem desetletju in pol, so raˇcunalniˇski viri oz. raˇcunalniˇstvo v oblaku. Danes lahko tako do znatnih virov dostopa vsak uporabnik, kar je spodbudilo razvoj novih storitvenih modelov, ki so vedno bolj specializirani, pri teh pa prednjaˇci kakovost pred koliˇcino ponudbe. Ker pa je podroˇcje ˇse relativno mlado, ostaja moˇznost za razvoj mnogih novih storitvenih modelov.

1.1 Cilj

Cilj diplomske naloge je raziskati idejo nudenja raˇcunalniˇskih algoritmov kot storitev. V ta namen bomo opravili pregled podroˇcja in opisali morebiten storitveni model. Sledilo bo naˇcrtovanje in izvedba programske reˇsitve za zagotavljanje storitve. Ta bo zasnovana kot aplikacijski programski vmesnik (angl. application program interface oz. API) po arhitekturnem stilu REST.

Za laˇzjo uporabo bomo izdelali tudi odjemalec v obliki spletne aplikacije.

1

(18)

2 Aljaˇz Markoviˇc

1.2 Struktura

V nadaljevanju sledi pregled podroˇcja, kjer je predstavljen koncept stori- tvenih modelov in opisanih nekaj relevantnih obstojeˇcih primerov. Tretje poglavje opiˇse predlog storitvenega modela. Predstavljeni so problemi in reˇsitev. V ˇcetrtem poglavju je predstavljeno naˇcrtovanje programske reˇsitve.

Peto poglavje vsebuje opis uporabljenih tehnologij in predstavitev izvedbe.

ˇSesto poglavje predstavlja testiranje programske reˇsitve. Zadnji del je za- kljuˇcek, kjer so predstavljene ugotovitve diplomske naloge.

(19)

Poglavje 2

Pregled podroˇ cja

2.1 Storitveni modeli

Raˇcunalniˇstvo v oblaku (ang. Cloud Computing) je koncept, kateremu se je danes v raˇcunalniˇstvu praktiˇcno nemogoˇce izogniti. Osnovna ideja je nudenje raˇcunalniˇskih sistemskih virov na zahtevo preko interneta. Glavna prednost pristopa je moˇznost deljenja teh virov, kar omogoˇca boljˇso fleksibilnost in ekonomiˇcnost. ˇCeprav je bil koncept opisan ˇze prej, se je dobro uveljavil ˇsele v prvem desetletju tega stoletja. Tako lahko danes zasledimo mnoge ponudnike oblaˇcnih storitev, med najveˇcjimi sta podjetji Microsoft (Microsoft Azure) in Amazon (Amazon web services). Za boljˇso razˇclenitev ponujenih storitev so se uveljavili trije standardni storitveni modeli, ki prevladujejo ˇse danes:

ˆ infrastruktura kot storitev (angl. Infrastructure as a service);

ˆ platforma kot storitev (angl. Platform as a service);

ˆ programska oprema kot storitev (angl. Software as a service).

Omenjeni modeli so zelo sploˇsni, zato so se razvili tudi specializirani, kot so npr. podatki kot storitev, plaˇcila kot storitev ipd. Razˇsiril se je izraz vse kot storitev (angl. everything as a service), ki zajema vse storitve, ponujene na zahtevo v sklopu oblaˇcnega raˇcunalniˇstva. Te storitve se uporabnikom

3

(20)

4 Aljaˇz Markoviˇc bolj prilagodijo, saj se osredotoˇcijo na toˇcno doloˇcene zahteve. Najveˇcje prednosti uporabe takˇsnih storitev so:

Skalabilnost Uporabnik lahko poljubno spreminja, koliko storitve trenutno potrebuje, saj se storitev obiˇcajno zaraˇcuna le po porabi. Ker so ka- pacitete ponudnikov veliko veˇcje, lahko z uporabo zmanjˇsamo ali celo odpravimo teˇzave z variabilno obremenitvijo naˇsih storitev, kar je po- gost problem raˇcunalniˇskih reˇsitev.

Cenovna in ˇcasovna uˇcinkovitost S preloˇzitvijo doloˇcenih delov naˇse sto- ritve na zunanje izvajalce zmanjˇsamo zaˇcetni finanˇcni vloˇzek. Pogost primer so stroˇski, povezani z nakupom in vzdrˇzevanjem strojne opreme.

Prihranimo tudi ˇcas, potreben za vzpostavitev funkcionalnosti, saj je integracija zakupljenih storitev veliko hitrejˇsa in preprostejˇsa. Uporab- nik za uporabo obiˇcajno ne potrebuje veliko znanja o delovanju same storitve.

Viˇsja kakovost Ker ponujeno storitev razvijajo strokovnjaki iz danega po- droˇcja, je ta naˇceloma viˇsje kakovosti, kot ˇce bi primerljivo funkcional- nost razvili sami ali najeli nekoga za pomoˇc.

2.2 Obstojeˇ ce reˇ sitve

Za laˇzji razvoj lastne reˇsitve smo raziskali obstojeˇce reˇsitve, ki nudijo sorodne storitve. Veˇcina sorodnih reˇsitev spada k podroˇcju umetna inteligenca kot storitev (angl. AI as a service). Te so podobne naˇsi storitvi, vendar se osredotoˇcajo izkljuˇcno na podroˇcje umetne inteligence.

V nadaljevanju sledi opis delovanja in funkcionalnosti nekaj relevantnih storitev.

2.2.1 Algorithmia

Algorithmia [8] je spletna platforma, ki ponuja nabor storitev s podroˇcja algoritmov. Nudijo prosto dostopen trg, kjer je trenutno na voljo preko

(21)

Diplomska naloga 5 6700 algoritmov. Prevladujejo ˇstiri kategorije: tekstovna analiza (angl. text analysis), strojno uˇcenje (angl. machine learning), raˇcunalniˇski vid (angl.

computer vision) ter globoko uˇcenje (angl. deep learning). Poleg tega nu- dijo tudi razne druge algoritme, npr. s podroˇcja analize razpoloˇzenja (angl.

sentiment analysis). Algoritme lahko ponudi kdor koli, in sicer v manjˇsem ˇstevilu programskih jezikov, med drugimi v Pythonu, R ter Javi.

Storitev je moˇzno uporabljati s spletno stranjo ali neposredno preko API- ja, za katerega je na voljo podrobna dokumentacija. Za laˇzjo integracijo algoritmov nudijo lastne knjiˇznice v praktiˇcno vseh trenutno bolj razˇsirjenih jezikih. Te omogoˇcajo preprost klic ˇzelenih algoritmov. ˇCe se uporabnik ne ˇzeli posluˇziti uporabe knjiˇznic, lahko klic opravi s preprostim HTTP Post zahtevkom.

Nekateri algoritmi so ponujeni brezplaˇcno, drugi za vsak klic zahtevajo doloˇceno ˇstevilo kreditov, ki jih je moˇc kupiti. Ne glede na ceno algoritma se zaraˇcuna 1 kredit za vsako sekundo izvajalnega ˇcasa. Ob vsakem algoritmu je opcijsko dodana dokumentacija in izvorna koda. Za podatke algoritmov poleg lastne shrambe nudijo moˇznost integracije z mnogimi priljubljenimi platformami. Zahtevnejˇsim strankam, npr. podjetjem, so na voljo obˇsirnejˇsi paketi storitev.

2.2.2 Kitware Resonant

Kitware je tehnoloˇsko podjetje, specializirano za razvoj programskih reˇsitev, namenjenih reˇsevanju znanstvenih izzivov. Njihove stranke so mnoge vladne agencije, akademske inˇstitucije in veˇcja podjetja. Poleg drugih storitev ponu- jajo platformo, poimenovano Resonant [5]. Platforma zajema mnoga orodja za upravljanje podatkov, analizo in vizualizacijo. Izvajanje ˇzelenih algorit- mov nudijo kot del ˇsirˇsega nabora storitev, zdruˇzenih v omenjeni platformi, pri tem kot primer navajajo algoritme za analizo medicinskih slik. Podpirajo razne programske jezike, primarno R in Python, uporaba pa je moˇzna preko REST API dostopnih toˇck. Za razliko od platforme Algorithmia, Resonant ni dostopna komur koli. Ker svoje storitve prilagodijo vsaki stranki, se je za

(22)

6 Aljaˇz Markoviˇc dostop potrebno naprej dogovoriti.

(23)

Poglavje 3

Storitveni model

Obstaja veliko storitvenih modelov, ki vsebujejo ˇsirok nabor storitev, vsak pa ˇzeli s ponujenimi storitvami zadostiti zahtevam doloˇcenih strank. Da bi lahko opredelili naˇs storitveni model, moramo najprej opredeliti probleme, ki jih ˇzelimo reˇsiti.

3.1 Problemi

Osrednja storitev, ki jo ˇzelimo nuditi, je izvajanje algoritmov na zahtevo.

Razlogov za potrebo po ponujeni storitvi je veˇc, prednjaˇcita pa naslednja.

3.1.1 Omejena raˇ cunska moˇ c

Algoritmi lahko zahtevajo veliko raˇcunske moˇci. Da bi jih izvrˇsili v ˇzelenem ˇcasu, potrebujemo primerno strojno opremo, ki pa nam ni vedno na voljo, saj uporabnost pogosto ne opraviˇci cene. Iz tega sledi prvi primer uporabe.

Cenovna uˇcinkovitost

Izvrˇsevanje zahtevnih algoritmov velikokrat predstavlja le del naˇsega dela in zato ne opraviˇcuje nakupa primerne strojne opreme. Posamezen klic storitve, ki to opravi namesto nas, je zato neprimerljivo cenejˇsi.

7

(24)

8 Aljaˇz Markoviˇc Druga pogosta omejitev strojne opreme je njena velikost, saj ta z zmogljivo- stjo kaj hitro naraste.

Prostorska uˇcinkovitost

Ce ˇˇ zelimo, da naˇsa strojna oprema ostane kar se da majhna, se mo- ramo odpovedati doloˇceni raˇcunski moˇci. To nam moˇcno oteˇzi iz- vajanje raznih algoritmov, saj se ˇcas izvajanja hitro poveˇca. Pre- prost HTTP zahtevek, ki zadostuje za klic storitve, pa lahko opravi praktiˇcno vsako majhno vezje, ki ima moˇznost dostopa do interneta.

Tako lahko odloˇzimo ˇse tako zahtevne klice algoritmov na oddaljeno strojno opremo, ne da bi se odpovedali dodatnemu prostoru.

Izvajanje zahtevnih algoritmov prekine naˇse delo, kar pripelje do nepotreb- nega ˇcakanja.

Casovna uˇˇ cinkovitost

Med izvajanjem zahtevnih algoritmov je uporabnost naˇse stojne opreme pogosto okrnjena, kar nam prepreˇci ali vsaj oteˇzi preostalo delo, ki ga opravljamo. Z uporabe storitve se temu izognemo in lahko z delom nadaljujemo brez prekinitev.

Raˇcunska moˇc, ki je potrebna za hitro izvajanje naˇsih algoritmov, je lahko cenovno neopraviˇcljiva, zaseda veˇc prostora, kot ga imamo na voljo, ali pa jo ˇzelimo izkoristiti drugaˇce. V vseh primerih je enostavna reˇsitev uporaba storitve, katere edina zahteva je dostop do interneta.

3.1.2 Dostopnost algoritmov

Uˇcinkoviti algoritmi so zelo zaˇzeleni, njihov razvoj in testiranje pa lahko traja veliko ˇcasa in zahteva kar nekaj finanˇcnega vloˇzka. Poslediˇcno niso vedno na voljo vsakomur, saj bi razkritje izvorne kode praktiˇcno izniˇcilo vrednost algoritma za razvijalce. S pomoˇcjo storitve lahko tako uporabnik dostopa do algoritmov, njihove podrobnosti pa ostanejo zakrite.

(25)

Diplomska naloga 9

3.2 Predlog modela

S pomoˇcjo raziskanega lahko opiˇsemo naˇs storitveni model oz. storitve, ki mu pripadajo. Storitve, ki pripadajo modelu, primarno reˇsujejo problem iz- vajanja algoritmov na zahtevo preko interneta. V ta namen nudijo tako vso podporno infrastrukturo, kot tudi platformo. ˇCe model primerjamo s stan- dardnimi tremi modeli, najbolj sovpada z modelom platforma kot storitev.

Storitve uporabnikom torej ponujajo kar se da preprost naˇcin izvedbe algoritmov, pri ˇcemer uporabnik nima nujno vpogleda v podrobnosti samih algoritmov. Nabor ponujenih algoritmov lahko storitve doloˇcajo same, ali pa dodajanje algoritmov omogoˇcijo tudi uporabnikom. Storitve lahko nudijo tudi razne podporne storitve, kot je npr. shramba podatkov.

(26)

10 Aljaˇz Markoviˇc

(27)

Poglavje 4 Naˇ crtovanje

Zasnovali smo lastno reˇsitev, ki uporabnikom nudi izvajanje ponujenih al- goritmov. V nadaljevanju najprej na kratko opiˇsemo naˇso storitev, nato je predstavljena arhitektura celotne programske reˇsitve za zagotavljanje stori- tve, sledi pa opis vseh funkcionalnosti, ki jih reˇsitev ponuja uporabniku.

4.1 Storitev

Naˇsa storitev, kot smo doloˇcili ˇze prejˇsnjem poglavju, je izvajanje algoritmov na zahtevo preko interneta. To pomeni, da na zahtevo uporabnika, s podatki, ki jih poda, izvedemo ˇzelen algoritem in vrnemo rezultat izvajanja. Ker ˇzelimo uporabo naˇse storitve ˇcim bolj poenostaviti, moramo poleg ponujenih algoritmov nuditi tudi nekaj podpornih funkcionalnosti in storitev.

Prva funkcionalnost je dostop do dokumentacije, ki vsebuje vse potrebne podatke za uporabo naˇse storitve. Tako lahko uporabniki laˇzje ustvarijo lastne programske odjemalce storitve.

Druga funkcionalnost je moˇznost ustvarjanja uporabniˇskih raˇcunov. Ti omogoˇcajo vpogled v zgodovino svojih zahtevkov in uporabo nekaterih funk- cionalnosti.

Ker algoritmi za izvajanje potrebujejo podatke, je smiselno dodati tudi moˇznost hranjenja vhodnih podatkov, ki so vezani na raˇcun uporabnika.

11

(28)

12 Aljaˇz Markoviˇc

4.2 Arhitektura

Reˇsitev sestavljajo ˇstiri komponente:

ˆ Algo API;

ˆ Algo Jedro;

ˆ Podatkovna baza;

ˆ Spletna aplikacija.

Odnos med komponentami je prikazan na sliki 4.1.

Algo API sluˇzi kot osrednja komponenta reˇsitve. Uporabnikom nudi moˇznost uporabe vseh ponujenih funkcionalnosti. Izvaja veˇcino funkcional- nosti, z izjemo tistih, ki jih opravljajo komponente Algo Jedro.

Komponenta Algo Jedro je namenjena izvajanju algoritmov. Poleg tega pripravi vhodne podatke za uporabo v algoritmih. Loˇcitev funkcionalnosti v svojo komponento omogoˇca laˇzje skaliranje reˇsitve. S komponento komuni- cira le komponenta Algo API.

Podatkovna baza sluˇzi shrambi podatkov reˇsitve in vsebuje zapise o prete- klih zahtevkih, uporabnikih in shranjenih vhodnih podatkih. S komponento komunicira le komponenta Algo API.

Zadnja komponenta je pomoˇzna in predstavlja alternativno dostopno toˇcko za uporabo reˇsitve. Je spletna aplikacija, ki sluˇzi kot grafiˇcni vmesnik in ne nudi dodatnih funkcionalnosti. Namen komponente je poenostaviti uporabo storitve.

(29)

Diplomska naloga 13

Slika 4.1: Diagram arhitekture

4.3 Funkcionalnosti

Aplikacija podpira dve vrsti uporabnikov. Neprijavljene, ki imajo dostop do omejenega ˇstevila funkcionalnosti, in prijavljene, ki lahko dostopajo do vseh.

Ponujene funkcionalnosti se delijo glede na namen.

4.3.1 Algoritmi

Neprijavljen uporabnik

ˆ Klic algoritma – Izvrˇsitev algoritma s podanimi podatki.

Prijavljen uporabnik

ˆ Klic algoritma s shranjenimi podatki – Izvrˇsitev algoritma s po- datki, ki jih uporabnik hrani v podatkovni bazi aplikacije.

ˆ Pridobitev preteklih zahtevkov – Pridobitev podatkov o izvedbah algoritmov, ki jih je uporabnik zahteval.

ˆ Izbris preteklih zahtevkov – Izbris podatkov o izvedbah algorit- mov, ki jih je uporabnik zahteval.

(30)

14 Aljaˇz Markoviˇc

4.3.2 Podatki

Prijavljen uporabnik

ˆ Shranitev podatkov – Shranitev podatkov uporabnika.

ˆ Pridobitev podatkov – Pridobitev shranjenih podatkov uporab- nika.

ˆ Sprememba podatkov – Sprememba shranjenih podatkov uporab- nika.

ˆ Izbris podatkov – Izbris podatkov uporabnika.

4.3.3 Uporabniki

Neprijavljen uporabnik

ˆ Prijava uporabnika – Prijava uporabnika, pridobitev ˇzetona za nadaljnjo avtorizacijo.

ˆ Registracija uporabnika – Ustvaritev raˇcuna uporabnika.

Prijavljen uporabnik

ˆ Pridobitev uporabnika – Pridobitev podatkov o uporabniku.

ˆ Sprememba uporabnika – Sprememba podatkov o uporabniku.

ˆ Izbris uporabnika – Izbris podatkov o uporabniku.

4.3.4 Pomoˇ c

Neprijavljen uporabnik

ˆ Pridobitev problemov – Pridobitev seznama problemov, ki jih reˇsujejo ponujeni algoritmi.

ˆ Informacije o problemu – Pridobitev informacij o doloˇcenem pro- blemu.

(31)

Diplomska naloga 15

ˆ Pridobitev algoritmov – Pridobitev seznama algoritmov, ki so na voljo.

ˆ Pomoˇc za algoritem – Pridobitev podatkov o uporabi doloˇcenega algoritma.

(32)

16 Aljaˇz Markoviˇc

(33)

Poglavje 5 Izvedba

5.1 Uporabljene tehnologije in koncepti

V nadaljevanju sledi kratka predstavitev pomembnejˇsih tehnologij in koncep- tov, ki so bili uporabljeni pri izdelavi programske reˇsitve.

Go [13] je statiˇcno tipiziran, prevajan programski jezik, ki ga od leta 2007 razvija podjetje Google. V osnovi je podoben jeziku C, vendar ima veliko modernejˇsih lastnosti, kot je na primer sproˇsˇcanje pomnilnika (angl. garbage collection). Razvit je bil za razvoj velikih projektov, pri ˇcemer je bil poudarek na enostavnosti in varnosti. Velik pomen daje tudi podpori soˇcasnega izvajanja. V ta namen nudi vgrajene go rutine (angl. go routines) in kanale (angl. channels). Pri izvedbi je bil izbran zaradi visoke uˇcinkovitosti. Uporabljen je pri osrednjih dveh delih reˇsitve – Algo API in Algo Jedro.

MongoDB [11] je nerelacijska podatkovna baza, ki jo od leta 2007 razvija podjetje MongoDB. Poudarek podatkovne baze je na skalabilnosti in fleksibilnosti. Uporablja dokumente, ki so zelo podobni JSON doku- mentom. To je tudi razlog za izbiro, saj naˇsa aplikacija komunicira izkljuˇcno z JSON dokumenti.

17

(34)

18 Aljaˇz Markoviˇc React [10] je odprtokodna JavaScript knjiˇznica, namenjena izdelavi upo- rabniˇskih vmesnikov. Razvita je bila leta 2011 v podjetju Facebook, kjer jo nadgrajujejo ˇse danes. Omogoˇca izgradnjo hitrih in skalabilnih spletnih aplikacij. Uporablja arhitekturo, osnovano na komponentah.

Komponente so samostojne enote kode, ki jih je moˇc uporabiti poljub- nokrat. Z njihovim zdruˇzevanjem lahko enostavneje zgradimo komple- ksnejˇse uporabniˇske vmesnike. V nalogi je bila knjiˇznica uporabljena za izdelavo spletne aplikacije.

Docker [9] je platforma, ki ponuja nabor komponent in orodij za virtualiza- cijo na nivoju operacijskega sistema. Od leta 2013 jo razvija podjetje Docker. Najbolj razˇsirjena komponenta so vsebniki (angl. containers), v katere je moˇzno zapakirati aplikacije skupaj z vsem, kar potrebujejo za izvajanje. Takˇsen vsebnik je nato mogoˇce zagnati na praktiˇcno ka- teri koli napravi. V naˇsi aplikaciji so bili vsebniki uporabljeni pri vseh komponentah, z izjemo podatkovne baze.

API je specifikacija moˇznih interakcij s programsko opremo. Definira vse potrebno za uspeˇsno komunikacijo med dvema programoma. Predsta- vlja vmesni nivo med odjemalcem in samo programsko opremo. Tako so uporabi izpostavljene le doloˇcene funkcije, ostalo ostane nedostopno.

Naˇsa aplikacija je zasnovana kot API, saj tako nudi uporabnikom naˇcin uporabe brez razkritja delovanja storitve, predvsem algoritmov.

REST [4] je arhitekturni stil programske opreme, namenjen izdelavi spletnih storitev in doloˇca standard za komunikacijo med raˇcunalniˇskimi sistemi.

Storitve, ki zadoˇsˇcajo omejitvam, se imenujejo RESTful spletne stori- tve. Obstaja pet obveznih omejitev ter ena neobvezna, ki omejujejo naˇcin procesiranja in odzivanja streˇznika na zahtevke. S spoˇstovanjem omejitev naj bi sistem med drugim pridobil na zmogljivosti, skalabil- nosti in zanesljivosti.

(35)

Diplomska naloga 19 Swagger in OpenAPI [12, 3] Swagger je nabor orodij za implementacijo OpenAPI specifikacije, namenjene opisovanju, izdelavi, uporabi in vizu- alizaciji REST API-jev. Namenjena je tako ljudem kot tudi raˇcunalnikom.

S pomoˇcjo orodij je moˇzno pretvarjati med specifikacijo in programsko kodo. Uporabnikom API-jev omogoˇca enostavnejˇso uporabo, kar je tudi razlog za uporabo pri razvoju naˇse programske reˇsitve.

5.2 Programski vmesnik

Osrednji del API-ja je napisan v programskem jeziku Go. Go programi so razdeljeni v pakete (angl. packages). Vsak paket predstavlja zbirko izvornih datotek, ki se nahajajo v skupnem direktoriju. Logiˇcna struktura projekta se deli na tri pakete: Api, Modeli in Poti. V nadaljevanju so predstavljeni pa- keti, njihov namen in funkcionalnosti, ki jih opravlja vsebovana programska koda.

5.2.1 Paket Api

Paket je namenjen vzpostavitvi spletnega streˇznika. Je prvi del kode, ki se izvede ob zagonu programa ter opravlja razne funkcionalnosti.

Podatkovna baza

Najprej se vzpostavi povezava s podatkovno bazo MongoDB, pri ˇcemer je uporabljen uradni gonilnik mongo-driver. Med drugim nudi metode za uporabo podatkovne baze in definicije podatkovnih tipov, ki jih uporabljajo dokumenti, shranjeni v podatkovni bazi.

Dostopne toˇcke

Sledi vzpostavitev dostopnih toˇck API-ja. Uporabljeno je ogrodje Echo.

Primarno nudi optimiziran HTTP usmerjevalnik (angl. router), ki skrbi za usmerjanje prejetih zahtevkov. Poleg tega vsebuje mnogo metod za laˇzji razvoj API-ja in ˇsirok nabor vmesnega programja (angl. middle- ware). Dostopne toˇcke so razdeljene na 5 skupin.

(36)

20 Aljaˇz Markoviˇc

ˆ /user – funkcionalnosti uporabniˇskega raˇcuna;

ˆ /request – funkcionalnosti zahtevkov algoritmov;

ˆ /param – funkcionalnosti shranjenih podatkov uporabnikov;

ˆ /help – podatki o problemih in algoritmih;

ˆ /docs – dokumentacija API-ja.

Pri vseh dostopnih toˇckah je prisoten manjˇsi nabor vmesnega progra- mja, ki skrbi za pomoˇzne funkcionalnosti in je na doloˇcenih uporabljeno tudi za preverjanje veljavnosti JWT ˇzetonov [1].

Vmesno programje v naˇsem primeru predstavljajo pomoˇzne funkcije, ki se izvedejo nad prejetimi zahtevki ter sluˇzijo raznim namenom, npr.

validaciji JWT ˇzetona v zahtevku. V primeru nepravilnosti poskrbijo za prekinitev izvajanja in odgovor na zahtevek.

Pomoˇc

Dostopne toˇcke skupine help nudijo uporabnikom podatke o ponujenih algoritmih in problemih, ki jih reˇsujejo. O vsakem algoritmu so na voljo naslednji podatki:

ˆ ime algoritma;

ˆ problem, ki ga reˇsuje;

ˆ opis;

ˆ format vhodnih podatkov;

ˆ primer vhodnih podatkov;

ˆ format parametrov;

ˆ primer parametrov;

ˆ format izhoda;

ˆ primer izhoda.

Primer pomoˇci za algoritem Hitro urejanje (angl. QuickSort):

(37)

Diplomska naloga 21

"algorithm":"QuickSort",

"problem":"Sorting",

"description":"Sorts an array of numbers in the selected order.",

"inputFormat":"Input has to be a sequence of whole numbers, separated by spaces.",

"inputExample":"10 -3 123 5000 0",

"parametersFormat":"Parameter 1: Sorting order;

Options: 'ascending', 'descending'; Default: 'ascending'",

"parametersExample":"['ascending']",

"outputFormat":"A sequence of ordered numbers is returned, separated by spaces.",

"outputExample":"-3 0 10 123 5000"

O vsakem problemu so na voljo naslednji podatki:

ˆ ime;

ˆ opis;

ˆ kategorija.

Za laˇzje spreminjanje so podatki shranjeni v namenski json datoteki, ki se prebere ob zagonu streˇznika.

Avtentikacija

Avtentikacija je izvedena s pomoˇcjo JWT standarda za varno prenaˇsanje JSON objektov. JWT ˇzetoni so sestavljeni iz glave, tovora (kamor shra- nimo naˇse podatke) in podpisa. Podpis ustvarimo s pomoˇcjo kodirane glave, kodiranega telesa, zasebnega kljuˇca in izbranega kriptografskega algoritma. Veljavnost ˇzetona ˇcasovno omejimo.

Ko se uporabnik prijavi s svojim uporabniˇskim imenom in geslom, prejme JWT ˇzeton, ki je veljaven 24 ur. Pri nadaljnjih dostopih do API-ja mora uporabnik dobljeni ˇzeton vkljuˇciti v glavo zahtevka. Upo-

(38)

22 Aljaˇz Markoviˇc rabljena je avtentikacijska shema Bearer, ki je namenjena poˇsiljanju varnostnih ˇzetonov. Primer uporabe ˇzetona pri klicu z orodjem cURL:

curl localhost:8090/user/5fbba43a4c7d502688fe2c9 -H "Authorization: Bearer

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiO jE2MTAwMTQ1NjQsInVzZXJfaWQiOiI1ZmVhMzM1MGNmODZ kMGU4M2QxOTFjYWQiLCJ1c2VyX3VzZXJuYW1lIjoidGVzd CJ9.GSW4MWAqzYcCqV1nw_Kou8JLlo_FLko4AipaNkIpXzI"

Streˇznik

Zadnji del kode v Go rutini poˇzene spletni streˇznik. Z uporabo Go kanalov (angl. channel) je zagotovljena elegantna zaustavitev streˇznika (angl. graceful shutdown). Streˇznik ob zaustavitvi preneha sprejemati nove zahtevke, za dokonˇcanje trenutnih pa mu ostane ˇse 30 sekund.

5.2.2 Paket Modeli

Paket vsebuje definicije struktur, ki predstavljajo obliko dokumentov v po- datkovni bazi. Vsaka struktura vsebuje polja pripadajoˇcega dokumenta sku- paj s podatkovnim tipom. Prav tako so prisotne JSON in BSON oznaˇcbe, ki se uporabljajo pri pretvorbi med formatom in strukturo. V primeru upo- rabnikov strukturi pripadata tudi metodi za kodiranje in dekodiranje JWT ˇzetonov.

Izvorna koda 5.2 prikazuje definicijo strukture podatkovnega tipa Re- quest. Polji ID in user sta tipa primitive.ObjectID, ki ga definira uporabljeni gonilnik podatkovne baze MongoDB.

1 type R eq ue st s t r u c t {

2 ID p r i m i t i v e . ObjectID `j s o n : ” i d ” bson : ” i d , omitempty

`

3 A l g o r i t h m s t r i n g `j s o n : ” a l g o r i t h m ”`

4 I n p u t s t r i n g `j s o n : ” i n p u t ”`

5 P a r a m e t e r s [ ]s t r i n g `j s o n : ” p a r a m e t e r s ”`

6 Output s t r i n g `j s o n : ” o u t p u t ”`

(39)

Diplomska naloga 23

7 R e q u e s t e d s t r i n g `j s o n : ” r e q u e s t e d ”` 8 Completed s t r i n g `j s o n : ” c o m p l e t e d ”` 9 ExecutionTime s t r i n g `j s o n : ” e x e c u t i o n T i m e ”` 10 User p r i m i t i v e . ObjectID `j s o n : ” u s e r ”`

11 }

Izvorna koda 5.1: Definicija strukture zahtevka

5.2.3 Paket Poti

Zadnji paket vsebuje vse potrebne funkcionalnosti za zagotavljanje CRUD operacij dostopnih toˇck. Ustvari (angl. create), preberi (angl. read), poso- dobi (angl. update) in izbriˇsi (angl. delete) so osnovne ˇstiri funkcije trajne shrambe podatkov. Z naˇstetimi funkcijami ustvarjamo, pridobivamo, poso- dabljamo in briˇsemo podatke v podatkovni bazi. Naˇceloma vsakemu podat- kovnemu modelu, ki ga hranimo, pripada loˇcena skupina funkcij.

Vsaki skupini dostopnih toˇck pripada struktura, ki vsebuje zapisovalnik podatkov (angl. logger) in odjemalec za dostop do podatkovne baze. Posame- zni CRUD operaciji pripada metoda. V jeziku Go so metode tiste funkcije, ki vsebujejo poseben parameter, poimenovan receiver. Ta omogoˇca, da funkcije pripadajo doloˇceni strukturi in tako dostopajo do njenih polj.

Ker smo uporabili ogrodje Echo, morajo vse metode zadoˇsˇcati predpisani strukturi funkcij, vsaka pa vsebuje vse potrebno za obdelavo zahtevkov. To zajema validacijo vhodnih podatkov, avtorizacijo uporabnikov, komunikacijo s podatkovno bazo ter vraˇcanje povratnih informacij poˇsiljateljem zahtevka.

Izjema sta metodi, namenjeni zahtevkom za izvedbo algoritmov ter zahtev- kom za izvedbo algoritmov s shranjenimi podatki. Ti, poleg omenjenega, vsebujeta tudi kodo za klic komponente Algo Jedro, ki izvaja algoritme. Klic se opravi kot zahtevek vrste HTTP Post, ki vsebuje parametre, vhodne po- datke ter ime zahtevanega algoritma.

Izvorna koda 5.2 prikazuje definicijo strukture (vrstice 1–4) in eno izmed pripadajoˇcih metod (vrstice 6–36). Metoda je namenjena shranitvi novih podatkov uporabnika. Prvo iz zahtevka pridobi podane podatke in JWT

(40)

24 Aljaˇz Markoviˇc ˇzeton (vrstice 8–21). Nato zaˇcasni strukturi tipa Data doloˇci preostala polja (vrstice 22–25). Sledi vstavitev dokumenta v podatkovno bazo (vrstice 28–

33) in vrnitev vstavljenega dokumenta uporabniku (vrstica 35).

1 type Datas s t r u c t { 2 l o g *l o g . L o g g e r

3 db *mongo . Database

4 }

5

6 func ( r e q *Datas ) NewData ( c e c h o . Context ) error {

7 tempData := models . Data{}

8 e r r := j s o n . NewDecoder ( c . Re q ue st ( ) . Body ) . Decode(&tempData ) 9 i f e r r != n i l {

10 l o g . P r i n t l n ( e r r . E r r o r ( ) )

11 return c . JSON( h t t p . StatusBadRequest ,

12 j s o n . RawMessage (`{” message ” : ” E r r o r d e c o d i n g r e q u e s t body ”}`) )

13 }

14 jwtToken := c . Get ( ” u s e r ” ) . (*j w t . Token )

15 j w t C l a i m s := jwtToken . Claims . ( j w t . MapClaims )

16 userID , e r r := p r i m i t i v e . ObjectIDFromHex ( j w t C l a i m s [ ” u s e r i d ” ] . ( s t r i n g) )

17 i f e r r != n i l {

18 l o g . P r i n t l n ( ” E r r o r c o n v e r t i n g u s e r i d ” + e r r . E r r o r ( ) ) 19 return c . JSON( h t t p . S t a t u s I n t e r n a l S e r v e r E r r o r ,

20 j s o n . RawMessage (`{” message ” : ” I n t e r n a l s e r v e r e r r o r ”}`) )

21 }

22 tempData . User = u s e r I D

23 tempData . Allowed = [ ]s t r i n g{}

24 tempData . C r e a t e d = t i m e . Now ( ) . Format ( t i m e . RFC3339 ) 25 tempData . Updated = t i m e . Now ( ) . Format ( t i m e . RFC3339 )

26 ctx , c a n c e l := c o n t e x t . WithTimeout ( c o n t e x t . Background ( ) , 5*t i m e . Second )

27 defer c a n c e l ( )

28 r e s , e r r := r e q . db . C o l l e c t i o n ( ” d a t a s ” ) . I n s e r t O n e ( ctx , tempData ) 29 i f e r r != n i l {

30 l o g . P r i n t l n ( ” E r r o r i n s e r t i n g d a t a ” + e r r . E r r o r ( ) ) 31 return c . JSON( h t t p . S t a t u s I n t e r n a l S e r v e r E r r o r ,

(41)

Diplomska naloga 25

32 j s o n . RawMessage (`{” message ” : ” Database e r r o r i n s e r t i n g d a t a ”}

`) )

33 }

34 tempData . ID = r e s . I n s e r t e d I D . ( p r i m i t i v e . ObjectID ) 35 return c . JSON( h t t p . StatusOK , tempData )

36 }

Izvorna koda 5.2: Struktura skupine dostopnih toˇck za shranjene podatke in pripadajoˇca metoda

5.3 Algoritmi

Za izvajanje algoritmov smo ustvarili svojo komponento, poimenovano Algo Jedro. Ta je prav tako napisana v programskem jeziku Go. Nudi le eno dostopno toˇcko, ki je namenjena zahtevkom za izvedbo algoritma. Za izvedbo je potrebno poslati zahtevek vrste HTTP Post.

Prvi trije paketi, ki jih vsebuje, so zasnovani na enak naˇcin kot pri kom- ponenti Algo API, opisani v prejˇsnjem delu poglavja. To so sledeˇci paketi:

ˆ Api – vzpostavitev streˇznika;

ˆ Modeli – definicije struktur;

ˆ Poti – obravnava zahtevka in odziva.

Glavni del komponente predstavlja ˇcetrti paket. Ta vsebuje vse potrebno za izvajanje samih algoritmov. Ob prejetju zahtevka se glede na izbran algori- tem izvede pripadajoˇca koda, ki skrbi za razˇclenjevanje in izvedbo algoritma.

V primeru nepravilnosti se izvajanje prekine. Namesto rezultata algoritma komponenta vrne opis napake. Algo API dobljeno posreduje poˇsiljatelju zah- tevka. V primeru uspeˇsne razˇclenitve podatkov sledi izvedba algoritma, ˇcas izvajanja algoritma se beleˇzi in vrne skupaj z rezultatom, v primeru preko- mernega ˇcasa izvajanja pa se to prekine in vrne pripadajoˇc odziv.

(42)

26 Aljaˇz Markoviˇc

5.3.1 Dodajanje algoritmov

Za dodajanje algoritmov je potrebno vstaviti Go programsko kodo, ki poskrbi za razˇclenjevanje vhodnih podatkov in zagon algoritmov na izbran naˇcin. Za- dostiti mora zahtevam vmesnika Algorithm, izvorna koda 5.3. Vmesnik (vr- stice 1–3) zahteva implementacijo metode run, ki sprejme spremenljivko tipa Parameters (vrstice 4–8). Ta vsebuje zahtevani algoritem, vhodne podatke in podane parametre. Metoda mora vrniti rezultat izvajanja, ˇcas izvajanja in morebitno napako.

1 type A l g o r i t h m i n t e r f a c e {

2 run ( P a r a m e t e r s ) (string, string, error)

3 }

4 type P a r a m e t e r s s t r u c t {

5 A l g o r i t h m s t r i n g `j s o n : ” a l g o r i t h m , omitempty ”` 6 I n p u t s t r i n g `j s o n : ” i n p u t , omitempty ”` 7 P a r a m e t e r s [ ]s t r i n g `j s o n : ” p a r a m e t e r s , omitempty ”`

8 }

Izvorna koda 5.3: Vmesnik za dodajanje algoritmov

Algoritmi, ki jih komponenta izvaja, so lahko napisani v raznih program- skih jezikih. Na voljo imamo tri naˇcine integracije.

Go koda

Kadar je programski jezik algoritma Go, je integracija trivialna. Kodo dodamo kot paket in algoritme pokliˇcemo na enak naˇcin kot druge funkcije v naˇsem programu. Poskrbeti moramo za obravnavo morebi- tnih napak pri izvajanju. V tem primeru se vhodni podatki podajo kot parameter funkcije.

C koda

V primeru programskega jezika C to lahko storimo z uporabo paketa cgo. Pri tem moramo zagotoviti, da lahko okolje, v katerem se kom- ponenta izvaja, prevede in izvede C programe. Kljub temu je uporaba C funkcij v Go programu nekoliko oteˇzena, saj moramo poskrbeti za pretvorbo podatkovnih tipov.

(43)

Diplomska naloga 27 Zunanji program

Tretja moˇznost je dodajanje algoritmov kot zunanjih programov. Ta pristop omogoˇca uporabo algoritmov v poljubnem programskem jeziku.

Algoritmi morajo biti integrirani kot samostojen program ali kot del programa, ki omogoˇca izvedbo. Vse vhodne podatke in morebitne pa- rametre podamo ob klicu programa na standardni vhod, rezultat pa nato preberemo iz standardnega izhoda programa. Paziti moramo, da lahko okolje, v katerem se komponenta izvaja, izvede algoritme. Moˇzna reˇsitev je uporaba vsebnikov (npr. Docker).

Dodali smo dve vrsti algoritmov in pri tem uporabili drugi in tretji naˇcin.

5.3.2 Urejevalni algoritmi

Prva skupina algoritmov so urejevalni algoritmi. Njihov namen je razvrstitev elementov v seznamu glede na izbran naˇcin. V naˇsem primeru gre za razvr- stitev ˇstevil v padajoˇcem ali nepadajoˇcem zaporedju. Implementirali smo jih v jeziku C in jih v komponento, s pomoˇcjo paketa cgo, dodali kot del kode.

Kot vhodne podatke sprejmejo polje (angl. array) ˇstevil. Po konˇcanem iz- vajanju vrnejo urejeno polje ˇstevil. Implementirali smo naslednje urejevalne algoritme:

ˆ Navadno vstavljanje;

ˆ Navadne zamenjave;

ˆ Navadno izbiranje;

ˆ Hitro urejanje;

ˆ Urejanje z zlivanjem.

5.3.3 K-center algoritmi

Drugo skupino predstavljajo algoritmi, ki reˇsujejo problem razmeˇsˇcanja cen- trov. Te smo dodali kot zunanji program. Uporabili smo izvedbo iz ma-

(44)

28 Aljaˇz Markoviˇc gistrskega dela avtorja Mihe Elerˇsiˇca [7]. Poleg algoritmov izvedba vsebuje glavni program. Ta glede na podane parametre in vhodne podatke izvede ˇzelen algoritem ter vrne rezultat in ˇcas izvajanja. Glavni program za izvedbo ˇzelenega algoritma zahteva naslednje parametre:

ˆ Input – pot do datoteke z vhodnimi podatki;

ˆ Centers – ˇstevilo centrov;

ˆ Method – ime algoritma;

ˆ Format – format vhodnih podatkov.

Vhodni podatki morajo biti podani kot datoteka, zato pred klicem programa izvedemo razˇclenjevanje in ustvarimo zaˇcasno datoteko.

Parametra Format in Centers uporabnik poda v telesu zahtevka. Vhodne podatke je moˇc podati v treh formatih. Izvedba nudi 8 osnovnih algoritmov ter 11 razliˇcic, skupaj 19 algoritmov. Implementirani so naslednji osnovni algoritmi:

ˆ Izˇcrpno preiskovanje;

ˆ Reˇsevanje s prevedbo na dominantne mnoˇzice;

ˆ Poˇzreˇsen algoritem;

ˆ Plesnikov algoritem;

ˆ Hochbaum-Shmoysov algoritem;

ˆ CDS algoritem.

Izvorna koda 5.4 prikazuje Go programsko kodo za integracijo K-center algoritmov. Prvi del metode run, ki jo zahteva vmesnik Algorithm, sluˇzi razˇclenjevanju vhodnih podatkov (vrstice 2–48). V primeru nepravilnih pa- rametrov se izvajanje prekine in uporabniku vrne odgovor z napako. Za uporabo glavnega programa moramo vhodne podatke podati v datoteki, zato

(45)

Diplomska naloga 29 prejete s pomoˇcjo regularnih izrazov razˇclenimo in jih zapiˇsemo v zaˇcasno da- toteko. Sledi drugi del (vrstice 49–65), ki sluˇzi izvedbi algoritma. Glavni pro- gram pokliˇcemo in na privzeti vhod podamo zahtevane parametre, vkljuˇcno s potjo do ustvarjene datoteke. Na koncu rezultat izvajanja preberemo in ga posredujemo uporabniku.

1 func ( k K c e n t e r ) run ( r e q u e s t P a r a m e t e r s ) (string, string, error) {

2 i f len( r e q u e s t . P a r a m e t e r s ) < 1 {

3 return ” Format n o t s p e c i f i e d , p l e a s e r e f e r t o d o c u m e n t a t i o n ” ,

” 0 s ” , n i l

4 }

5 t f i l e , e r r := i o u t i l . TempFile ( ” ” , ” graph ” ) 6 i f e r r != n i l {

7 return ” ” , ” ” , e r r

8 }

9 defer o s . Remove ( t f i l e . Name ( ) )

10 i f r e q u e s t . P a r a m e t e r s [ 0 ] == ”pmed” {

11 s t r i n g L i n e s := s t r i n g s . R e p l a c e ( r e q u e s t . Input , ”\n” , ” ” , =1) 12 r e g := r e g e x p . MustCompile (`(\w+) (\w+) (\w+)`)

13 s t r i n g L i n e s = r e g . R e p l a c e A l l S t r i n g ( s t r i n g L i n e s , ”$0\n” ) 14 t f i l e . W r i t e S t r i n g ( s t r i n g L i n e s )

15 e r r = o s . Chmod( t f i l e . Name ( ) , 0 7 7 7 ) 16 i f e r r != n i l {

17 return ” ” , ” ” , e r r

18 }

19 } e l s e i f r e q u e s t . P a r a m e t e r s [ 0 ] == ” graph ” { 20 i f len( r e q u e s t . P a r a m e t e r s ) < 2 {

21 return ”Number o f c e n t e r s m i s s i n g , p l e a s e r e f e r t o d o c u m e n t a t i o n ” , ” ” , n i l

22 }

23 r e g := r e g e x p . MustCompile (`( .*? ) (\[ [ Nodes ˆ\] ]*\] .*) (\[ [ Edges ˆ\] ]*\] .*)`)

24 s t r i n g L i n e s := r e g . F i n d A l l S t r i n g S u b m a t c h ( r e q u e s t . Input , =1) 25 t f i l e . W r i t e S t r i n g ( s t r i n g L i n e s [ 0 ] [ 1 ] )

26 r e g = r e g e x p . MustCompile (`(\( .*?\) )`)

27 s t r i n g L i n e := r e g . R e p l a c e A l l S t r i n g ( s t r i n g L i n e s [ 0 ] [ 2 ] , ”\n$1 ” ) 28 t f i l e . W r i t e S t r i n g ( ”\n” + s t r i n g L i n e )

(46)

30 Aljaˇz Markoviˇc

29 s t r i n g L i n e = r e g . R e p l a c e A l l S t r i n g ( s t r i n g L i n e s [ 0 ] [ 3 ] , ”\n$1 ” ) 30 t f i l e . W r i t e S t r i n g ( ”\n” + s t r i n g L i n e )

31 e r r = o s . Chmod( t f i l e . Name ( ) , 0 7 7 7 ) 32 i f e r r != n i l {

33 return ” ” , ” ” , e r r

34 }

35 } e l s e i f r e q u e s t . P a r a m e t e r s [ 0 ] == ” p a j e k ” { 36 i f len( r e q u e s t . P a r a m e t e r s ) < 2 {

37 return ”Number o f c e n t e r s m i s s i n g , p l e a s e r e f e r t o d o c u m e n t a t i o n ” , ” ” , n i l

38 }

39 r e g := r e g e x p . MustCompile (`(\*v e r t i c e s\s\d*)\s*(\*a r c s )\s*( .* $ )`)

40 s t r i n g L i n e s := r e g . F i n d A l l S t r i n g S u b m a t c h ( r e q u e s t . Input , =1) 41 t f i l e . W r i t e S t r i n g ( s t r i n g L i n e s [ 0 ] [ 1 ] + ”\n” )

42 t f i l e . W r i t e S t r i n g ( s t r i n g L i n e s [ 0 ] [ 2 ] + ”\n” ) 43 r e g = r e g e x p . MustCompile (`(\w+) (\w+) (\w+)`)

44 s t r i n g L i n e := r e g . R e p l a c e A l l S t r i n g ( s t r i n g L i n e s [ 0 ] [ 3 ] , ”$0\n” ) 45 t f i l e . W r i t e S t r i n g ( s t r i n g L i n e )

46 } e l s e {

47 return ” Format n o t a v a i l a b l e , p l e a s e r e f e r t o d o c u m e n t a t i o n ” ,

” ” , n i l

48 }

49 var b [ ]byte 50 e r r = n i l

51 i f r e q u e s t . P a r a m e t e r s [ 0 ] == ”pmed” {

52 cmd := e x e c . Command( ” . / k c e n t e r ” , ”=i ” , t f i l e . Name ( ) , ”=m” , r e q u e s t . Algorithm , ”=f ” , r e q u e s t . P a r a m e t e r s [ 0 ] )

53 b , e r r = cmd . CombinedOutput ( ) 54 } e l s e {

55 cmd := e x e c . Command( ” . / k c e n t e r ” , ”=i ” , t f i l e . Name ( ) , ”=m” , r e q u e s t . Algorithm , ”=f ” , r e q u e s t . P a r a m e t e r s [ 0 ] , ”=c ” , r e q u e s t . P a r a m e t e r s [ 1 ] )

56 b , e r r = cmd . CombinedOutput ( )

57 }

58 i f e r r != n i l {

59 return ” E r r o r e x e c u t i n g a l g o r i t h m : ” + e r r . E r r o r ( ) , ” ” , n i l

60 }

(47)

Diplomska naloga 31

61 s t := fmt . S p r i n t f ( ”%s ” , b )

62 r e := r e g e x p . MustCompile (`\r ?\n`) 63 s t = r e . R e p l a c e A l l S t r i n g ( s t , ” ” )

64 var o u t s [ ]s t r i n g = s t r i n g s . S p l i t ( s t , ” , ” ) 65 return o u t s [ 0 ] , o u t s [ 1 ] + ”ms” , n i l

66 }

Izvorna koda 5.4: Go programska koda za integracijo K-center algoritmov

5.4 Podatkovna baza

Uporabljena je nerelacijska MongoDB podatkovna baza, ki uporablja doku- mente formata BSON. Ta je zelo podoben formatu JSON, ki je uporabljen pri vsej komunikaciji z API-jem. Potroˇsi nekaj dodatnega prostora, saj po- nuja dodatne podatkovne tipe. To omogoˇca trivialno pretvorbo med JSON in BSON zapisom naˇsih podatkov. MongoDB podatkovna baza se na najviˇsjem nivoju deli na zbirke (angl. collection), v katere so razvrˇsˇceni dokumenti. V naˇsem primeru vsebuje tri zbirke: uporabniki, zahtevki in podatki.

Uporabniki

Zbirka vsebuje dokumente, ki predstavljajo uporabniˇske raˇcune.

Dokumenti vsebujejo naslednja polja:

ˆ id – unikatni identifikator;

ˆ username – uporabniˇsko ime;

ˆ email – e-poˇstni naslov uporabnika;

ˆ password – zgoˇsˇcena vrednost gesla;

ˆ created – datum in ˇcas nastanka dokumenta;

ˆ updated – datum in ˇcas posodobitve dokumenta.

Zahtevki

Zbirka vsebuje dokumente, ki predstavljajo zahtevke uporabnikov.

Dokumenti vsebujejo naslednja polja:

(48)

32 Aljaˇz Markoviˇc

ˆ id – unikatni identifikator;

ˆ algorithm – ime algoritma;

ˆ input – vhodni podatki algoritma, shranjeni kot niz znakov;

ˆ parameters – parametri algoritma;

ˆ output – izhod algoritma;

ˆ requested – datum in ˇcas zahtevka;

ˆ completed – datum in ˇcas zakljuˇcka zahtevka;

ˆ executiontime – ˇcas izvajanja algoritma;

ˆ user – unikatni identifikator uporabnika, ki je poslal zahtevek.

Podatki

Zbirka vsebuje dokumente, ki vsebujejo shranjene podatke uporabni- kov.

Dokumenti vsebujejo naslednja polja:

ˆ id – unikatni identifikator;

ˆ data – vhodni podatki algoritmov, shranjeni kot niz znakov;

ˆ user – unikatni identifikator uporabnika, ˇcigar so podatki;

ˆ allowed – seznam drugih uporabnikov, ki lahko dostopajo do po- datkov;

ˆ created – datum in ˇcas nastanka dokumenta;

ˆ updated – datum in ˇcas posodobitve dokumenta.

5.5 Dokumentacija

Ker je programska reˇsitev namenjena tudi samostojni uporabi brez grafiˇcnega vmesnika, je pomembna dobra dokumentacija, ki mora biti berljiva tako ljudem kot raˇcunalnikom. V ta namen smo s pomoˇcjo Swagger orodij ustvarili dokumentacijo, ki zadoˇsˇca standardu OpenAPI 3.0. Vsebuje natanˇcne opise

(49)

Diplomska naloga 33 vseh dostopnih toˇck, ki jih nudi naˇs API. O vsaki toˇcki so na voljo naslednje informacije.

Tip dostopne toˇcke

Definiran je tip zahtevka, ki mora biti poslan za uporabo dostopne toˇcke (npr. GET).

Opis dostopne toˇcke

Opis vsebuje namen dostopne toˇcke, kaj omogoˇca in vse pomoˇzne in- formacije za laˇzje razumevanje uporabe.

Parametri

Za vsak parameter je na voljo kratek opis namena, tip parametra ter primer. V primeru, da je parameter nujen, je prisotna znaˇcka required.

Telo zahtevka

Pri zahtevkih, ki to zahtevajo, so na voljo tudi podatki o telesu zah- tevka, ki mora biti vsebovan. Na voljo je opis, podatkovna shema, primer ter medijski tip telesa (npr. application/json).

Odzivi

Za vsak moˇzen odziv, s katerim odgovori API, je na voljo podrobna de- finicija. Ta vsebuje medijski tip, podatkovno shemo, tip ter standardno http kodo odziva.

Prav tako vsebuje podatke o naˇcinu avtorizacije. Dokumentacija je na voljo v dveh formatih – na dostopnih toˇckah /swagger.json ter /swagger.yaml. Na voljo je tudi grafiˇcna predstavitev dokumentacije. Ta je dostopna na dostopni toˇcki /docs. Omogoˇca izvajanje samih zahtevkov in tako sluˇzi kot preprost grafiˇcni vmesnik API-ja. Z uporabo tako swagger kot drugih orodij je moˇzno generirati osnutke programske kode, ki olajˇsajo izdelavo lastnih odjemalcev API-ja.

(50)

34 Aljaˇz Markoviˇc

5.6 Spletni vmesnik

Zadnjo komponento predstavlja spletna aplikacija. Ta storitvi ne doda novih funkcionalnost, saj sluˇzi le kot grafiˇcni vmesnik za laˇzjo uporabo. Zasno- vana je kot enostranska aplikacija (angl. Single-page application, SPA), kar pomeni, da se celotna aplikacija prenese ob prvem obisku in nato izvaja v brskalniku uporabnika. Tisti deli strani, ki se skozi uporabo ne spreminjajo, tako ostanejo in se ne prikazujejo ponovno. Za izdelavo takˇsne aplikacije je bila uporabljena javascript knjiˇznica React.

Aplikacija je logiˇcno razdeljena na dva dela. Prvi del sestavljajo kom- ponente, ki predstavljajo posamezne dele aplikacije (npr. stranski meni).

Drugega predstavlja kontekst, ki vsebuje vse potrebno za shrambo in upra- vljanje stanja uporabnik. Vsebuje tudi funkcije za komunikacijo z osrednjim delom naˇse aplikacije, Algo API.

5.6.1 Komponente

Uporabnik aplikacijo uporablja s pomoˇcjo stranskega ali vrhnjega menija.

Z uporabo slednjega se lahko prijavi z uporabniˇskim raˇcunom, ustvari nov uporabniˇski raˇcun ali odjavi. Stranski meni omogoˇca menjavo osrednje kom- ponente, ki vsebuje doloˇcene funkcionalnosti. Na voljo so vse funkcionalnosti, ki jih podpira Algo API. Pri izdelavi komponent so bile uporabljene mnoge komponente ogrodja za izdelavo uporabniˇskih vmesnikov, Material-UI [2].

Neprijavljenemu uporabniku so na voljo naslednje komponente:

Nov zahtevek

Komponenta omogoˇca izvedbo novega zahtevka brez uporabniˇskega raˇcuna. Uporabnik izbere problem in ˇzelen algoritem, nato poda vho- dne podatke in morebitne parametre. Po izvedbi algoritma se prikaˇze rezultat izvajanja.

(51)

Diplomska naloga 35 Pomoˇc

Komponenta pomoˇc je namenjena prikazu informacij o problemih in algoritmih. Uporabnik izbere problem ali algoritem, ki ga zanima, nato se prikaˇzejo podrobnosti.

Prijavljenemu uporabniku so, poleg omenjenih, na voljo dodatne kom- ponente. Pri komponenti nov zahtevek lahko uporabnik namesto podatkov poda unikatni identifikator shranjenih podatkov.

Novi podatki

Uporabnik lahko s pomoˇcjo komponente shrani nove vhodne podatke.

Po vnosu se mu prikaˇzejo shranjeni podatki.

Zahtevki

Komponenta primarno sluˇzi prikazu vseh preteklih zahtevkov uporab- nika. Ti so prikazani v tabeli, kjer uporabnik z razˇsiritvijo posame- znega zahtevka dostopa do podrobnosti. Dodatno nudi moˇznost izbrisa ˇzelenega zahtevka.

Podatki

Komponenta je podobna komponenti zahtevki, le da prikazuje shra- njene podatke uporabnika. Ti so prav tako prikazani v tabeli. Uporab- nik lahko ˇzelene podatke izbriˇse ali uredi.

Nastavitve

Komponenta sluˇzi prikazu in urejanju uporabniˇskega raˇcuna. Uporab- nik lahko spremeni svoje uporabniˇsko geslo, e-poˇstni naslov ali geslo.

Za prijavo, odjavo, registracijo in urejanje podatkov se v ospredju prikaˇzejo manjˇse namenske komponente.

5.6.2 Kontekst uporabnika

Za implementacijo stanja uporabnika je uporabljena knjiˇznica Redux. Ta doda shrambo podatkov, do katere lahko dostopamo iz katere koli kompo- nente. V stanju se hranijo naslednji podatki:

(52)

36 Aljaˇz Markoviˇc

ˆ userID – unikatni identifikator uporabnika;

ˆ token – JWT ˇzeton uporabnika;

ˆ username – uporabniˇsko ime uporabnika;

ˆ email – e-poˇstni naslov uporabnika;

ˆ requests – pretekli zahtevki uporabnika;

ˆ datas – shranjeni podatki uporabnika;

ˆ algorithms – seznam algoritmov API-ja;

ˆ helps – pomoˇc za posamezne algoritme;

ˆ problems – seznam problemov;

ˆ details – informacije o posameznem problemu.

Komponente, ki uporabljajo stanje oz. del stanja, se ob njegovi spremembi samodejno posodobijo.

Ob obisku aplikacije se izvedeta klica API-ja, ki vrneta seznam algorit- mov in problemov. V primeru avtentikacije uporabnika se ustvari piˇskotek, ki se ob nadaljnjih obiskih strani prebere. Aplikacija lahko s tem uporab- nika samodejno prijavi. Podatki v piˇskotku se ob zagonu aplikacije shranijo v stanje. Prav tako se izvedejo klici API-ja za pridobitev seznama zahtev- kov, podatkov uporabnika in podatkov uporabniˇskega raˇcuna. Ob nadaljnji uporabi se klici izvajajo glede na akcije uporabnika.

5.7 Priprava komponent

Z izjemo podatkovne baze smo vse komponente zapakirali v Docker vseb- nike, kar nam omogoˇca preprostejˇse skaliranje in postavitev komponent. Da bi ustvarili vsebnik, moramo pripraviti datoteko, poimenovano Dockerfile, ki vsebuje ukaze za izgradnjo vsebnika. Vkljuˇciti moramo vse potrebno za izvajanje komponente.

(53)

Diplomska naloga 37 Algo API

Osnova je Alpine distribucija Linux operacijskega sistema, ki vsebuje vse potrebno za izvajanje Go programov. Poleg programske kode kom- ponente so dodani tudi vsi zunanji paketi, ki jih uporablja.

Algo Jedro

Vsebnik za osnovo uporablja Buster distribucijo Linux operacijskega sistema. Vsebuje vse potrebno za izvajanje tako C, kot tudi C++

programov. Dodan je tudi program kcenter, ki je uporabljen za izvedbo kcenter algoritmov. Izvorna koda 5.5 prikazuje datoteko Dockerfile za izgradnjo vsebnika.

1 FROM g o l a n g : 1 . 1 5 . 6=b u s t e r a s b u i l d e r 2 RUN apt=g e t i n s t a l l g i t

3 RUN mkdir / a l g o 4 ADD . / a l g o 5 WORKDIR / a l g o

6 COPY go . mod go . sum . /

7 RUN go mod download

8 COPY . .

9 RUN CGO ENABLED=1 GOOS=l i n u x go b u i l d =a =i n s t a l l s u f f i x c g o

=o main . 10

11 FROM g o l a n g : 1 . 1 5 . 6=b u s t e r 12 RUN mkdir / a l g o

13 WORKDIR / a l g o /

14 COPY==from=b u i l d e r / a l g o / main . 15 COPY==from=b u i l d e r / a l g o / k c e n t e r .

16 EXPOSE 8080

17 CMD [ ” . / main ” ]

Izvorna koda 5.5: Datoteka Dockerfile komponente Algo Jedro Spletna aplikacija

Osnova je prav tako Linux Alpine. Za gostovanje spletne aplikacije je dodan nginx spletni streˇznik.

(54)

38 Aljaˇz Markoviˇc

(55)

Poglavje 6 Testiranje

Da bi ocenili zmogljivost naˇse programske reˇsitve, smo izvedli obremenitveni test. Testiranje je bilo izvedeno lokalno. Uporabljen je bil raˇcunalnik z naslednjimi specifikacijami:

ˆ procesor – Intel i7 8700k, 12MB predpomnilnika

ˆ pomnilnik – 16GB s frekvenco 3200MHz

ˆ disk – SATA SSD

6.1 Obremenitveni test

Test je bil namenjen oceni zmogljivosti naˇse reˇsitve. Ocenjuje predvsem komponento Algo API, saj je zmogljivost druge, Algo Jedro, odvisna preteˇzno od izbranega algoritma in vhodnih podatkov.

Za testiranje smo uporabili orodje Artillery. Posamezen preizkus je trajal 1 minuto, test pa je zajemal tri preizkuse z razliˇcnim ˇstevilom uporabnikov.

Vsak uporabnik je izvedel 3 zahtevke.

ˆ HTTP GET zahtevek – pridobitev informacij o algoritmu;

ˆ HTTP POST zahtevek – izvedba algoritma;

ˆ HTTP GET zahtevek – pridobitev preteklega zahtevka.

39

(56)

40 Aljaˇz Markoviˇc Pri klicu komponente Algo Jedro je bil izbran algoritem Hitro urejanje. Kot vhodni podatek je bilo podano zaporedje 50-ih ˇstevil.

V tabeli 6.1 so prikazani rezultati testa. Prvi stolpec predstavlja ˇstevilo soˇcasnih uporabnikov pri preizkusu. V drugem sledi skupno ˇstevilo zahtev- kov. Tretji vsebuje mediano odzivnih ˇcasov. Mediana je bila izbrana zaradi boljˇse odpornosti na ekstremne vrednosti. Zadnji vsebuje povpreˇcno ˇstevilo odzivov na sekundo, ki jih prejme testno orodje od API-ja.

Komponenta Algo API tako pri 50 kot 75 soˇcasnih uporabnikih deluje hitro, saj je mediana odzivnih ˇcasov majhna. V zadnjem primeru, ko vsako sekundo 100 uporabnikov poˇslje 3 zahtevke, se komponenta upoˇcasni. Medi- ana strmo naraste, kar pomeni, da pri odgovorih prihaja do zamud. Storitev kljub temu deluje normalno, le nekoliko upoˇcasnjeno. ˇStevilo odzivov na sekundo pri 100 uporabnikih prav tako upade pod ˇzeleno vrednost, kar je posledica daljˇsih odzivnih ˇcasov.

ˇSt. uporabnikov na sekundo

Skupno ˇst. zahtevkov

Mediana odzivnih ˇcasov (ms)

Povpreˇcno ˇst.

odzivov na sekundo

50 9000 4,7 150

75 13500 6,4 223

100 18000 362 285

Tabela 6.1: Rezultati obremenitvenega testa

(57)

Poglavje 7 Zakljuˇ cek

V sklopu diplomske naloge smo opravili pregled podroˇcja in predstavili nekaj sorodnih reˇsitev. Opisali smo storitveni model, ki zajema storitve za izvajanje algoritmov na zahtevo. Na osnovi naˇse storitve smo naˇcrtovali in zasnovali programsko reˇsitev.

Reˇsitev je bila zasnovana kot REST API, ki uporabnikom poleg algorit- mov nudi tudi shrambo vhodnih podatkov ter ponuja dve vrsti algoritmov – pet urejevalnih algoritmov in devetnajst k-center algoritmov. Dodatno smo izdelali spletno aplikacijo, ki uporabnikom olajˇsa uporabo reˇsitve.

Programsko reˇsitev smo na koncu testirali. Test, ki je ocenjeval predvsem zmogljivost komponente Algo API, je bil obremenitveni test. Izkazalo se je, da komponenta pri 50 in 75 soˇcasnih uporabnikih, ki vsako sekundo izvedejo 3 zahtevke, deluje nemoteno. Pri 100 uporabnikih se odzivni ˇcasi sicer nekoliko poveˇcajo, a delovanje ostane stabilno.

Izdelana reˇsitev glede na testiranje deluje zadovoljivo, a ostaja moˇznost za izboljˇsave. Moˇzna izboljˇsava bi bila razdelitev komponente Algo API na veˇc manjˇsih komponent, kar bi morda izboljˇsalo uˇcinkovitost.

41

(58)

42 Aljaˇz Markoviˇc

(59)

Literatura

[1] Json Web Tokens. Dosegljivo: https://jwt.io/, 2021. [Dostopano:

13. 1. 2020].

[2] Material-ui: A popular react ui framework. Dosegljivo: https://

material-ui.com/, 2021. [Dostopano: 13. 1. 2020].

[3] OpenAPI initiative. Dosegljivo: https://www.openapis.org/, 2021.

[Dostopano: 13. 1. 2020].

[4] Representational state transfer. Dosegljivo: https://en.wikipedia.

org/wiki/Representational_state_transfer, 2021. [Dostopano: 13.

1. 2020].

[5] S. Aylward et al. “Algorithms as a Service” bridges scientific software consulting with high-quality web services. Dosegljivo:

https://blog.kitware.com/algorithms-as-a-service-bridges- scientific-software-consulting-with-high-quality-web- services/, 2021. [Dostopano: 13. 1. 2020].

[6] Yucong Duan, Yuan Cao, and Xiaobing Sun. Various ’aas’ of everything as a service. 2015 IEEE/ACIS 16th International Conference on Soft- ware Engineering, Artificial Intelligence, Networking and Parallel/Dis- tributed Computing (SNPD), 2015. doi: 10.1109/SNPD.2015.7176215.

[7] Miha Elerˇsiˇc. Eksperimentalno ovrednotenje algoritmov za pro- blem razmeˇsˇcanja centrov : magistrsko delo, 2018. URL https://

repozitorij.uni-lj.si/IzpisGradiva.php?lang=slv&id=103882.

43

(60)

44 Aljaˇz Markoviˇc [8] Algorithmia Inc. Algorithmia. Dosegljivo: https://algorithmia.

com/, 2021. [Dostopano: 13. 1. 2020].

[9] Docker Inc. Docker: Empowering app development for developers. Do- segljivo: https://www.docker.com/, 2021. [Dostopano: 13. 1. 2020].

[10] Facebook Inc. React – a javascript library for building user interfaces.

Dosegljivo: https://reactjs.org/, 2021. [Dostopano: 13. 1. 2020].

[11] MongoDB Inc. MongoDB. Dosegljivo: https://www.mongodb.com/, 2021. [Dostopano: 13. 1. 2020].

[12] SmartBear Software Inc. Swagger: Api documentation & design tools for teams. Dosegljivo: https://swagger.io/, 2021. [Dostopano: 13. 1.

2020].

[13] Google LLC. Golang. Dosegljivo: https://golang.org/, 2021. [Do- stopano: 13. 1. 2020].

[14] Brad Myers and Jeffrey Stylos. Improving API usability. Communica- tions of the ACM, 59:62–69, 05 2016. doi: 10.1145/2896587.

[15] Mohammad Sajid and Zahid Raza. Cloud computing: Issues & chal- lenges. International Conference on Cloud, Big Data and Trust, 20(13):

13–15, 2013.

[16] S Sohan, Frank Maurer, Craig Anslow, and Martin Robillard. A study of the effectiveness of usage examples in REST API documentation. 2017 IEEE Symposium on Visual Languages and Human-Centric Computing (VL/HCC), pages 53–61, 10 2017. doi: 10.1109/VLHCC.2017.8103450.

[17] Colin Ting Si Xue and Felicia Xin. Benefits and challenges of the adop- tion of cloud computing in business. International Journal on Cloud Computing: Services and Architecture (IJCCSA), 6:1–15, 12 2016. doi:

10.5121/ijccsa.2016.6601.

Reference

POVEZANI DOKUMENTI

Windows Communication Foundation pa lahko omogočimo uporabo že razvitih delovnih tokov tudi v drugih sistemih preko standardiziranega vmesnika, kot so spletne

Bo pa v metodologiji dodana tudi migracija IMAP, ki jo lahko uporabimo v primeru, da uporabljamo e- IMAP ali storitve, kot so Google mail, Zimbra, Lotus mail in

Omogoˇ cati jim mora preprost naˇ cin za dodajanje vizualizacij medicinskih algoritmov, urejanje algoritmov, pregled obstojeˇ cih algoritmov, administrativnim uporabnikom pa mora

Tako lahko reˇ cemo, da so spletne storitve del spletnih aplikacij, ki omogoˇ cajo dostop do streˇ znika in podat- kov preko razliˇ cnih internetnih protokolov.. Za izdelavo

 Prijava mora vsebovati podatke o izvajalcu storitve, odgovorni osebi izvajalca storitve, podatke o napotenih delavcih, vrsti storitve, kraju in času izvajanja storitve, podatke

Predstavlja model, ki omogoˇ ca deljenje raˇ cunalniˇskih virov (raˇ cunska moˇ c, pasovna ˇsirina, hramba podatkov, storitve ipd.) preko omreˇ zja, uporab- nik pa jih lahko

(2) Kraj opravljanja storitev, ki jih prejme oseba, ki ni dav č ni zavezanec, je kraj, kjer ima izvajalec storitev sedež svoje dejavnosti. Č e so te storitve

V kolikor nismo ustvarili uporabnika admin, potem smo uporabili napačne prijavne podatke storitve Keystone.. V vlogi administratorja lahko ustvarjamo stanovalce, uporabnike,