dokumendiregister.ee
OtsingAsutusedMCP
Otsing›Tarbijakaitse ja Tehnilise Järelevalve Amet
Väljaminev kiriAvalik

Kiri

Tarbijakaitse ja Tehnilise Järelevalve Amet · 11. jaanuar 2024
Viit
4-11/23/0113/0002
Registreeritud
11. jaanuar 2024
Dokumendi liik
Väljaminev kiri
Funktsioon
4 Majandustegevus 2020 - ...
Sari
4-11 Riigihangete dokumendid
Toimik
4-11/23/0113
Vastutaja
Raul Kallas (Users, Digiteenuste osakond)

Failid

  • 📎4-112301130002 11.01.2024 Väljaminev kiri.asice4696 KB

Sisu (failidest)

Arhitektuuri visioon Originaalfailid: TTJA arhitektuur v1.zip 1. Sisukord 1. Sisukord 2. Äriarhitektuur 3. Andmearhitektuur 3.1. Põhiandmed 3.2. Protsessi andmeid 3.3. Binaarandmed 3.4. Suurandmed 3.5. Avaandmed 3.6. Andmemudelid ja andmete hoidmise tehnoloogiad 3.6.1. Relatsiooniline andmemudel 3.6.2. Dokumentandmemudel 3.6.3. Blokkandmehoidla 3.7. Andmemigratsioon ja sünkronisatsioon 3.8. Andmeolemite keskne haldus 4. Tarkvara arhitektuur mikroteenustel 4.1. Kontseptuaalne arhitektuur 4.2. Tugimoodulid 4.2.1. Identiteedi ja pääsuhalduse moodulid 4.2.2. Autentimise moodul 4.2.3. Isikute moodul 4.2.4. Administratiivmoodul 4.2.5. Maksete moodul 4.2.6. Failide moodul 4.2.7. Tehnilise konfiguratsiooni moodul 4.2.8. Allkirja moodul 4.2.9. Teavitus- ja kommunikatsioonimoodul 4.2.10. Ärilogi moodul 4.2.11. Avaandmete lüüs 4.2.12. Kaardimoodul 4.3. Andmevahetusmoodulid 4.3.1. Süsteemi komponentide andmevahetuse põhimõtted 4.3.2. Süsteemi väliste osadepoolte andmevahetuse põhimõtted 4.3.3. Programmliideste pääsulüüs 4.3.4. X-tee moodul 4.3.5. Asünkroonsete sõnumite vahetuskiht 4.4. Andmemoodulid 4.4.1. Andmebaasimootor 4.4.2. Põhiandmete pääsulüüs 4.4.3. Pinumälu (cache) 4.4.4. Andmete indekseerimine 4.4.5. Pseudonüümimise moodul 4.4.6. Andmete sünkronisaator moodul 4.5. Äriprotsessi moodulid 4.5.1. Protsessimootori kasutamise põhimõtted 4.5.2. Võimalikud eraldiseisvad ärimoodulid 4.6. Kasutajaliidese moodulid 4.6.1. Mikrokasutajaliidesed 4.6.2. Kasutajaliidese disainimustrid ja -vahendid 4.6.3. Andmevahetus tagarakendustega 4.7. Olemasolevad tarkvarad 5. Majutusarhitektuur 5.1. Kontseptuaalne evitus 5.2. Majutustööriistad 5.2.1. Pilveplatvorm Kubernetes 5.2.2. Pideva paigaldamise tarkvara 5.2.3. Monitooring 5.2.4. Tehnilised logid 5.3. PostgreSQL andmebaasi kõrgkäideldatav evitus 5.4. Infrastrutkuuri esialgne indikatiivne vajadus 6. Andmeturve põhimõtted ja ülevaade 6.1. Andmeturbe põhimõtted 6.2. Andmekogude tsoneerimine 7. Tarkvara arendamise ja testimise metoodikad ja praktikad 7.1. Tarkvara arendamise ja projektijuhtimise metoodika 7.2. Testimise metoodikad ja praktikad 7.2.1. Funktsionaalne testimine 7.2.2. Mittefunktsionaalne testimine 8. Koodi- ja konfiguratsiooni haldus, tehiste ehitamine, tarne 8.1. Lähtekoodi haldus, tarne ja CI/CD 8.1.1. Lähtekoodi majutamine 8.1.2. Lähtekoodi tarne haldus 8.1.3. Lähtekoodi ehitamine ja sõltuvuste haldus 8.1.4. Pidev integreerimine ja pidev tarne (CI/CD) 8.2. Konfiguratsioonide haldus 8.2.1. Rakenduste ja keskkondade seaded 8.2.2. Äriprotsessi seaded 9. Süsteemi majutus- ja administreerimise põhimõtted 9.1. DevOps 9.2. GitOps 9.3. Majutus Riigipilves 10. Kasutatud kirjandus 2. Äriarhitektuur Tarbijakaitse ja Tehnilise Järelevalve Amet (edaspidi TTJA)1 on loodud 2019 aastal mitme riigiasutuse ja ameti liitmisel ja tegutseb põhimääruse2 alusel. Nimetatud konsolideerimise tulemusena sündis ühendametkond, millel on üsna lai tegevuste spekter, ja seetõttu tähtis roll Eesti riigis ja ühiskonnas. Ameti põhitegevuseks on ohutusjärelevalve, tururegulatsioon ning seadusest tulenevate kohustuste täitmise kontrollimine järgmistes valdkondades: elektrooniline side, sagedushaldus ja meediateenused; raudteetransport ja EL struktuurivahendite rakendamine; eripädevusnõuetega tööde ning seadmete ja toodete ohutus; ehitised, taristu ja energiatõhusus; tarbijaõigused. TTJA pakub oma ülesannete täitmisel järgmisi teenuseid: tegevus- ja kasutusõiguse andmine (tööstus-, ehitus- ja raudteeohutus, elektrooniline ja raadioside); riiklik järelevalve (tööstusohutus, ehitusvaldkond, energiatõhusus, raudteeohutus, elektrooniline side ja meediateenused, raadiosageduste kasutamine, tarbijaõigused); nõustamistegevus; tarbijavaidluste lahendamine. TTJA asutamisega võttis organisatsioon üle erinevatelt asutustel ka nende asutuste protsessid ja protsesse teotavad infotehnoloogilised lahendused sh. infosüsteemid ja andmebaasid. TTJA strateegiliste eesmärkide3 elluviimiseks on tarvilik reformida nii olemasolevaid äriprotsesse, kui ka neid toetavaid infosüsteeme. Planeerida süsteemi muudatused vastavalt käesoleva aja parimetele infotehnoloogilistele praktikatele ja kaaluda ka tulevikus potentsiaalsete innovaatiliste lahenduste kaasamist infotehnoloogia arendamisel, testimisel, juurutamisel ja haldamisel. Olemasolevad süsteemid on nii moraalselt, kui ka tehniliselt vananenud ja nende edasiarendamine on osutunud ebamõistlikuks. 3. Andmearhitektuur Käeolevas peatükis tutvustame süsteemi andmearhitektuuri, klassifitseerime andmed ja tutvustame põhilisi süsteemis kasutatavaid andmesalvestustehnoloogiaid. Samuti nende rakendamist süsteemi osade disainimisel. Andmed üldiselt jagunevad mitmesugusteks. Käesolevas dokumendis klassifitseerime andmed loogilisteks gruppideks ja käsitleme igat gruppi eraldiseisvalt, näiteks protsessi andmed, binaarandmed, suurandmed, avaandmed ja äriprotsesside põhiandmed. 3.1. Põhiandmed Põhiandmete all mõistame andmeid, mis on eelkõige kirjeldatud õigusaktides näiteks seadus, andmekogu põhimäärus, ministri määrus, korraldus vms. Nende andmete seas on äriprotsessi käigus kogutud ja tekkinud põhilised andmed näiteks avaldused, otsused, õigused jne. Nendel andmetel on määratud andmeturbest lähtuv ISKE turvaklass4, kogumise alus ja säilitamise tähtaeg. Põhiandmetega toimub äriprotsess (menetlus), mille käigus olemasolevaid andmeid muudetakse või tekib juurde uusi põhiandmeid. Põhiandmed omavad ka väljaspool IT süsteemi tähtsust ja tähendust. Põhiandmeid jagatakse ühiskonnale välja avaandmetena ja teiste riigi äriprotsessidele üle riikliku andmevahetusplatvormi. TTJA vaates on baasandmed kirjeldatud alljärgnevates õigusaktides: MTR Majandustegevuse seadustiku üldosa seadus (lühend – MSÜS)5 JvIS Seadme ohutuse seadus https://www.riigiteataja.ee/akt/123032015004?leiaKehtiv Tarbijakaitse ja Tehnilise Järelevalve Ameti järelevalve infosüsteemi põhimäärus https://www.riigiteataja.ee/akt/124032020010 NBA Elektroonilise side seadus (ESS) https://www.riigiteataja.ee/akt/112122018033?leiaKehtiv Majandus- ja kommunikatsiooniministri määrus "Nõuded numbri liikuvuse tagamiseks sideettevõtja vahetamisel" https://www.riigiteataja.ee/akt /126022019012?leiaKehtiv Majandus- ja kommunikatsiooniministri määrus "Numbri broneerimise tingimused" https://www.riigiteataja.ee/akt/103072015016?leiaKehtiv Directive 2002/22/EC of the European Parliament and of the Council on universal service and users' rights relating to electronic communications networks and services (Universal Service Directive) https://ec.europa.eu/digital-single-market/en/news/directive-universal-service-and-users- rights-relating-electronic-communications-networks-and Directive 2002/58/EC concerning the processing of personal data and the protection of privacy in the electronic communications sector and Regulation (EC) https://eur-lex.europa.eu/legal-content/EN/ALL/?uri=celex%3A32002L0058 No 2006/2004 on cooperation between national authorities responsible for the enforcement of consumer protection laws (Text with EEA relevance). https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=celex%3A32004R2006 SASS Elektroonilise side seadus (ESS) https://www.riigiteataja.ee/akt/112122018033?leiaKehtiv Majandus- ja kommunikatsiooniministri määrus "Raadiosageduste kasutamise tingimused ja tehnilised nõuded sagedusloast vabastatud raadioseadmetele" https://www.riigiteataja.ee/akt/126022019014?leiaKehtiv Majandus- ja kommunikatsiooniministri määrus "Tehnilised nõuded sagedusloa alusel kasutatavatele raadioseadmetele" https://www.riigiteataja. ee/akt/117062014008?leiaKehtiv Komisjoni otsus teabe kättesaadavuse ühtlustamise kohta seoses raadiospektri kasutamisega ühenduses 2007/344/EÜ https://eur-lex.europa.eu /legal-content/ET/TXT/?uri=CELEX:32007D0344 GIS Elektroonilise side seadus (ESS) § 1002 https://www.riigiteataja.ee/akt/112122018033?leiaKehtiv Sideteenuse katvuse, kasutuse ja võimaluste kaardistuse infosüsteemi põhimääruse kinnitamine https://adr.mkm.ee/? id=72B0329323B341B2C2258081002C4D39 Antud nimekiri pole ammendav ega lõplik. 3.2. Protsessi andmeid Protsessiandmete all mõistame andmeid, mis tekivad või muutuvad äriprotsessi (menetluse) läbimise käigus, kuid kirjeldavad ainult konkreetset äriprotsessi ja selle omadusi. Nendeks võib lugeda protsessi andmeühikuks millal protsess käivitus (algatati menetlus), milline asutuse töötaja või osapool konkreetselt antud protsessis osaleb, mis toiminguid protsessis tehakse, äriprotsesi staatus jne. Protsessi tehniline kirjeldus (masin-töödeldav algoritm või meta-keelne teisend) võivad ise ka olla protsessi andmed (BPMN notatsioonis kirjeldus). Protsessi andmete alla võib lugeda ka äriprotsessi seadistusi ja muutujate väärtuseid. 3.3. Binaarandmed Binaarandmete all mõistame andmeid, mille esitluskuju on binaarne, üldjuhul ei ole binaarandmed mõistlikul või üldlevinud viisil masin loetavad ja - töödeldavad. Neil ei ole primaarset teksitilist esitluskuju. Eelkõige on binaarsel kujul failid näiteks pildifailid, PDF dokumendid, heli ja videoklipid jne. 3.4. Suurandmed Suurandmeteks nimetatakse selliseid andmekogumeid, mis on nii suured ja keerukad, et nende töötlemiseks tuleb kasutada uusi tehnoloogiaid6. Neid andmeid iseloomustavad üldjuhul suur maht, suur juurdetekkimise kiirus ja suur variatiivsus7. TTJA-s tegeleb suurandmetega antud dokumendi loomise ajal projekt "TTJA Andmeait". Käesolevas dokumendis kirjeldatud mikroteenustel arhitektuuri elluviimisel muutub oluliselt süsteemi andmemudel sh. võivad kasutsuele tulla uued tehnoloogiad ja andmesalvestuse vahendid. Andmeaida arendamisel peab silmas pidama uute andmemudelite ja andmeformaatide temaatikat ja vajadusel tegema koostööd uue platvormi välja töötajatega. 3.5. Avaandmed Avalikud avaandmed (valitsusandmed) tähendavad andmeid, mille on kogunud, tootnud või mille eest on tasunud avaliku sektori asutused ning mis on muudetud vabalt kättesaadavaks ja mis tahes otstarbel taaskasutatavaks. Kasutamistingimused on täpsemalt määratletud litsentsis.8 Avaandmetega seonduv on juhendmaterjalina avaldatud Avaandmete loomise ja avaldamise juhendis9 ja Eesti avaandmed on koondatud Eesti avaandmete portaali10. Käesolevas dokumendis kirjeldatud süsteemis luuakse ja jagatakse avaandmeid. Avaandmete loomise ja avaldamise tehniline lahendus on kirjeldatud peatükis 4.2.12. 3.6. Andmemudelid ja andmete hoidmise tehnoloogiad Käesolevas alapeatükis kirjeldame lähemalt võimalikku andmete säilitamise ja töötlemise põhimõtteid ja lahendusi. Põhiliselt käsitleme kolme olulisemat andmete säilitamise viisi a) relatsiooniline, b) dokument orienteeritud ja c) blokkhoidla. Eelkõige keskendume füüsilisele andmemudelile, mitte loogilisele. Loogiline andmemudel oma üleüldiselt joondub rohkem relatsioonilise andmemudeliga. 3.6.1. Relatsiooniline andmemudel Relatsiooniline andmebaas põhineb relatsioonilisel mudelil ehk baasi loogiline struktuur koosneb relatsioonide kogumist. Relatsioonilise andmemudeli kontseptsiooni esitas 1970. aastal Edgar Frank Codd. Sünonüümselt võib relatsiooni nimetada ka tabeliks, mille struktuur koosneb olemi atribuutidest ja andmekogumitest, teisisõnu veergudest ja ridadest, kus iga veerg saab hoida ainult ühte tüüpi andmeid11. Traditsioonilistes andmebaasi mootorites on relatsiooniline andmemudel implementeeritud tabelite, mis koosnevad veergudest ja ridade gruppidest, mis on loogiliselt omavahel seotud viidete ja viitetabelite (vahetabelite) kaudu. Füüsilise adnmemudeli saamiseks tuleb loogilist andmemudelit normaliseerida. 3.6.2. Dokumentandmemudel Viimase dekaadi jooksul on infotehnoloogias kogunud populaarsust termin NoSQL12, mis on saanud sünonüümiks dokument orienteeritud andmehoidlatele. Dokument andmemudeli üheks omaduseks võib olla, et otseselt ei eksisteeri objekti iseloomustavat tabelit, vaid eksisteerib mingis tekstilises andmevormingus näiteks JSON andmekomplekt, mida nimetatakse „dokumendiks”. Dokument orienteeritud andmebaasi süsteemid on näiteks Apache CouchDB, MongoDB. Nimetud andmebaasimootorite kohta kehtiks küll termin NoSQL, kuna nendes kasutamiseks ei kasutata SQL süntaksit. Küll aga on dokument orienteeritud andmete säilitamine võimalik ka klassikaliste relatsiooniliste andmebaasimootoritega nagu näiteks PostgreSQL. Sealt edasi on võimalik ehitada ka hübriidlahendusi, kus vastavalt vajadusele on võimalik mõlemat andmemudelit kombineerida. Kuna JSON andmeformaat on de facto andmevorming IT-maailmas, siis käsitletakse dokument andmebaasides praktiliselt ainult JSON andmekomplektide hoiustamist. Muus vormingus dokument andmemudelid on marginaalsed. Näiteks on ajalooliselt XML andmete andmebaasis hoidmine olnud võimalik pea samal viisil, kui JSON andmete, kuid sellel on olnud sisulised ja fundamentaalsed puudused, mistõttu ei ole selle kasutamine juurdunud. JSON andmeformaadis andmekomplekti näidis on kujutatud joonisel 1 ja JSON Schema13 samale andmekomplektile on kujutatud joonisel 2. Oluline on ka asjaolu, et dokument-andmemudel ei asenda relatsioonilist andmemudelit kõigis stsenaariumites ja dokument andmemudel ei sobi kõigi ärijuhtude tarbeks andmete säilitamiseks. Kuna relatsiooniline andmemudel on eksisteerinud pikka aega on andmebaasi mootorid optimeeritud töötama relatsiooniliste andmetega. On spetsiifilised funktsioonid ja operatsioonid mille saavutamine dokument orienteeritud andmebaasis võrreldes relatsioonilisega on oluliselt keerulisemad. Dokument orienteeritud andmemudelit on võimalik defineerida läbi meta-skeemi. JSON andmevormingu puhul on võimalik defineerida andmekomplekti kasutades JSON Schema funktsionaalsust. Käesoleval hetkel ei toeta PostgreSQL JSON Schema kasutamist otse andmebaasi funktsionaalsel tasemel, seega tuleb andmekomplekt kirjeldada andmebaasi väliselt või hüübriidmudeliga. PostgreSQL JSON Schema toega on olemas mitmeid tarkvaraarenduse teeke, mis selle probleemi näiteks Java keeles ära lahendavad. Joonis 1. Näidis JSON andmekomplekt Joonis 2. näidis JSON skeem Antud näite JSON skeemist järeldub, et andmekomplektis on kolm kohustuslikku atribuuti eesnimi, perekonnanimi ja vanus. Samuti on kirjeldatud nende lihttüüp ja määratud JSON Schema lisaatribuut „title”, mida saab kasutada, et kirjeldada atribuuti. JSON Schema-s on lisaks veel mitmeid atribuute, mida ära kasutada JSON objekti kirjeldamiseks. JSON andmekomplekti on võimalik vastu skeemi valideerida ja kontrollida. 3.6.3. Blokkandmehoidla Andmeid, millised on kirjeldatud peatükis 3.3 tuleb hoida blokkandmete hoidlas. Käesoleval ajal on kujunenud üleüldiseks standardiks kasutada blokkandmete hoidlateks tehnilisi lahendusi, mis pakuvad andmete salvestamist ja ligipääsu andmetele kasutades Amazon S3 blokihoidmise lähenemisega. S3 on üldtunnustatud protokoll binaarandmetele ligipääsuks. Riigipilv pakub blokkandmehoidla teenust Pilw.io StorageVault14. Blokihoidla puuduseks on asjaolu, et selles, ei saa hoida binaarandmete-failide kohta käivat metainfot näiteks faili tüüp, laiend, omanik, märksõnad, viited indeksitele jne. Selleks tuleb luua süsteemi komponent, mis haldab binaarandmete metainfot. 3.7. Andmemigratsioon ja sünkronisatsioon Uuele platvormile üleminekul peab samal ajal hoidma töös ka vana süsteemi. Kuna vanas süsteemis on ka palju andmeid tuleb neid hakata järk järgult üle viima uuel platvormil arendatud süsteemi. Detailanalüüsi käigus tuleb täpselt spetsifitseerida, millised andmed, millal ja mis viisil üle kolitakse ja milliseid andmeid sünkroniseeritakse. Andmemigratsioon on ühekordne tegevus, mida tehakse vanast süsteemist uude süsteemi. Seda tehakse, kas spetsiaalselt loodava mikroteenusega, SQL migratsiooni skriptidega või mõne valmistarkvaraga. Tuleb hinnata eraldi, millisesse andmehoidu lahendusse andmed üle kantakse ja mis migratsiooni strateegiat tuleks antud olukorras kasutada. Relatsiooniliselt andemudelilt dokument orienteeritud andmemudelile üle viimisel on soovituslik kasutada mikroteenust, kus tegevuste käigus toimub ka andmete valideerimine ja vajadusel andmete parandamine. Andmete sünkroniseerimisel on sama andmestik olemas mõlemas süsteemis, nii vanas kui ka uues. Sünkroniseerimiseks kasutatakse eraldi arendatud mikroteenust, mille ülesanne on hoida uue ja vana süsteemi andmebaasid samade andmetega, kui selline vajadus on. Andmete sünkroniseerimisega tegelev võimalik mikroteenus on kirjeldatud peatükis 4.4.6. Andmete migreerimiseks on mõstlik kasutada vabavaralisi tööriistu näiteks pgloader, replicatsiooni puhul nt pglogical. 3.8. Andmeolemite keskne haldus Suures organisatsioonis, kus käitatakse palju erinevaid äriprotsesse on kasutusel paralleelselt palju erinevaid andmeolemeid. Andmeolemid läbivad kõiki kihte, kuni tehnilise kihini välja. Andmeolemite üle tuleks pidada arvestust ja neid keskelt hallata. Keskselt hallatud andmeolemid tuleks kirjeldada kasutades JSON Schema standardit ja hoiustada GIT koodihoidlas. Mõned andmeolemite keskselt haldamise eelised ja põhimõtted on alljärgnevad: Annab hea ülevaate süsteemi andmeolemitest; On võimalik kasutada dokumentatsioonina; Mainsloetaval kujul andmeolemitest ja nende sostest on võimalik genereerida diagramme; Masin loetaval kujul hoiustatud andmeolemeid on võimalik konverteerida tarkvara lähtekoodi klassideks. (Java puhul POJO-deks); Masin loetaval kujul hoiustatud andmeolemitest on võimalik genereerida testandmeid ja näidisandmeid; Kõigil osapooltel on võimalik pääseda ligi andmeolemite kirjeldustele. Lisaks andmeolemite kesksele haldusele tuleks koos andmeolemitega keskselt hallata ka testandmeid ja näidisandmeid. Joonisel 3 on kujutatud andmeolemite ja testandmete keskset haldust. Joonis 3. Andmeolemite ja testandmete keskne haldus 4. Tarkvara arhitektuur mikroteenustel Selles peatükis kirjeldame süsteemi kontseptuaalne arhitektuuri ja selgitame detailsemalt arhitektuuri osi. Süsteemi kirjeldamiseks oleme kasutanud sõna „moodul”, mis on antud dokumendi raames mikroteenuse sünonüüm. Kogu süsteemi oleme klassifitseerinud viieks moodulite blokiks 1) Tugimoodulid, 2) Andmevahetusmoodulid, 3) Andmemoodulid, 4) Äriprotsessi moodulid ja 5) Kasutajaliideste moodulid. Igas alampeatükis on detailsemalt selgitatud vastava domeeni moodulite omadused ja sisu. Samuti on eraldi alampeatükis selgitatud moodulite vahelised andmevahetus põhimõtted. 4.1. Kontseptuaalne arhitektuur Käesolevas alapeatükis pakume välja loodava süsteemi kontseptuaalse arhitektuuri, esitledes süsteemi komponente ja mooduleid, nende funktsioone ja käitamise asjaolusid. Mikroteenuste arhitektuuri põhimõtted on alljärgnevad: Mikroteenus on ühte või mitut sarnast funktsiooni realiseeriv eraldi seisvalt paigaldatav autonoomne süsteemi komponent; Mikroteenus võib realiseerida ühte funktsiooni või mitut sarnaselt grupeeritud funktsiooni; Mikroteenus on teistest komponentidest otseselt mitte sõltuv iseseisev komponent; Mikroteenus on majutuskohas iseseisvalt skaleeritav ja hallatav komponent; Mikroteenuste arhitektuur võimaldab pakendatud funktsionaalsust sõltumatult, eraldiseisvalt arendada ja testida; Mikroteenusteks võib jagada funktsioone ka administratiivsete või projektorganisatoorsete asjaolude järgi; Mikroteenusel on enda andmebaas või pole seda üldse; Mikroteenus pöördub teise mikroteenuste (andmete) poole läbi programmliidese (API) või keskse andmesiini; Mikroteenuste arhitektuur käsitleb üldjuhul tagarakenduste ja kommunikatsioonirakenduste skoopi, mitte aga kasutajaliideste skoopi. Eelnev nimekiri pole lõplik ega ammendav. Süsteemi kontseptuaalne arhitektuur on kirjeldatud joonisel 4. Joonise paremaks loetavuseks on süsteemi osad tähistatud erinevate värvidega alljärgnevalt a) roheline – uued komponendid, mis tuleb arendada (või taaskasutada mingit tarkvara), b) kollane – süsteemid, mis eksisteerivad, c) oranž – autentimise ja autoriseerimise moodulid, d) sinine – andmebaas või andmehoidlad, e) punane – olemasolevad taakvarad (legacy software), f) roosa – muu väline osapool või tugisüsteem, g) hall – kommunikatsiooni moodulid, mis tuleb luua. Joonisel toodud seostes on päringu teenindaja märgitud joone ja mummuga või kriipsjoone ja noolega, päringu tarbija (võib olla päringu algataja) on märgitud poolkaarega, teenuse pakkuja on märgitud mummuga. Seose peale võib olla märgitud andmevahetuse protokoll. Eraldi äärisega on tähistatud valdkonnad, millistel on täpsemad joonised käesoleva dokumendi alapeatükkides. Noolega on tähistatud andmet sõltuvuse suund või päringute liikumise suund. Joonis 4. Süsteemi kontseptuaalne arhitektuur Rõhutame, et näidatud arhitektuur on kontseptuaalne. Arenduste ja süsteemi loomise käigus võib tekkida vajadusi luua juurde mooduleid, milliseid pole võimalik käesolevas dokumendis ette näha. Küll aga tuleb arvestada, et moodulite arvu suurenemisel suureneb ka halduskeerukus ja süsteemi evitusega senduvad väljakutsed. Mida rohkem on mikroteenuseid seda keerulisem on evitus. 4.2. Tugimoodulid Käesolevas peatükis käitleme detailsemalt tugimooduleid, nende funktsioone ja tehnilisi lahendusi. 4.2.1. Identiteedi ja pääsuhalduse moodulid Kasutajate, rollide, õiguste ja nende omavahelise halduse, pääsu saladuste jne hoidmiseks tuleb luua eraldi moodul Kõik süsteemis kasutusel olevad õigused ja rollid asuvad käesolevas moodulis. Kõik süsteemi tehtavad päringud autoriseeritakse vastu seda moodulit, et kontrollida pääsuõiguse kehtivust. Moodul genereerib, haldab ja väljastab JWT võtmeid15. Käesoleva mooduli tarkvaraliseks lahenduseks tuleks kasutada Keycloak16 tarkvara, mis on üks levinum avatud lähtekoodiga identiteedi ja pääsuhalduse valmistoode. Joonisel 5 on kujutatud täpsemalt identiteedi ja pääsuhalduse korraldus mikroteenuste arhitektuuris. Joonis 5. Kasutajate, õiguste, ligipääsude haldus mikroteenuste arhitektuuris Kasutaja interaktsiooni esimene samm toimub kasutajaliideses, kust suunatakse kasutaja riiklikusse autentimisportaali. Autentimisportaal edastab tuvastatud identiteedi andmed kasutajate halduse, ligipääsu moodulisse, kus seotakse need kasutajaga. Kasutaja puudumisel luuakse kasutaja ja seotakse vaikimisi rollidega isikute mooduli andmete põhjal. Tuvastatud kasutaja Internetisirvikule edastatakse JWT võti17, mis sisaldab informatsiooni kasutaja identiteedi kohta. Edaspidistele päringutele süsteemi suunas paneb sirvik JWT võtme kaasa mistõttu, saab pääsulüüs, või mis tahes mikroteenus kontrollide päringu vastu võtmisel JWT võtme autentsust ja päringu tegija õigust päringut sooritada. Kasutajate halduse moodulisse saab lisada kasutaja juurde andmeid, mille abil on võimalik seostada kasutajat-isikut mingi juriidilise kehaga või mingite andmetega. Kuna JWT võtit saab kaasa anda ka mikroteenustele, siis on võimalik seoste informatsiooni põhjal andmetele ligipääsu kontrollida. 4.2.2. Autentimise moodul Autentimise mooduli ülesanne on korraldada kasutajate autentimist ja vahendada kasutajale sessiooni tunnust koos vajaliku meta-informatsiooniga. Autentimise mooduliks kasutame RIA TARA lahendust, mis on iseseisvalt hallatav valmis tarkvaratoode. Moodul sisaldab tuge mitmesugustele autentimislahendustele ja on integreeritav Keycloak pääsuhalduse tarkvaraga. 4.2.3. Isikute moodul Isikumooduli ülesanne on hallata ja säilitada informatsiooni sh. ajalugu süsteemis eksisteerivate juriidiliste- ja füüsiliste isikute kohta. Isikute moodul suhtleb süsteemi väliste osapooltega, mis sisaldavad isikute infot. Näiteks Äriregister – juriidiliste isikute andmed, Rahvastikuregister – füüsiliste isikute andmed. Andmevahetus nimetatud registritega käib üle X-tee vastava mooduli vahendusel. Isikute moodul on isikuandmete „tõe allikas” süsteemi jaoks. Isikute moodul peaks olema Java keeles arendatud tarkvara või TEHIK TEIS projekti arendatud persons-service18 kloon või võrdväärne. 4.2.4. Administratiivmoodul Administratiivmooduli ülesanne on koondada süsteemi administratiivsed funktsioonid. Nendeks on näiteks: Klassifikaatorite haldus; Äriliste parameetrite haldus; Tõlgete haldus; Abitekstide haldus; Infotekstid; Aadresside, asukohtade haldus (ADS) – käesolevas dokumendis toodud välja ka eraldi moodulina. Äriliste parameetrite halduse ja teenustele pakkumise funktsionaalsuse saaks delegeerida ka tehnilise konfiguratsiooni moodulile. Administratiivmoodul moodul peaks olema Java keeles arendatud tarkvara. Kuna administratiivmooduli käsitletud andmed on üldjuhul üsna staatilised, siis tuleks need võimalikult palju hoida rakenduse või minumälu baasis. Nii on võimalik tagada päringutele kiired vastamised. 4.2.5. Maksete moodul Maksete mooduli ülesanne on koondada maksete teostamise ja riigilõivude kogumise funktsioonid. Nendeks on näiteks: Riigilõivude informatsiooni hankimine; Riigilõivude hinnakirja haldamine; Viitenumbrite genereerimine; Makseplatvormi pakkumine; Liidestumine maksevahendajaga, pangalinkidega; Maksete moodul peaks olema Java keeles arendatud tarkvara. Näidiseks saab võtta näiteks TEHIK TeIS projekti käigus arendatud tarkvaramooduli payments-service19. 4.2.6. Failide moodul Failide mooduli eesmärk on vahendada teistele moodulitele binaarandmeid. Failide salvestamist oleme käsitlenud peatükis 4.2.6. Failide mooduli andmestikus salvestatakse ka failide metainfo. Allkirja moodul peaks olema Java keeles arendatud tarkvara või TEHIK TeIS projekti arendatud signing-service20 kloon. 4.2.7. Tehnilise konfiguratsiooni moodul Tehnilise konfiguratsiooni moodul on vajalik süsteemi teiste moodulite tehnilise rakendusseadete üle programmliidese pakkumiseks. Süsteemis kasutatavad Spring Boot tarkvaraarenduse raamistikul arendatavad rakendused vajavad spetsiifilisel kujul tehnilist konfiguratsiooni. Üks võimalus nende konfigureerimiseks on konfiguratsiooniserver-klient andmevahetus. Mikroteenuse rakenduse käivitamisel küsib see tehnilise konfiguratsiooni moodulilt endale seaded. Tehniliselt tuleb kasutada Java keeles arendatud Spring Cloud Config22 ja Spring Cloud Config Client23 tarkvaraarenduspaketti, mille andmehoidlaks on näiteks GIT (Gitlab repositoorium piiratud ligipääsuga). Lisaks GIT-ile on toetatud ka mitmed teised andmehoidlad. Mikroteenused, millised vajavad tehnilist seadistamist kasutavad Spring Cloud Config Client teeki ja on seadistatud laadima sisse endale seaded konfiguratsioonimoodulist vastavalt spetsifikatsioonis määratud profiilile. Joonisel 6 on sealhulgas kujutatud tehnilise konfiguratsiooni mooduli asukoht ja suhtlus osapooltega. Joonis 6. Tehnilise konfiguratsiooni haldus Tehnilise konfiguratsiooni mooduli võib ka ära jätta, kui on täielikult rakendatud käesolevas dokumendis peatükis 9.2 kirjeldatud GitOps põhimõtted ja kasutusel süsteemi majutuse halduse operaator tarkvara Argo CD või samaväärne. Sellisel juhul on tehniline konfiguratsioon siiski hallatud GIT-is, kui see antakse rakendusele ette läbi Kubernetes platvormi võimaluste. Pole vaja jagada tehnilisi seadistusi rakendustele üle REST teenuse. 4.2.8. Allkirja moodul Allkirja mooduli ülesanne on signeerida andmeid ja kontrollida signatuuride korrektsust. Allkirja moodul suhtleb väliste osapoolte ja süsteemidega, mis osalevad signeerimises või signatuuri kontrollimises. Näiteks vajadusel SiVa ja SiGa teenus, riistvara turvamoodul (HSM), ajatempliteenus jne. Kasutades PKC11 protokolli saab moodul suhelda ka riistsvaralise turvamooduliga HSM (Harware Secure Module). Allkirja moodul peaks olema Java keeles arendatud tarkvara või TEHIK TeIS projekti arendatud signing-service24 kloon. 4.2.9. Teavitus- ja kommunikatsioonimoodul Teavituste moodul koondab endas funktsioone, millised on seotud kommunikatsiooniga inimeste ja institutsioonide vahel viisil, mis infovahetus pole masintöödeldavas formaadis. Tekstimallide haldus; PDF faili mallide haldus; Lõpptekstide loomine mallidest ja muutujate väärtustest; PDF failide loomine; E-kirjade loomine ja välja saatmine; SMS-ide välja saatmine; Osapooltega vahetatud kiirsõnumite haldus. Loetelu pole lõplik. Konkreetne funktsioonide nimekiri kinnitatakse detailanalüüsiga. Teavitus- ja kommunikatsioonimoodul moodul peab olema Java keeles arendatud tarkvara, mille puhul võib aluseks võtta näiteks TEHIK TeIS projekti arendatud messages-service25 kloon. 4.2.10. Ärilogi moodul Mitmel juhul on vaja, et ärilistest tegevustest jääks maha tegevuste logi, mille tähtsaim eesmärk on, et oleks hiljem võimalik üheselt aru saada mis toimus, mis andmeid vaadata või mis andmeid muudeti. Põhimõtteliselt on võimalik ärilogi või ka auditlogi hallata kahel viisil 1) Logikanded salvestatakse andmebaasi, 2) sarnaselt nagu tehniline logi, kuid eraldiseisva andmekomplektiga. Tehnilise logi käitlemine on kirjeldatud peatükis 5.2.4. Äri- ja auditlogi tuleks tehnilisest logist logi pinus (logstack) füüsiliselt eraldada, et neid oleks võimalik eraldiseisvalt töödelda ja erineva tähtajaga säilitada. Logide salvestamisel andmebaasi tuleks jälgida, et logide andmebaasi tabelid oleks mõistlikult partitsioneeritud ja oleks võimalik kiired päringud ja tabelid ei läheks ebamõistlikult suureks. Temaatilised logid võib jagada äriliste protsesside mikroteenuste andmebaasidesse. Kuna tegevuste logi võib tekkida väga palju, siis tuleks eelistada teist varianti. Logide vaatamiseks on võimalik kasutada logipingu koosseisu kuulutav kasutajaliidesega tööriista või arendada kasutajaliides, mille tagarakendus on integreeritud logipinuga läbi programmliidese. Kuna auditlogide haldamiseks eraldi mikroteenust pole mõistlik teha, siis tuleks unifitseerida ja standardiseerida sääraste logide implementatsioon ja käsitleda seda eraldi tarkvarateegina. Auditlogi andmekomplekt peaks olema unifitseeritud ja sisaldama vajalikke andmevälju. Auditlogi kirjeid peaks olema võimalik seostada infosüsteemi dokumentatsiooniga, et auditi läbiviijatel teadmata täpselt äriloogikat oleks võimalik logikanne siduda äriprotsessi sammuga. 4.2.11. Avaandmete lüüs Avaandmete lüüs on moodul, mille ülesanne on serveerida Interneti avaandmeid. Joonisel 7 on kujutatud avaandmete halduse tehniline lahendus. Joonis 7 Avaandmete haldamine ja publitseerimine Avaandmete lüüs peaks olema mikroteenus, mille ülesanne on süsteemi avaandmeid hallata. Avaandmete loomise eest vastutab valdkondlik mikroteenus (äriprotsessi mikroteenus vms.) Unifitseeritud ja sarnane funktsionaalsus tuleks koondada ühte tarkvarateeki ja seda kasutada avaandmete loomiseks valdkondlike andmete baasilt. Süsteemi äriprotsesside mikroteenused loovad oma valdkonna avaandmeid (vastavalt juhendile26) ja edastavad neid avaandmete lüüsile kasutades asünkroonset andmevahetusplatvormi. Avaandmete lüüs vastutab andmete säilitamise ja edasise esitamise eest. Avaandmeid saaks hoida staatilisel, ilmutatud kujul, kas plokkandmehoidlas või andmebaasis JSON vormingus. Esimesel juhul tuleb lisaks andmetele andmebloki salvestamisel säilitada andmebaasis bloki metaandmed. Andmebaasis andmete hoidmine võib olla siiski paindlikum ja anda tulevikus võimalusi näiteks otsinguid teostada avaandmete baasilt. Lõpliku ligipääsu avaandmetele päringute pinustamise ja piiramise eest vastutab juba programmliideste pääsulüüs. Käesoleval viisil avaandmete säilitamine ja avaldamine võimaldab teostada enne andmete säilitamist isikuandmete anonümiseerimist ja võimaldab eraldiseisvalt operatiivandmebaasist neid andmeid väljastada. Andmebaasis andmete hoidmine kasutades dokument orienteeritud andmesalvestustehnoloogiat võimaldab ka üle andmete otsinguid teostada. 4.2.12. Kaardimoodul Kaardimoodul on mikroteenus mille eesmärk on tegeleda georuumiliste (geospatial) andmetega. Kaardimoodul on olemasolev tarkvara TTA SKI, millel on oma andmebaasid loogikakiht ja kasutajaliides. Antud süsteem tuleb integreerida piisavas mahus käesolevas dokumendis kirjeldatud mikroteenuste arhitektuurida kasutades samu põhimõtteid. Lõppkasutaja kasutajaliies saab uuendada ja taasluua kasutades loodava süsteemi disainimustrit ja arendamise põhimõtteid. 4.3. Andmevahetusmoodulid Käesolevas peatükis tutvustame kommunikatsiooni ja andmevahetusmooduleid ja põhimõtteid, samuti pakume välja komplekti andmeahetusega seotud mooduleid ja nende kirjelduse. Mikroteenuste arhitektuuri mustri arenedes on kogunud populaarsust REST (Representational State Transfer) andmevahetus põhimõte, mis baseerub HTTP protokollil. Mikroteenuste laiemal levikul sai sellest andmevahetuspõhimõttest standardmuster. Mikroteenuste arendus ja uute tehnoloogiate tekkimisega koos on loodud uusi protokolle ja andmevahetuse mustreid, mis koguvad üha populaarsust näiteks AMQP protokoll (Advanced Message Queuing Protocol), STOMP (Simple Text Orientated Messaging Protocol), GraphQL, Websocket. 4.3.1. Süsteemi komponentide andmevahetuse põhimõtted Käesolevas peatükis sõnastame olulisemad süsteemi komponentide vahelised põhimõtted järgnevalt: Süsteemi komponendid peaks eelistama omavaheliseks suhtluseks asünkroonseid protokolle sünkroonsete protokollide ees, näiteks tuleks kasutada AMQP protokolli; Süsteemi komponentide vahelises asünkroonses andmevahetuses tuleb luua standardiseeritud sõnumi formaat, mis sisaldab infot sõnumi osapoolte kohta, seansi metainfot ja vahetatav informatsiooni; Vahetatav info peaks olema JSON vormingus; Kui süsteemi komponendid kasutavad suhtlemiseks REST andmevahetust, siis toimub suhtlus läbi programmliidese pääsulüüsi; Süsteemi kasutajaliidesed peaks tagarakendustega suhtlema keerukamate andmevajaduste puhul eelistatult GraphQL seejärel REST andmevahetuse mustri abil, lihtsamate andmevajduste puhul piisab REST protokollist; Süsteemi kasutajaliidese ja tagarakenduste asünkroonseks suhtluseks sobiks kõige paremini STOMP või Websocket tehnoloogiad; REST teenused peaks olema lihttüüpidega (äriloogiliste olemitena), kusjuures tuleks rangelt välitda komineeritud lihttüüpide kohta pöörduspunktide tegemist, mis muudab programmliidese keerukaks ja raskesti hoomatavaks. 4.3.2. Süsteemi väliste osadepoolte andmevahetuse põhimõtted Käesolevas peatükis sõnastame olulisemad süsteemi komponentide ja väliste süsteemide vahelise andmevahetuse põhimõtted järgnevalt: Riiklikud süsteemid suhtlevad omavahel kasutades X-tee taristut; Käesoleval ajal on eelistatud kasutada X-tee taristul asünkroonset REST andmevahetust, kus vahetatakse andmeid JSON formaadis; Kõik seni SAOP protokollile arendatud X-tee teenused mida organisatsioon pakub viiakse arendusprotsessi kõigus üle REST lahendusele, selle kohta tuleb teisi osapooli teavitada piisavalt varakult, et need saad muudatusega adapteeruda; Süsteemi elukaare jooksul ei looda enam uusi SOAP teenuseid; SOAP teenuseid teenindatakse nende üleminekuni kasutades olemasolevaid tarkvarasid; Loodaval süsteemil on põhimõtteliselt valmisolek võtta kasutusele ka asünkroone X-tee andmevahetuspraktika, kuid selle arendamine ja välja töötamine X-tee platvormil alles käib. Süsteemi osapoolte, kes ei kasuta X-tee päringuid ja süsteemi vahel on võimalik kokku leppida ja avada ka programmliideseid, mingis konkreetses äriprotsessis osalemiseks. 4.3.3. Programmliideste pääsulüüs Kogu süsteemi üks keskne kommunikatsiooni moodul on programmliidese pääsulüüs (Application Gateway), mille põhiliseks ülesandeks on vahendada andmevahetuspäringuid süsteemi komponentide vahel (v.a. asünkroonsed AMQP päringud). Detailsemad ülesanded ja võimalused on loetletud järgnevalt: Päringute vahendamine õigele ressursile (mikroteenusele); Päringute autoriseerimine – õiguse tuvastamine teha päringut; Päringute transformeerimine – andmete manipuleerimine päringus/vastuses vastavalt vajaduele; Päringute paigutamine pinusse – kiiremaks vastamiseks (caching); Protokolli transformeerimine – nt REST-GraphQL; Päringute filtreerimine; Päringute monitoorimine; Nimekiri pole lõplik. Programmliidese pääsulüüsi oluline funktsionaalsus on päringute autoriseerimine ja see funktsionaalsus peaks olema just programmliidese pääsulüüsis, mitte igas mikroteenuses eraldi. Mikroteenuses peaks olema päringute autoriseerimine ainult erandkorras. Programmliidese pääsulüüsiks tuleks kasutada vabavaralist valmistarkvara KrakenD27. Kõnealusel tarkvaral on tugi mitmesuguste teiste kommunikatsiooni lahendustega koos töötamiseks sh. tugi autoriseerida päringuid vastu identiteedi ja pääsuhalduse moodulit Keycloak. Kõik kommutaatori (router) funktsioonid konfigureeritakse seadete failidega ja neid saab hoida ja versioneerida GIT repositooriumis. Rakendusele on võimalik kirjutada vajadusel laiendusi vastavalt organisatsiooni vajadustele, mis muudab tarkvara paindlikumaks. Alternatiivina nimetatud valmistarkvarale on võimalik pääsulüüs ka arendada kasutades Java Spring Boot aredusraamistikku. Näitena võib kasutada TEHIK TeIS projektis arendatud tarkvara common-api-gateway28. 4.3.4. X-tee moodul X-tee mooduli ülesandeks on vahendad X-tee päringuid sisemiste komponentide ja välimiste süsteemide vahel. X-tee poolt vaadatuna on moodul, kui X- tee adapter, süsteemi seest vaadatuna on tegemist X-tee suhtlemist abstraheeriva pääsulüüsiga. X-tee moodul sisaldab äriloogikat, mis on vajalik konkreetsete päringute teenindamiseks või informatsiooni kogumiseks. Näiteks eksisteerib hetkel selliseid x-tee teenuseid, kus andmete saamiseks on vaja kasutada kahte erinevat päringut. Ühte selleks, et andmete saamist algatada, teist selleks, et andmed alla laadida. Teisalt on selliseid päringuid, kus päringu esmakordsel tegemisel tagastatakse mingi identifikaator ja algatatakse info saamine ja sama päringu kordamisel koos identifikaatoriga on võimalik andmete tekkimisel andmed kätte saada. Sellisel juhul tuleb päringute korduv tegemine ja andmete ootamine realiseerida x-tee mooduli äriloogika protsessina. Antud tegevust on teoreetiliselt võimalik realiseerida ka protsessimootori kaasamisega, kuna antud tegevuste jada on küllaltki lihtne tegevuste algoritm. Selline lähenemine looks aga lisakeerukust moodulisse endasse. X-tee moodul peaks olema Java keeles arendatud tarkvara või TEHIK TeIS projekti arendatud xroad-gateway29 kloon. 4.3.5. Asünkroonsete sõnumite vahetuskiht Asünkroonseks andmevahetuseks tuleb eelistada AMQP andmevahetusprotokolli, mille vahendamiseks tuleb süsteemi paigaldada RabbitMQ klaster. Klastri saab paigaldada Kubernetes platvormile. Pakume välja ka asünkroonse andmevahetuse implementatsiooni, mis on kujutatud joonisel 8. Joonis 8. Asünkroonse sõnumivahetuse arhitektuur Spring Boot raamistiku näitel Süsteemis on keskne RabbitMQ vahendaja (broker). Temasse luuakse andmevahetuskanal (exchange) kuhu iga liitunud osapoole kohta luuakse sõnumijärjekord (que). Süsteemi üleselt lepitakse kokku standardses andmevahetussõnumis, mis sisustatakse andmetega ja edastatakse andmevahetuskanalisse. Andmevahetussõnumisse pannakse kaasa ka saatja ja adressaadid. Moodulid mis on liitunud andmevahetuskanaliga võtavad sõnumi vastu, kui nad on adressaadid. Süsteemi siseselt toimub siis juba info edastamine õigele teenuse implementatsioonile. Java Spring Boot raamistikus on võimalik rakenduse sees saata sündmuseid (event) ja teenusklassid saavad vastavalt sündmuse tüübile (näiteks adressaadi poolt välja kutsutud operatsioon) andmed vastu võtta. Kogu sõnumite saatmise ja vastuvõtmise tarkvaraline implementatsioon peaks asuma keskses teegis, mida saab sõltuvusena tarkvaraprojektidesse lisades ja koheselt kasutusele võtta. 4.4. Andmemoodulid Käesolevas alapeatükis käsitleme süsteemi komponente, mida saab klassifitseerida andmete põhiselt või on seotud andmete hoidmisega ja teistele mikroteenustele kättesaadavaks tegemisega. 4.4.1. Andmebaasimootor Süsteemi põhiliseks andmebaasi mootoriks on PostgreSQL. Andmebaasi mootori evitus on kirjeldatud täpsemalt peatükis 5. 4.4.2. Põhiandmete pääsulüüs Antud dokumendis toodud arhitektuur, ei sätesta lõpplikku mikroteenuste arvu seetõttu, et ei ole kuidagi reguleeritud mikroteenuste skoop, mis sisaldavad äriprotsesse. Kui sõnastada mikroteenus, kui eraldiseisev paigaldatav üksus, siis võib igat mikroteenust eksisteerida ka n-1 paigaldatud instantsi (skaleeritud rohkem kui üks instants). Äriprotsesse võib grupeerida mikroteenusteks liigi, või muude tunnuste järgi. Mikroteenuste arhitektuuri üks põhimõte on, et igal mikroteenusel on oma andmebaas või pole seda üldse. Teised mikroteenused pöörduvad mikroteenuse andmetele ainult läbi mikroteenuse programmliidese. Kuna aga erinevad äriprotsessid vajavad ja toodavad põhiandmeid sõltumatult, tekib probleem kuidas andmeid hoida selliselt, et andmed ei oleks laiali üle äriprotsessi mikroteenuste andmebaaside ja andmete ligipääs oleks lihtne. Selleks on mõistlik luua eraldi mikroteenus, mis tegeleb põhiandmete hoidmise ja käsitlemisega. See mikroteenus ei sisalda äriloogikat ja vahendab ainult andmete salvestamist andmebaasimootorisse ja erinevaid otsinguid andmetest. Selline lahendus sobib eelkõige põhiandmetele, mis ei ole transaktsiooniliste omadustega või raamatupidamislikud. Eelkõige sobib selline lähenemine staatiliste andmete sh. dokument tüüpi andmekomplektide vahendamiseks ja hoiustamiseks. Näitena tooks olukorra, kus on andmekomplekt „tegevusteade”. See on põhiandmete komplekt, milline on eraldiseisvalt põhiandmete komplekt, mis sisaldab olulist informatsiooni kogu äriprotsessi jaoks. Sarnase olemusega eksisteerib aga mitmeid andmekomplekte, mis samas on aga natukene erinevad. On olemas mikroteenused „kasutajaliides”, „menetlus-protsess”, „teavitus” ja „andmete lüüs”. Menetlus-protsess koostab kasutajaliidese päringu peale uue „tegevusteade” andmekomplekti, eel-täidab teatud andmeväljad ja edastab kasutajaliidesesse. Kasutajaliides täiendab andmekomplekti ja saadab tagasi menetlus-protsess mikroteenusele. Menetlus-protsess mikroteenus teab, mis tegevusi edasi peab tegema, kuid üks samm on, et tuleb salvestada tegevusteate andmed. Selleks saadab „tegevusteade” andmekomplekti andmete pääsulüüsi, mis paneb andmed andmebaasi. Lisaks pöördub menetlus-protsess ka veel „teavitus”, poole, et välja saata info uuest tegevusteatest. Sellega on protsess lõppenud. Protsess võib olla lõppenud, kuid kasutajaliides soovib uuesti saada kätte „tegevusteade” andmeid, selleks pöördub kasutajaliides otse andmete lüüsi poole ja saab sealt õige info kätte. 4.4.3. Pinumälu (cache) Pinumälu eesmärk on ajutiselt salvestada andmeid kiireks pöördumiseks ja jagamiseks. Pinumälu peamiseks omaduseks on, see et andmeid hoitakse mälus mitte kettamassiividel, ning andmete saamine pinust toimub võrreldes andmete saamisega andmebaasist kiiresti. Pinumälu omaduseks on ka asjaolu, et selle poole saab pöörduda mitmesuguseid kliente kes kõik vajavad sama andmestikku. Pinumäluks tuleb kasutada Redis30 pinumälu süsteemi. 4.4.4. Andmete indekseerimine Andmeid on vaja indekseerida eelkõige selleks, et kiirendada nendest osa leidmist. Praktikas näiteks täisteks otsingud, sõnaosa otsingud, täppisotsingud. Andmete indekseerimine ja indeksilt tehtavad otsingute funktsionaalsused eksisteerivad juba olemasolevas süsteemis ja see tuleb üle viia uude platvormi. Kuna olemasolevas lahenduses on kasutusel Elasticsearch31 tarkvara, tuleb seda jätkuvalt kasutada ka uuel arhitektuuril. Indeksandmete hoidlaks tuleb kasutada Elasticsearch tarkvara. Elasticsearch pakub andmete sisestamiseks ja pärimiseks REST teenust ja erinevates programmeerimise raamistikes on üldjuhul Elasticsearchi tugi valmis kujul olemas. Nagu näiteks Java Spring Boot raamistiku puhul. Sarnaselt Relatsioonilisele andmebaasile tuleks indeksandmebaas evitada virtuaalmasinale, mitte Kubernetes klastris. 4.4.5. Pseudonüümimise moodul Pseudonüümimise moodul on mikroteenus, mille ülesanne on korraldada süsteemis andmete anonümiseerimist ja pseudonümiseerimist. Esineb olukord, kus andmed pärast andesubjekti surma või ärilise aktuaalsuse kadu tuleb pseudonümiseerida. See tähendab, et andmesubjekti isikuandmed asendatakse initsiaalidega või pseudo-informatsiooniga. Käesolevas moodulis hoitakse pseudonümiseerimise ärireeglid ja moodul etteantud ajal käivitamisel läheb ise ette antud andmebaasi ja käivitab seal pseudonümiseerimise algoritmi, mille tagajärjel andmed anonümiseeritakse või pseudonümiseeritakse. Moodul peaks olema Java keeles arendatud tarkvara. Tarkvara käivitatakse koordindeeritult vastavalt vajadusele ja see ei pea töötama kogu aeg. 4.4.6. Andmete sünkronisaator moodul Olukorras, kus eksisteerib lisaks uuel platvormil arendatud süsteemile ka vana ja teatud funktsionaalsus on arendatud uuel, samas osa vanal peab andmeid süsteemide vahel sünkroniseerima. Sellisel juhul tuleks arendada sünkroniseerimise moodul, mis võtab andmeid uuest andmebaasist (uuel andmemudelil), teisendab andmed ja sisestab need vaba andmebaasi (vanal andmemudelil). Sünkroniseerimise sammuks võib olla ka andmete transformatsioon. Näiteks viiakse andmed üle JSON vormingust EVA mudelile ja vastupidi. Andmete sünkronisaator moodul peaks olema Java keeles arendatud tarkvara. 4.5. Äriprotsessi moodulid Käesolevas peatükis kirjeldame täpsemalt võimalikke äriprotsessi mooduleid, protsessimootorite kasutamise põhimõtteid ja äriprotsesside programmeerimist juhul, kui neid ei implementeerita protsessimootori abil. 4.5.1. Protsessimootori kasutamise põhimõtted Protsessimootori kasutamise olulisemad põhimõtted on alljärgnevad: Protsessimootorit käitav mikroteenus peab sobituma käesolevas dokumendis kirjeldatud mikroteenuste arhitektuuriga; Protsessimootorit käitav rakendus oleks ühtlasi ise mikroteenus; Protsessimootorit võib rakendada mitmes rakenduses; Protsessimootori poolt käitavat protsessi peab olema võimalik laadida andmebaasi ja rakendus peab saama seda andmebaasist laadida; Äriprotsessi modelleerimiseks peaks olema võimalik kasutada ette antud funktsioone, mis on arendatud töötama koostöös protsessimootoriga; Joonisel 9 on kujutatud, mil viisil võiks protsessimootorit käesolevas dokumendis kirjeldatud mikroteenuste arhitektuuril arendatud mooduli kasutada. Joonis 9 Protsessimootori mikroteenuse moodulis kasutamise põhimõtteskeem Üks levinud protsessimootori lahendus on Camunda32, mida saaks integreerida käesolevas dokumendis kirjeldatud mikroteenuste arhitektuuril arendatud äriprotsessi moodulitega või keskse protsessimootori mooduliga. Camunda kasutamine sellisel juhul oleks manustatud (embedded) lahendusena. 4.5.2. Võimalikud eraldiseisvad ärimoodulid Järgnevalt loetleme võimalikud äriprotsessi moodulid, mis tulenevad olemasolevate süsteemide äriprotsessidest ja andmestikust. Need on alljärgnevad: Aadresside haldus - moodul mis võimaldab pidada arvestust aadresside üle ja liidestuda Maameti ADS süsteemiga. Antud moodulit võiks ka kaaluda liita administratiivse vms mooduliga; Dokumentide haldus (DHS) - klassikalise dokumendihalduse moodul; Haridus ja tunnistused - moodul, kus hallatakse äriprotsessides registrites töödeldava haridusega seotud andmeid; Koolitusload - moodul, kus hallatakse koolituslubade andmeid ja vastavaid äriprotsesse; Keelud - Äriliste keeldudega seotud äriprotsesside ja andmete halduse moodulid; Statistika - Moodul mis võimaldab koguda ja andmelattu edastada statistilisi andmeid, põhifookus statitsilistel mudelitel peaks asuma andmeaidas; Kasutajate tagasiside - moodul kus hallatakse avalike kasutajate tagasiside andmeid; Taotlused - moodul mis töötleb erinevaid taotluseid ja vastutab andmete säilitamise eest; Teated - moodul mis töötleb erinevaid tegevusteadeid ja vastutab andmete säilitamise eest; Load - moodul mis töötleb erinevaid lubasid ja vastutab andmete säilitamise eest; Tegevuskohad - moodul mis töötleb erinevaid tegevusteadeid ja vastutab andmete säilitamise eest; Äriprotsessi logi - moodul kuhu koondatakse äriprotsessi logi; Numbriliikuvus - numbriliikuvuse moodul; Numbrilubade haldus - numbrilubade halduse moodul; Tarbijavaidluste haldus - tarbijavaidluse andmete ja protsesside haldamsie moodul; Raadiosagedused ja side - raadiosageduste ja side alaste protsesside moodul; Energiaaudit - erergiaauditite protsesside ja andmte haldamise moodul; Ettekirjutused ja järelevalve - ettekirjutuste ja järelevalve protsesside ja andmete moodul; Kemikaalid - kemikaalidega seotud äriprotsesside ; Sündmused - sündmuste keskse halduse ja äriprotsesside moodul; Aruandlus - Aruandluse andmete ja äriprotsesside haldamise moodul; Väärteomenetlus väärteamenetluste läbiviimise ja selelga soetud andmete moodul; Nimekiri pole lõplik ega ammendav. Lähtuvalt olemasolevate süsteemide andmemudelitele, on võimalik ja tuleks tungivalt kaaluda sarnaste äriprotsesside andmete ja funktsionaalsuste konsolideerimist nii äriarhitektuuris, kui andmearhitektuuris. 4.6. Kasutajaliidese moodulid Käeolevas peatükis käsitleme kasutajaliidestega seonduvat. Käsitleme kasutajaliideste temaatikat mikroteenuste arhitektuuris, mikrokasutajaliideste mõistet, ksutajaliideste disainimustreid ja vahendeid, majutusarhitektuur ja andmevahetust tagarakendustega. 4.6.1. Mikrokasutajaliidesed Mikrokasutajaliidesed (Micro front ends) on tihti segadus tekitav termin, mis meie hinnangul on ka tegelikult üsna laiali valguv määratlus. Mikroteenuste arhitektuuris on rõhk sõnal teenus, siis selle mõte on olnud alati jagada monoliitset infosüsteemi funktsionaalseteks osadeks (mikroteenusteks), mingite tunnuste, funktsioonide kaupa või organisatoorsete aspektide tõttu. Selle resultaat on, et tekib tagarakendus oma isikliku andmeaasiga. Seda võib IT maailmas nimetada nähtuste eraldamiseks (separation of concerns). Kuid kas sama praktikat peaks ja saaks rakendada ka kasutajaliidestes? Mitte alati, vähemalt mitte samal viisil. Joonisel 10 on kujutatud mikrokasutajaliideste jaotus mingiks kujutletavaks nähtuseks. Siin on tegelikult jaotus enamjaolt tehtud mingite äriliste tööliinide kaupa, mitte mikro-funktsionaalsuste või olemite kaupa. Lihtsalt selline lähenemine, et on igal mikroteenuse tagarakendusel on ka oma mikroteenusest kasutajaliides ei toimi. Üldjuhul on vaja kasutajaliideses näidata andmeid ja töödelda neid kombinatsioonis mitme mikroteenuse andmestikuga. nt Isik ja tema Konto vms. Joonis 10. Nähtuste eraldamine mikrokasutajaliideses.33 Oluline on aga silmas pidada, et kasutajaliideses ei pruugi toimida nähtusteks eraldamine samadel alustel, kui tagarakendustes ja andmebaasides. Kasutajaliideses tuleb tagada lõppkasutajale mugav ja arusaadav lahendus, mis aga tähendab, et mingite objektide või funktsioonide kaupa ei puurgi saada rakendust jagada. Seega liigub kasutajaliideste arendus üldse mikroteenustest eraldi ja kasutajaliidese arendamisel ei pruugi mikroteenuste olemasolu või jaotus üldse oluline olla, sest kontaktpunkt on üldse programmliides. Selles punktis on võimalik andmeid mitmetest mikroteenustest agregeerida, et vähendada liiklust kasutajaliidese ja mikroteenuste vahel. Üks levinud arusaam, mis mikrokasutajaliidestega on kaasneb on, et mikrokasutajaliides on eraldi paigaldatav. Kuid pigem on oluline omadus efektiivne arendusvõimekus (organisatoorne). Omadus, et igat mikrokasutajaliidest võib arendada eraldi meeskond. Praktikas on mikrokasutajaliides lõpptarbija jaoks eraldiseisev JavaScript koodifail. Iga mikrokasutajaliides on pakitud eraldiseisvasse füüsilisse JavaScript faili ja seda käivitatakse ainult vastava funktsionaalsuse käivitamiseks. See ei pea muidugi tähendama, et antud mikrokasutajaliides JavaScript fail, koos muude lisadega on pakitud eraldiseisvasse paigaldatavasse konteinerisse. Mikrokasutajaliideste jaotusel peab pigem arvestama asjaolusid, et erinevad meeskonnad saaks efektiivselt tegutseda ja oma äriprodukte arendada segamata üksteist ja omamata jäiku seoseid. Praktikas tähendab see, et on kasutusel mitmed Git repositooriumid ja ühiskasutatavad üldkomponendid on pakitud kasutajaliidese teekidesse ja kasutatud läbi sõltuvuste lahendamise tehnoloogia NPM (Node Package Manager). Vertikaalselt meeskondadeks ja tööliinide gruppideks jaotamise näide on toodud joonisel 11. Joonis 11 Mikrokasutajaliidete vertikaalne jagunemine34 Kasutajaliideste arendamisel tuleks järgida organisatsioonis paika pandud disaini ja kasutajamugavuse mustreid, taaskasutada ja hallata ühtseid lihtsamaid komponente. Igal komponendil peab olema vastutaja (code owner). Evituse vaatest ei pruugi mikrokasutajaliides tähendada eraldi seisvat paigaldatavat ühikut - Docker konteinerit. Liigse halduskeerukuse vältimiseks võiks mikrokasutajaliidesed siiski paketeerida üheks, kuni kaheks paigaldatavaks komponendiks. Paketeerimise aluseks võib olla ka asjaolu, et teatud funktsionaalsus on kasutatav ainult organisatsiooni sisevõrgus ja sellele ressursile ligipääs tuleb piirata võrgu tasemel. Joonisel 12 pakume välja mikrokasutajaliideste põhiprintsiibid, kus oleme toonud ühele pildile nii, mikrokasutajaliideste jaotuse lähtekoodi hoidlas, kui ka kasutajaliideste evituse Docker konteinerina. Joonis 12 Mikrokasutajaliideste põhimõtteline jaotus arenduses ja evitus majutusplatvormil. Põhimõtted on järgnevad: Üldkasutatavad komponendid arendatakse ühes (monorepo) või mitmes repositooriumis ja paketeeritakse NPM pakiks. Pakki hoitakse artifaktooriumis; Üldkasutatavatel komponentidel on üks konkreetne koodiomanik (code owner). Muudatustesse võivad panustada kõik osapooled; Erinevates Git repositooriumites hoitakse erinevate lõpp-kasutajaliideste koodi; Koodi ehitamisel lõpptarkvaraks (staatiliseks koodiks) kaasatakse üldkasutatavad komponendid NPM artifaktooriumist sõltuvusena; Teistest moodulitest dünaamiliselt või staatiliselt koodi või funktsionaalsust ei kasutata; Lõplik staatiline kood paketeeritakse kokkusurutud pakendisse ja hoitakse artifaktooriumis; Paigaldatav konteineri pilt (Docker image) koostamisel laetakse sinna sisse artifaktooriumist mikrokasutajaliideste koodipakid, pakitakse lahti ja serveeritakse veebiserveriga; Kuna antud lähenemisel iga erineva mikrokasutajaliidese Interneti sirvikusse laadimisel uuendatakse kogu sisu, siis võimalik sessiooni info või muu oluline meta-info mida on vaja teenusest teenusesse üle anda salvestatakse sirvikus kasutades Redux35 hoidla võimalusi. Oluline on silmas pidada, et antud lähenemise tulemusena ei teki väga palju kasutajaliidese konteinereid, mis hõlbustab administreerimist. Arvestades seda, et kirjeldatud visiil pakitud kasutaliideste tarnimine ja uuendamine on lihtne ja ajaliselt lühike tegevus, siis pole mõistlik jagada mikrokasutajaliideseid eraldi konteineriteks. Suure hulga konteinerite tekkimine raskendaks üldist evitust ja selle administreerimist. 4.6.2. Kasutajaliidese disainimustrid ja -vahendid Süsteemi kasutajaliideste disainimustriks tuleks kasutada Veera disainisüsteemi36. See on üks kolmest riiklikust disainisüsteemist, mille eesmärk on pakkuda kasutajale ühtest kasutajakogemust unifitseeritud stiiliraamistikus. Veerast on mitu versiooni ja paralleelseid koopiaid, nii Angular kui ja React JavaScript raamistikele. 4.6.3. Andmevahetus tagarakendustega Andmevahetuseks tagarakendustega on kasutajaliidestel mitmeid võimalusi näiteks REST, Websocket ja GraphQL. Need kolm tehnoloogiat pole ükskõik sarnane, kuid võivad kombinatsioonis tõsta teenuse kvaliteeti ja süsteemi töökindlust. REST teenus on enamlevinud ja väga populaarne lahendus. REST puhul tuleks igat olemit käsitleda ühe pääsupunkti grupina (vaatamine, muutmine, lisamine, kustutamine) mistõttu võib pöörduspunktide arv kasvada väga suureks ja seetõttu ka programmliideste spetsifikatsioon muutuda keeruliseks ja hoomamatuks. Kui ühe korraga on vaja küsida tagarakendustest (ühest) või mitmest korraga andmeid üheaegselt, siis REST puhul tähendab see mitme päringu paralleelset või järjestikulist käivitamist. GraphQL on tehnoloogiana kiire, võimaldab unifitseeritud viisil teha andmemuudatusi ja päringuid, süsteemide suunas, kusjuures pole oluline milline on täpne tagarakenduste topoloogia. GraphQL tehnoloogia kasutamine võib lihtsustada programmliidest, kuid selle tehnoloogia enda kasutamine on mõnevõrra keerulisem kui REST puhul. Selle õppimine ja oskusteabe omandamine nõuab arendajatelt rohkem pingutusi kui REST puhul, kuid see pingutus toob kasu teistes kohades. Websocket tehnoloogia kasutamist tuleb kaaluda kohas, kus kasutajaliidesele on vaja edastada infot tagarakenduse algatusel. Näiteks on selle tehnoloogia rakendusvaldkond reaalaja vestlusaknad. 4.7. Olemasolevad tarkvarad JvIS – Järelevalve Infosüsteem. PHP Symfoni raamistikul arendatud monoliitne, PostgreSQL andmebaasiga. MTR – Majandustegevuste Registri infosüsteem. PHP Symfoni raamistikul arendatud monoliitne, PostgreSQL andmebaasiga. NBA/SASS – Numbribroneerimise ja numbrilubade halduse infosüsteem. SKI (AlphaGIS) – Kaardirakendus, mida arendatakse ja täiendatakse eraldiseisva projektiga. Andmeait - TTJA suurandmete andmeait, mida arendatakse ja täiendatakse eraldiseisva projektiga. Kõesolevas dokumendis toodud mikroteenuste arhitektuuri praktilisel rakendamisel tuleks täiandada ja edasi arendada ka olemasolevaid süsteeme. Neile tuleks luua kesoelvas dokumendis nimetatud kommunikatsioonipaltvormide toed REST teenused ja AMQP suhtluse võimekus. 5. Majutusarhitektuur Käesolevas peatükis kirjeldame süsteemi majutamist ja majutamisega seotud küsimusi, kontseptuaalset, evitust, majutusplatvormi ja -tööriistu. 5.1. Kontseptuaalne evitus Kontseptuaalset evitust kirjeldab evitusdiagramm joonisel 13. Potentsiaalselt evitatakse süsteem virtuaalmasinatel ja Kubernetes klastris. Virtuaalmasinatel evitatakse andmebaasimootor PostgreSQL. Mikroteenused ja toetavad komponendid majutatakse Kubernetes klastris. Erinevad põhimõttelised komponendid või halduspartnerite vastutusalad eraldatakse Kubernetes nimeruumidega (Namespace). Rakendustele luuakse paigaldusüksused (Deploym ent), võrguteenused (services), konfiguratsioonid (Configurations). Käivitatud konteinerid (Pod) töötab Kubernetes õla (Node) serveri protsessina. Joonis 13. Kontseptuaalne evitusdiagramm. Evituses on kujutatud ka logimine ja monitooring, millest täpsemalt on kirjutatud peatükkides. 5.2.3. ja 5.2.4. 5.2. Majutustööriistad Käesolevas peatükis kirjeldame detailsemalt süsteemi majutamiseks olulisi tööriistu ja tarkvarasid. Kirjeldame pilveplatvormi Kubernetes, Pideva paiggaldamise, monitooringu ja tehnilise logimise tarkvarasid. 5.2.1. Pilveplatvorm Kubernetes Kubernetes37 on avatud lähtekoodiga konteineritesse pakitud rakenduste automaatse paigalduse, ressursi planeerimise, skaleerimise ja halduse süsteem. Kubernetes on muutunud de fakto majutuskeskkonnaks erinevas suuruses ettevõtete ja organisatsioonide poolt. Selle platvormiga on võimalik majutada mikroteenustel baseeruvat arhitektuuri ja tagada kõrgkäideldavus. 5.2.2. Pideva paigaldamise tarkvara Pideva paigaldamise tööriistaks pakume eelkõige Argo CD38 tarkvara. Antud tarkvara paigaldatakse Kubernetese klastrisse ja sellega hallatakse Kubernetes klastri komponente. Põhiline erisus vanamoodsa lahendusega on see, et kui varasemalt on olnud valdav, et Gitlab juhtkanalid vajavad pääsu Kubernetes klastrisse ja algatavad muudatused, siis uue lähenemise puhul CD tegevusi otseselt ei algata Gitlab, vaid Kubernetes klastris asuv Argo CD käiv ise kontrollimas Gitlabi konfiguratsiooni repositooriumis, kas on muudatusi. Vajadusel saab teha Veebikonkse (web-hook), et teavitada CD süsteemi toimunud muudatustest. Küll aga nimetatud lähenemine ei vaja üldse CD juhtkanalite loomist. Pideva paigaldamise tarkvaraga kasutamisega on tagatud ka GitOps põhimõtted, millest on täpsemalt kirjutatud peatükis 9.2. Samuti järgib see lähenemine Kubernetes operaatori mustrit (Operation Pattern)39 5.2.3. Monitooring Süsteemi hetkeolukorra, alusplatvormi jõudluse ja rakenduste vaatlusparameetrite reaalajast hetkeolukorra jälgimiseks ning vajalike häiresignaalide väljastamiseks huvitatud osapooltele tuleb kasutusele võtta monitooringu moodulid-mikroteenused. Käesoleval ajal on valdkonnas üldpopulaarsed ja levinud tööriistad Micrometer40 teek, Prometheus41 monitooringu tsentraalne agregaator ja Grafana42 monitooringuinfo visualiseerimise tööriist. Joonisel 14 on kirjeldatud mikroteenuste monitooringulahendus Kubernetes majutusplatvormil kasutades nimetatud tööriistu. Joonis 14 Monitooringu tööriistade põhimõtteskeem Kubernetes majutuses Suures süsteemis on oluline ka skaleerimine, selle eest peab hoolt Kubernetes horisontaalne automaatne skaleerimise funktsionaalsus (Horizontal Pod Autoscaler) edaspidi HPA. HPA seadistatakse töötama vastu Prometherus adapterit, kust saab töötava rakenduse konteineri reaalajalise info. Vastavalt seadistustele ja etteantud limiitidele skaleerib PHA vajadusel rakendust – lisab või vähendab õlgasid. Juhul kui on kasutusel klastri GitOps operaator, siis on võimalik HPA funktsionaalsust rakendada ka selle kaudu. Eelnimetatud lahendus oleks eelistatud siis, kui klastri GitOps operaatorit kasutusel poleks. 5.2.4. Tehnilised logid Süsteemi tehniline logi on äärmiselt vajalik saamaks aru süsteemi toimimisest ja eriti, siis kui süsteemis on veaolukorrad või tõrked. Tarkvaravigade silumiseks on tarkvaraarendajal vajalik pääseda ligi logidele. Keerulistest süsteemides tuleb logisid käsitleda ühtse tervikuna, kuna päringud ja andmed läbivad mikroteenuseid ja protsesse. Kogu tervikust ilma korraliku logisüsteemita pole võimalik aru saada. Joonisel 15 on kujutatud meie poolt välja pakutud tehnilise logi kogumise ja logide kesksüsteemi edastamise lahendus. Joonis 15 Tsentraalne logimine Kubernetes klastris on igal rakenduse õlal sõltuvalt klastri konfiguratsioonist logifail, mis asub Kubernetes serveri failisüsteemis. Logi eksisteerib seni, kuni rakenduse õlg eksisteerib. Et vältida potentsiaalset logide kaotamist (selle risk on äärmiselt kõrge), tuleb logid deponeerida automaatselt kesksüsteemi, kus on neid võimalik keskselt kasutada ja analüüsida. Logide transportimiseks tuleks paigaldada Kubernetes klastrisse Fluentbit43 süsteemne protsess, mis kogub logid kokku serveri failisüsteemist ja edastab logid kesksesse logiserverisse. 5.3. PostgreSQL andmebaasi kõrgkäideldatav evitus Tänapäeval on normaalsus, et süsteemid on kõrgkäideldavad. Seda nii rakenduste tasemel, kus kasutame Kubernetes klastrit, kui ka andmebaasides. Kuigivõrd me ei soovita andmebaasi mootorit majutada Kubernetes klastris soovitame andmebaasimotoorit majutada eraldiseisvas virtuaalmasinas ja kahe sellisega koostöös on võimalik saavutada kõrgkäideldavus. Joonisel 16 on kujutatud Kõrgkäideldava PostgreSQL andmebaasiklastri evitusjoonis. Joonis 16. Kõrgkäideldava PostgreSQL klastri kontseptuaalne evitusjoonis Kuigivõrd Kõrgkäideldava andmebaasiklastri käivitamniseks on mitmeid viise soovitame selleks kasutada voogedastuse replikatsiooni (Streaming Replication), kus keskseks replikaatoriks on vabavatraline tarkvara Patroni63. Jooniselt lähtub, et tuleks kasutusele võtta kahe individuaalse virtuaalmasinaga süsteem, mis võivad asuda erinevates võrkudes ja või füüsilistes asukohtades. Üks n.ö. toodangu server ja teine test server. Sellisel viisil ei pea kulutama ressurssi toodangu süsteemile kahe virtuaalmasina paigaldamiseks. Küll aga tuleks selline lähenemine läbi arutada infoturbe vaatest. Lubada toodangu päringud test võrku on infoturbeline otsus. Tavaolukorras suunab Kubernetes klastrisse paigaldatud HA Proxy (ainult andmebaasimootorile) päringud toodangu suunas, kui toodangu pole enam kätte saadav lülitab proksi päringud automaatselt ümber kuumas valimiduses skeundaarse andmebaasiserveri suunas. Serveritele paigaldatakse vabavaraline Patroni tarkvara, mis korraldab ja haldab replikeerimist läbi WAL kataloogi (PostgreSQL spetsiifiline funktsionaalsus). 5.4. Infrastrutkuuri esialgne indikatiivne vajadus Käesolevas alampeatükis toome välja esialgse indikatiivse riistvara vajaduse kogu süsteemi tarbeks. Kubernetes klaster Vähemalt kolm õlga, e. kolm serverit, mille igaühe parameetrid on alljärgnevad: Kõvakettapinda: 20GB Mälu: 16GB protsessori lõime: 8 Andmebaasi klaster Vähemalt kaks õlga, e. kaks virtuaalmasinat, mille igaühe parameetrid on alljärgnevad: Kõvakettapinda: 50GB Mälu: 8GB protsessori lõime: 16 Elasticsearch virtuaalmasin Kõvakettapinda: 100GB Mälu: 16GB protsessori lõime: 4 Pilw.io blokkandmehoidla Prognoositav maht kohe pärast migreerimist: 1TB JvIS - 800GB MTR - 100GB Käeolev infikatsioon ei sisalda logide käitlemist. Logide käitlemiseks tuleks teha eraldi indikatsioon, kuid selle süsteemi kõvakettamaht on prognoositav sadades gigabaitides kuni terabaitides. 6. Andmeturve põhimõtted ja ülevaade Käeolevas peatükis käsitleme andmeturbe põhimõtteid ja kontseptsioone. 6.1. Andmeturbe põhimõtted Süsteemi arendamisel ja haldusel tuleb järgida Eesti infoturbestandardeid Infosüsteemide turvameetmete süsteem ISKE ja Eesti Infoturbestandardit44. Nimetatud dokumentidest viimane on uuem ja kaasaegsem. Süsteemi arenduse ja testimise käigus tuleks süsteemi kontrollida vastu OWASP Application Security Verification Standard45, mida on võimalik ka automatiseerida ja kaasata süsteemi jätkuva integratsiooni protsessi. MKM-is kehtivad mitmed infoturbe küsimusi kitsamalt käsistlevad poliitikad, mis on loetletud järgnevalt: Krüptokontseptsioon Logimisekontseptsioon Teenuste turvaline seadistamine Võrgukontseptsioon Nimetatud poliitikad on täpsemalt kirjeldatud MKM-i Confluence keskkonnas. 6.2. Andmekogude tsoneerimine ISKE võimaldab andmekogusid tsoneerida. Selleks tuleks füüsiliselt eraldada osad mikroteenused või andmebaasid teistest. Kõrgema turvaosaklassiga andmed koondatakse ühte füüsiliselt eraldatud „tsooni”. Kubernetes majutuskeskkonnas on võimalik eraldada rakendusi eraldi tsoonidesse kasutades nimeruumide loogikat. Andmebaasides on võimalik tsoone luua andmebaaside või andmebaasi skeemide kaupa. 7. Tarkvara arendamise ja testimise metoodikad ja praktikad Käesolevas peatükis kirjeldame tarkvara arendamise ja testimist mikroteenuste arhitektuuril arendatud tarkvaraprojektide erinevates faasides. 7.1. Tarkvara arendamise ja projektijuhtimise metoodika Tarkvaraarenduse protsessis on mitmeid metoodikaid ja lähenemisi. Meie soovitame mikroteenustel baseeruva süsteemi arendamiseks ja haldamiseks kasutada SCRUM46 metoodikat. SCRUM on kergekaaluline, kuid sellegi poolest võimas kooslus väärtustest, põhimõtetest ja praktikatest. Scrum toetub multi-funktsionaalsetele meeskondadele, et tarnida tooteid ja teenuseid lühikeste iteratsioonidena võimaldades alljärgnevaid asjaolusid: Kiire tagasiside; Kiirem innovatsioon; Pidev parendamine; Kiire kohanemine muutustega; Rohkem rahulolevaid kliente; Kiirendatud tempo ideest tarnimiseni. Scrum pakub meeskonnale tööriistad, praktikad, rutiinid, tseremooniad, mis aitavad paremini protsessi mõtestada ja oma tööd organiseerida. Ühtlasi võib Scrum metoodikat nimetada agiilseks tarkvaraarenduse metoodikaks. 7.2. Testimise metoodikad ja praktikad Käesolevas alapeatükis käsitleme testimise temaatikat, metoodikaid ja praktikaid. Käesolevas dokumendis käsitletud mikroteenuste arhitektuuril ehitatud süsteemile tuleb rakendada kõiki vajalikke testimise metoodikaid ja testimise tüüpe, et tagada süsteemi kvaliteet ja vastavus nõuetele. Muidugi peab silmas pidama, et testimine oleks võimalikult automaatne ja kasutusel oleks tööriistad, mis hõlbustavad testide loomist ja efektiivset testimist. Süsteemi testimine on olnud palju aastaid arendajate manuaalne tegevus, millest pole jäänud jälge ja mida pole võimlaik korrata ega automatiseerida. Loodavale süsteemis tuleb kasutada testimise raamistikke ja tööriistu, mis võimaldaks teste lihtsalt kirjeldada, arendada ja korduvalt mis tahes aja hetkel käivitada. 7.2.1. Funktsionaalne testimine Funktsionaalne47 testimine hõlmab rakenduste testimist ärinõuete suhtes. See kaasab mitmesuguseid testi tüüpe, et tagada, et rakenduse iga osa toimib nii nagu ette nähtud. Selleks kasutatakse kasutuslugusid, millised on koostanud meeskonna analüütikud ja kvaliteedi insenerid. Funktsionaalse testimise testi tüüpideks on näiteks: Ühiktestimine (Unit test) Integratsioontestimine (Integration test) Süsteemi testimine (System test, End to End test) Vastuvõtu testimine (Acceptanse test) Ühiktestimine on esmatasandi testimise liik, mida korraldab ja arendab tarkvara arendaja vahetult tarkvara lähtekoodi kirjutades. Testidega kaetakse väikesed koodi ühikud ja sellega veendutakse, et meetodid või funktsioonid toimivad nii nagu peavad. Ühiktestid kirjutatakse kohe samal ajal, kui põhitarkvara ja veendutakse teste käivitades, et seni arendatud tarkvara toimib vastavalt tarkvara alamosa toimimise nõuetele. Tarkvaraarenduse käigus ei tuleks üldse tarkvara ennast käivitada, vaid käivitada ainult teste, mis kontrollivad tarkvara osade tööd. Testimise andmeid loob arendaja üldjuhul ise või kasutab analüütikute või kvaliteedieksperdi poolt loodud testandmeid. Integratsioontestimine on testimise liik mille abil testitakse juba süsteemi moodulite ja üksikute funktsioonide koostoimimist. Integratsioontestimise arendamise käigus jälgitakse samu põhimõtteid, kui ühiktestimise käigus järgiti. Selle testimise käigus võivad osaleda ja olla hõlmatud ka teised süsteemid või osapooled, mida tuleb testides, siis simuleerida. Integratsioontestid on üldjuhul nagu ka ühiktestid koodi lahutamatu osa, seega nad asuvad koodiga samas repositooriumis. Paim viis selleks on käivitada testide käivitamise ajaks ka kõik teised integratsiooni osapooled ja kasutades testandmeid vastata päringutele või täita käskluseid. Selle testimise liigi testandmed peaks olema loodud meeskonna üleselt kvaliteedieksperdi poolt. Süsteemi testimine on testimise liik, kus testid rakendatakse süsteemi kui „musta kasti” suhtes. Nimetaud testid hõlmavad endas nii programmliidese teste kui ka kasutajaliidese teste. Üldjuhul simuleeritakse lõppkasutaja tegevusi ja testid käivitatakse päris eeltestimise keskkonnas kasutades toodangukeskkonnale ligilähedasi andmeid. Testandmestik peaks olema meeskonna üleselt hallatud ja loodud kvaliteedieksperdi poolt. Testide koostamise ja käitamise eest peaks hea seisma samuti kvaliteediekspert. Vastuvõtutestimine on viimase funktsionaalse testimise faas ja seda kasutatakse, et kontrollida tarkvara kui terviku vastavaust ärinõuetele ja on valmis tarnimiseks toodangukeskkonda. Selle testimise käigus veendutakse, et tarkvara vastaks lõppkasutaja vajadustele. Seda testimist korraldavad ja teste arendab üldjuhul meeskonna kvaliteediekspert (automaatsed testid) ja manuaalses lõpptestimises osaleb ka lõppkasutaja esindaja. Testimine viiakse üldjuhul läbi vastuvõtutestimise või eeltoodangu keskkonnas, kasutades selleks toodangukeskkonnaga ligilähedasi andmeid. Soovitame testimise korraldamiseks kasutada järgnevaid tööriistu ja vahendeid: JUnit 548 – Java ühiktestimine ja integratsioontestimine Testcontainers49 – Integratsioontestimine, süsteemi testimine Cypress50 - Süsteemi testimine, E2E testimine, kasutajaliidese testimine, vastuvõtutestimine WireMock51 – Integratsioontestimine, Süsteemi testimine Postman52 – tagarakenduste REST pöörduspunktide testimine 7.2.2. Mittefunktsionaalne testimine Mittefunktsionaalne testimine peaks hõlmama tarkvara operatiivseid aspekte. Sellisteks testideks on näiteks: Jõudlustestimine (Performance testing) Turvatestimine (Security testing) Kasutustestimine (Usability testing) Ühilduvuse testimine (Compatibility testing) Jõudlustestimise eesmärgiks on kontrollida, kuidas rakendus käitub erinevates tingimustes ja selle käigus püütakse simuleerida reaalolukorda või koormatakse süsteemi üle planeeritud kasutuse, et leida süsteemi murdepunkt. See testimise liik jaguneb veel omakorda koormus, stress, tipu ja vastupidavuse testideks. Jõudlusteste tehakse eelkõige eeltoodangu keskkonnas suhtes, kuid on ka teisi stsenaariumeid. Turvatestimine peab välja selgitama eelkõige, kas süsteemis käsitletavad andmed on kaitstud, süsteem on töövõimeline ja selle funktsionaalsusi poleks võimalik ära kasutada viisil, mis pole kirjeldatud ärinõuetega. Testitakse nii kasutajaliidese kaudu, kui ka pöörduspunktide kaudu. Turvatestimine tehakse eelkõige eeltoodangu keskkonnas suhtes. Kasutustestimise eesmärgiks on kasutusmugavuse testimine lõppkasutaja vaates. Eesmärk on tuvastada, kas disain on esteetiline ja rakendus vastaks ettenähtud kasutusvoogudele. Need testid on hea viis tiimide üleselt testida mikrokasutajaliideseid ja kogu süsteemi kui tervikut. Ühilduvustestimine võiks antud dokumendi raames kirjeldatud süsteemi osas rakendada kasutajaliidestele, et välja selgitada, kas sama kasutajaliides toimiks erinevates operatsioonisüsteemides ja Interneti sirvikute toodetes. Tagarakenduste osas sellist testimise liiki otseselt pole vajadust kohandada. Soovitame testimise korraldamiseks kasutada järgnevaid tööriistu ja vahendeid: Sonarqube53 – koodi staatiline analüüs, turvatestimine, koodi objektiivne kvaliteet Apache JMeter54 - jõudlustestimine 8. Koodi- ja konfiguratsiooni haldus, tehiste ehitamine, tarne Käesolevas peatükis kajastame Tarkvara lähtekoodi, rakenduste ehitamiste ja automaatsete süsteemide haldamist. 8.1. Lähtekoodi haldus, tarne ja CI/CD Käesolevas peatükis kirjeldame detailsemalt lähtekoodi haldust, lähtekooid majutuse, tarneprotsessi, pideva integreerimise ja pideva paigaldamise temaatikat. 8.1.1. Lähtekoodi majutamine Lähtekoodi hallatakse Git repositooriumis. Konkreetselt MKM Gitlab tarkvaraga, mis on majutatud eraldiseisvalt lõpprakendustest. Sõltuvalt projektist tuleks kaaluda, kas monorepo, polürepo või hübriidrepo kasutamist. Monorepo on Git repositoorium, kus kõigi moodulite, teekide, mikroteenuste lähtekood on samas GIT repositooriumis. Polürepo on Git repositoorium, kus teegi, mikroteenuse või mooduli lähtekood on paigutatud eraldi repositooriumisse. Polü- ja hübriidrepo eelduseks on, et eksisteerib tehiste repositoorium (artifactory), mis näiteks sisaldab kompileeritud tarkvarateeke (Java, JavaScript jne.) Repositooriumi puudumisel on nimetatud repositooriumi stiilide puhul vajalik kõik sõltuvused alati ehitamiseks alla laadida ja alati uuesti ehitada (kompileerida ja paketeerida), mis tähendab oluliselt pikemat protsessi aega. Monorepo puhul on kõik tarkvara komponendid ühes repositooriumis. Mitmete arenduspartnerite vahel arenduste jagamisel on selline lähenemine äärmiselt ebaefektiivne tekitades arendusprotsessid administratiivset keerukust ja vajadust täpsemaks koordineerimiseks. Käeolevas dokumendis toodud mikroteenuste arhitektuuri puhul, on selline lähenemine pigem välistatud, kuna on planeeritud kaasata mitmeid arenduspartnereid ja toimuvad mitmed sama aegsed arendused. Tulevaste arenduste puhul on võimlaik kasutada kas Gitlabi enda tehise artifaktooriumit või MKM-i artifaktooriumit Jfrog. 8.1.2. Lähtekoodi tarne haldus Lähtekoodi tarnimiseks tuleks kasutada mõnda levinud ja hästi juurdunud lähtekoodi tarneahela protsessi (edaspidi tarneprotsess). Ühes selliseks on Goitfl ow55. Selles tarneprotsessis on kirjeldatud, kuidas kasutada Git-i funktsionaalsuseid, harusid (branch), lipikuid (tag) jne. Selle tarneprotsessi põhiliseks omaduseks on järgnevad asjaolud: „Main/master” harus ei toimu arendust; Jooksvad aredused asuvad harus nimetusega „develop”; Funktsionaalsuste arendamine toimub „feature” harudes, kus aluseks on võetud „develop”; Vastuvõtutestimine toimub haru „release” peal; Arendusharud mestitakse „develop” harusse tagasi pärast arenduse lõpetamist ja lokaalset testimist; „Develop” haru mestitakse regulaarselt „release” harusse, mille baasil tehakse testimist ja vastuvõtutestimist; Tarne paigaldamise järgselt mestitakse „release” haru „master” harusse; Kriitiliste ja kiireloomuliste arenduste sh. turvavigade parandamise aluseks võetakse „master” haru ja muudatused mestitakse „release” ja „develop ” harusse; Arenduse ja tarneprotsessi osa on koodi mestimine, mis peaks toimuma kasutades Gitlabi mestimise juhtloogika (merge requests). Koodi kvaliteedi tagamiseks vastavalt mestitavale koodi harule tuleb läbi viia koodi ülevaatus (code review). Samuti tuleks rakendada tarnitavale koodile staatilisi koodianalüüsi tööriistu. MKM-is on olemas SonarQube56 staatilise koodi analüüsi tööriist, mida saab kasutada. 8.1.3. Lähtekoodi ehitamine ja sõltuvuste haldus Tarkvaraprojektides on oluliseks pakettide ja sõltuvuste haldus, samuti koodi ehituse korraldamine. Eelkõige Java programmeerimiskeele maailmas, kuid mitte ainult on enamlevinud Ant, Maven ning kolmanda põlvkonna tööriistaks võiks lugeda Gradle. Soovitamegi kasutada süsteemi ehitamiseks tarkvaraprojektides Gradle57 tööriista ja tarkvaraprojektide paketeerimise, sõltuvuste halduse ja ehitamise tarbeks. Gradle tööriista saab kasutada nii, koodi genereerimise, kompileerimise, pakkide ehitamise, NPM, Node vms. Docker konteinerite loomise, käivitamise jne. tarbeks. Kui kõikides tarkvaraprojektides on üks tööriist kasutusel, siis on kogu süsteemi arendus kontrolli all ja unifitseeritud. Gradle kasutamisel kõigis tarkvara ehitamisega seotud tegevustes saab ehituskeskkonnas lihtsustada töövoogude seadistamist ja ehitusagentide unifitseerimist. Sama agendi tüübiga saab ehitada kõik tarkvarad hoolimata, kas see on Java, Node.js, vms. Tagarakendus või kasutajaliides. 8.1.4. Pidev integreerimine ja pidev tarne (CI/CD) DevOps üheks aluspõhimõtteks on CI/CD (Continuous Integration / Continuous Deployment) kasutamine praktikas. Tuleb vältida manuaalseid tegevusi, mis vähendavad meeskonna läbilaskevõimet või paneb koormuse mõnele meeskonnaliikmele. Pideva integratsiooni (CI) läbi viimiseks tuleb kasutada vastava funktsionaalsusega tarkvara. Gitlabi, mis on MKM-i ametlik Git süsteem on selline funktsionaalsus arendatud. Selleks on võimalik arendada ja konfigureerida Git repositooriumite juurde integratsiooni juhtkanalid (work flows), millised teevad ette määratud tegevusi automaatselt erinevate Git sündmuste toimumisel. Näiteks saab käivitada automaatselt koodi ehitamist (kompileerimist ja paketeerimist) iseseisvaks teegiks ja deponeerimiseks tehiste varamusse e. artifaktooriumisse (artifactory) või Docker registrisse. On võimalus välja kutsuda ka CD tegevusi, mis jõustavad muudatused vajalikus keskkonnas. Pideva paigaldamise (CD) läbiviimiseks on harilikult kasutatud juhtkanaleid (workflow). Kus rakendatakse mingis majutuskeskkonnas muudatused automaatselt. Süsteemide ja halduse keerukuse kasvamisel on mõistlik rakendada tööriistu, mis on evolutsioonis arenenud just lahendama pideva paigaldamise probleeme. Samuti võimaldab see tõsta üldist turvalisust ja detsentraliseerida protsesse. Uue põlvkonna CD põhimõtete ja tööriistade kohta kirjutame peatükis 9. 8.2. Konfiguratsioonide haldus Käesolevas peatükis käsitletakse nii süsteemi kui ka äriliste seadete ja parameetrite haldust. 8.2.1. Rakenduste ja keskkondade seaded Rakenduste süsteemsed ja majutuskeskkondasid kirjeldavad seadeid ja parameetreid hoitakse GIT-i repositooriumis. See toimimise viis on kooskõlas DevOps ja GitOps põhimõtetega, millest on täpsemalt kirjutatud peatükis . Seadete jagamiseks on käesolevas dokumendis kirjeldatud tehnilise konfiguratsiooni moodul peatükis 4.2.7. Äärmiselt oluline on silmas pidida, et nimetatud seadete haldus toimuks väljaspool Kubernetes majutuskeskkonda, kuna on teoreetiline oht, et neid võib seal muuta, need võivad seal kaduda ja Kubernetesis seadete hoidmise korral pole tagatud seadete versioneerimine. 8.2.2. Äriprotsessi seaded Äriprotsessi seadeid on mõistlik hallata samuti nagu rakenduste seadeid. GIT-i repositooriumis ja jagada läbi REST teenuse. Mikroteenuste arhitektuuris on kirjeldatud tehnilise konfiguratsiooni mikroteenus peatükis 4.2.7. Samal viisil oleks võimalik äriprotsessi seadeid hallata ja kättesaadavaks teha teistele mikroteenustele. Sellisel viisil pole vaja luua andmebaasi, vastavaid protsessi mootoreid, et mingeid protsesside ja rakenduste käigus vajalikke ärilisi parameetreid hallata. Selle meetodi rakendamiseks on vaja aga muudatuste sisseviimine korraldada kahel võimalikul viisil: a) GIT repositooriumis seadete failide muutmiseks luuakse mikroteenus ja triviaalne kasutajaliides. Seadefaili sisu kuvatakse kasutajaliideses ja muutujate muutmisel luuakse uus tekstifail. Tagarakendus kirjutab faili sisu GIT-is üle. Selline lähenemine vajab täiendavat tarkvaraarendust, kuid pole niivõrd prioriteetne. Eeliseks on asjaolu, et seadete muutja ei pea omaga otseselt GIT-i ligipääsu, ega teadmisi GIT-i repositooriumisse muudatuste tegemiseks. b) Tavapärane GitOps protsess, kus tehakse lokaalses (lõppkasutaja tööjaamas) muudatus, viiakse muudetud failid GIT repositooriumisse ja läbitakse mestimise protsess. Selle meetodi eeliseks on, et on tagatud GitOps põhimõtte rakendamine ka äriliste muutujate puhul ja see ei vaja eraldi tarkvara arendust. Puuduseks on, et organisatsiooni lõppkasutaja peab omaga algteadmisi GitOps tööriistadest ja protseduuridest. Teisalt, kui ärilisi muudatusi tehakse DevOps raames, siis antud asjaolu ei ole miinuseks. 9. Süsteemi majutus- ja administreerimise põhimõtted Käesolevas peatükis kirjeldame dokumendis kirjeldatud mikroteenustel arendatava arhitektuuri soovituslikku maajutuse ning administreerimise põhimõtteid. Kajastame DevOps, GitOps praktikaid ja potentsiaalset majutust Riigipilves. 9.1. DevOps DevOps lähenemine on kogum praktikatest, tööriistadest ja IT kultuurilistest filosoofiatest, mis automatiseerivad ja integreerivad tarkvaraarenduse protsesse ja IT meeskondi. See lähenemine väärtustab tiimide jõustamist, tiimide vahelist suhtlust ja kaastööd ja tehnoloogiate automatiseerimist.58 Kui vanasti olid IT meeskonnad niiöelda „silod”, kus analüütikud, arendajad ja administraatorid töötasid eraldiseisvalt ja andsid tulemeid lihtsalt üle, siis DevOps lähenemisest on need rollid põhimõtteliselt integreeritud ja nii tarkvara arendusprotsessi ettevalmistus, tarkvara arendamine, kui ka toodangusse paigaldatud tarkvara haldamine on tarkvaraarendusmeeskonna igapäevaste rutiinide osa. Kuna töömaht on kõigis nendes etappides suur, siis tuleks kõikki samme võimalikult palju automatiseerida ja protsesse standardiseerida. DevOps elutsükkel on kujutaud joonisel 17. Joonis 17 DevOps elutsükkel 59 DevOps-i olulisemad põhimõtted60: Kõik meeskonna arendustegevuste tulemuste resultaat peaks olema kliendi põhine tegevus; Tarkvara on loodud lõppkasutajat silmas pidades; Meeskonnad peavad nõustuma, et neil on otsast-lõpuni vastutus kogu tarkvaratoote projekti jooksul. Edukal meeskonnal on esindatud balansseeritud oskuste komplekt, mille tulemusena on meeskond ristfunktsionaalne ja autonoomne; Eksperimenteerimine on äärmiselt vajalik, mille resultaat on väljakutsete võtmine ja pidev parendamine; IT operatsioone tuleb optimeerida ja automatiseerida kus vähegi võimalik. 9.2. GitOps GitOps on uue põlvkonna administratiivne lähenemine. See kasutab DevOps-is tuntud tarkvara arenduse parimaid praktikaid, näiteks versioonihaldus, koostöötamine, vastavus, CI/CD ja rakendab neid infrastruktuuri, süsteemide, rakenduste administreerimisel.61 GitOps rakendamiseks tuleb jõustada lisaks DevOps lähenemisele asjaolu, et süsteemi kirjeldused ja konfiguratsioonid on hoiustatud GIT repositooriumites ja muudatuste haldus toimub läbi mestimise korralduse (merge requests). GitOps tööriistaks pakume Kuberentes klastris kasutada Argo CD62, mis võimaldab rakendada GitOps lähenemist. Põhimõtteskeem on kujutatud joonisel 18. Joonis 18. GitOps rakendamine ja Argo CD kasutamine jätkuva paigaldamise halduses Kubernetes klastrisse on paigaldatud Argo CD operaator tarkvara, mis käib regulaarselt kontrollimas GIT seadistuste repositooriumit. Argo CD seejärel rakendab muudatused Kubernetes klastris. Argo CD kasutajaliides on ligipääsetav DevOps inseneridele ja süsteemi administraatoritele, kes saavad sellest vajalikku tagasisidet, mille abil on võimalik juhtimisotsuseid teha ja operatsioone juhtida. Käesolev lahendus tõstab ka süsteemi turvalisust, kuna pole vaja enam avada klastri administratiivset programmliidest avalikku võrku. Initsiatiiv muudatuste rakendamiseks tuleneb süsteemist seest. 9.3. Majutus Riigipilves Süsteemi majutus peaks lähtuma põhimõttest, et kõik majutuskomponendid on välja vahetatavad ja mõistliku aja jooksul kolitavad ilma täiendavaid tarkvaraarendusi tegemata. Erinevad teenuspakkujad võimaldavad erinevaid ärilisi probleeme lahendada omal viisil, mis tähendab, et organisatsiooni eest on ära lahendatud mingi funktsionaalsus ja tarbija saab funktsiooni kasutada sellega adapteerudes. Lühidalt on see Tarkvara nagu teenus (SaaS – Software as a Service). Tuleks kasutada teenuseid, mille asendamine samaväärsega on lihtne ilma tarkvaras suuri muudatusi tegemata. Teisalt pakuvad majutusplatvormid platvormi teenust (PaaS – Platform as a Service), kus kliendile pakutakse mingit infrastruktuuri taset nt virtuaalmasin, ja klient saab sinna oma tarkvara paigaldada ise. Käesolevas dokumendis käsitletav pilveteenus Kubernetes on Riigipilve mõttes laiendatud PaaS. Kuhu saab kliendi poolt tekitada nimeruume ja majutada erinevaid tarkvarasid üksteisest sõltumatult töötama. Käesolev dokument on kajastanud arhitektuurses osas, milliseid teenuseid oleks mõistlik hallata tarkvara teenustena ja milliseid platvormi teenustena. 10. Kasutatud kirjandus 1 https://www.ttja.ee/ 2 https://www.riigiteataja.ee/akt/125062021017?leiaKehtiv 3 https://www.ttja.ee/ariklient/ametist/ametist/tutvustus-ja-struktuur 4 Riigi infosüsteemide Amet INFOSÜSTEEMIDE KOLMEASTMELISE ETALONTURBE SÜSTEEMI ISKE, 2017 5 MSÜS, https://www.riigiteataja.ee/akt/106042021005?leiaKehtiv 6 https://www.europarl.europa.eu/news/et/headlines/priorities/digipoore/20210211STO97614/suurandmed-maaratlus-eelised-ja-voimalikud-probleemid- infograafikud 7 https://www.oracle.com/big-data/what-is-big-data/ 8 https://www.oracle.com/big-data/what-is-big-data/ 9 https://www.ria.ee/sites/default/files/content-editors/publikatsioonid/avaandmete_loomise_juhend.pdf 10 https://avaandmed.eesti.ee/ 11 J. L. Harrington, Relational Database Design and Implementation, 4th Edition. Morgan Kaufmann, 2016, jt. 1, pt. 1, jt. 2, pt 3-5. 12 C. Chasseur, Y. Li, and J. M. Patel. Enabling json document stores in relational systems. 2013 13 https://json-schema.org/ 14 https://www.riigipilv.ee/teenused/andmesalvestuse-teenus/pilw-io-storagevault-pilwio 15 https://datatracker.ietf.org/doc/html/rfc7519 16 https://www.keycloak.org/ 17 https://jwt.io/ 18 https://koodivaramu.eesti.ee/tehik/teis/persons-service 19 https://koodivaramu.eesti.ee/tehik/teis/payments-service 20 https://koodivaramu.eesti.ee/tehik/teis/signing-service 21 https://geoserver.org/about/ 22 https://spring.io/projects/spring-cloud-config 23 https://cloud.spring.io/spring-cloud-config/multi/multi__spring_cloud_config_client.html 24 https://koodivaramu.eesti.ee/tehik/teis/signing-service 25 https://koodivaramu.eesti.ee/tehik/teis/messages-service 26 https://www.ria.ee/sites/default/files/content-editors/publikatsioonid/avaandmete_loomise_juhend.pdf 27 https://www.krakend.io/ 28 https://koodivaramu.eesti.ee/tehik/teis/common-api-gateway 29 https://koodivaramu.eesti.ee/tehik/teis/xroad-gateway 30 https://redis.io/ 31 https://www.elastic.co/ 32 https://camunda.com/ 33 https://martinfowler.com/articles/micro-frontends.html 34 https://livebook.manning.com/book/micro-frontends-in-action/chapter-1/16 35 https://redux.js.org/ 36 https://zeroheight.com/3d136290e/p/188910-veera-disainissteem/b/94293b 37 https://kubernetes.io/ 38 https://argo-cd.readthedocs.io/en/stable/ 39 https://kubernetes.io/docs/concepts/extend-kubernetes/operator/ 40 https://micrometer.io/ 41 https://prometheus.io/ 42 https://grafana.com/ 43 https://fluentbit.io/ 44 https://eits.ria.ee/et/versioon/2021/etalonturbe-kataloog/app-rakendused/app3-voorguteenused/app31-veebirakendused/1-kirjeldus/ 45 https://owasp.org/www-project-application-security-verification-standard/ 46 https://www.scrumalliance.org/about-scrum 47 https://smartbear.com/learn/automated-testing/software-testing-methodologies/ 48 https://junit.org/junit5/docs/current/user-guide/ 49 https://www.testcontainers.org/ 50 https://www.cypress.io/ 51 https://wiremock.org/ 52 https://www.postman.com/ 53 https://www.sonarqube.org/ 54 https://jmeter.apache.org/ 55 https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow 56 https://www.sonarqube.org/ 57 https://gradle.org/ 58 https://www.atlassian.com/devops 59 https://www.atlassian.com/devops 60 https://www.getxray.app/blog/get-started-with-devops-principles-best-practices-and-tips?utm_term=&utm_campaign=GG_SEARCH_TOFU+- +DSA+Blog+Posts+- +EU2&utm_source=adwords&utm_medium=ppc&hsa_acc=9970092548&hsa_cam=17994277636&hsa_grp=136842240141&hsa_ad=615722725589&hsa _src=g&hsa_tgt=dsa- 1391637226778&hsa_kw=&hsa_mt=&hsa_net=adwords&hsa_ver=3&gclid=Cj0KCQjwkOqZBhDNARIsAACsbfKWamhE2aBX0hS0Y5icg5FRLGxK- 9XmngWe5O6YurKsiGWoKEGcM3caAmodEALw_wcB 61 https://about.gitlab.com/topics/gitops/ 62 https://argo-cd.readthedocs.io/en/stable/ 63 https://patroni.readthedocs.io/en/latest/ Väikehanke "Tarbijakaitse ja Tehnilise Järelevalve Ameti protsessijuhtimise ja otsustustoe lahenduse analüüsi" pakkumuse kutse Tarbijakaitse ja Tehnilise Järelevalve Amet (edaspidi nimetatud kui Hankija/TTJA) palub esitada pakkumus vastavalt kutses sisalduvatele tingimustele. Tarbijakaitse ja Tehnilise Järelevalve Ameti protsessijuhtimise ja otsustustoe lahenduse analüüs Eelarve: 25 000 EUR (ilma käibemaksuta) 1. Pakkumuse vormistamine ja esitamine 1.1. Pakkumuses peab olema esitatud tööde kirjeldus koos ajakavaga, kuidas ülesandeid planeeritakse lahendada ja nõutud tulemused saavutada. Projektiplaani kavandis tuleb välja tuua tegevused, tulem(id), ajakava, vaheetapid, orienteeruv ajakulu, kuidas on hallatud riske, tagatud tulemuste kvaliteet ja ootused Tellijale. 1.2. Pakkumuse maksumus tuleb esitada ilma käibemaksuta. 1.3. Hankija aktsepteerib elektrooniliselt esitatavate pakkumuse dokumentide osas kõiki üldlevinud dokumendi formaate, nagu .pdf (Portable Document Format), .rtf (RichTextFormat), .odt (Open Office) ning ka MS Office formaate. 1.4. Eelkirjeldatud nõuetele mittevastavaid, sh hilinenult esitatud pakkumusi arvesse ei võeta. 1.5. Pakkuja kannab kõik pakkumuse ettevalmistamisega ning esitamisega seotud kulud. 1.6. Hankija koostab pakkumuste hindamise kohta protokolli. 1.7. Hankija ei rakenda hankelepingu sõlmimisel ooteaega. 2. Tehniline kirjeldus Käesoleva projekti eesmärk on analüüsida turul pakutavate protsessijuhtimise ja otsustustoe tarkvarade sobivust TTJA ärivajadustele ning koostada detailanalüüs sobivaima lahenduse kasutusele võtmiseks TTJA e-teenuste platvormil. Väljapakutud lahenduse alusel peab olema võimalik alustada konkreetse lahenduse piloteerimist (sh peab olema välja selgitatud olemasoleva e-teenuste platvormi arendusvajadus). Täpsemad tingimused on toodud Lisas 1. Protsessijuhtimise ja otsustustoe lahenduse piloteerimiseks vajalik arendus ei kuulu käesoleva hanke skoopi. 3. Hankelepingu tingimused 3.1. Projekti algus on hiljemalt 7 päeva peale hankelepingu jõustumist. 3.2. Täpsemad lepingu tingimused sisalduvad hankelepingu projektis (Lisa 2). 4. Pakkumuste hindamine ja pakkumuse edukaks tunnistamine 4.1. Pakkumuste hindamise kriteeriumideks on pakkumuse maksumus (40%) ja analüüsi ideelahendus (60%). 4.2. Madalaima maksumusega pakkumusele omistatakse maksimaalsed 50 väärtuspunkti. Teistele pakkumustele omistatakse väärtuspunktid vastavalt valemile: "40" - ("pakkumuse väärtus" - madalaim väärtus") / "suurim väärtus" * "40" 4.3. Analüüsi ideelahendust hindavad hankija hankekomisjoni liikmed eraldi. Hindamiskomisjoni liikmete poolt omistatud väärtuspunktidest arvutatakse aritmeetiline keskmine. Hindamiskomisjon omistab pakkuja poolt pakkumuses esitatud ideelahendile punkte alljärgnevalt: Väärtuspunktide Põhjendus punktide andmiseks arv 0 Esitatud projekt ei vasta tehnilises kirjelduses kirjeldatud nõuetele. 10 Pakkuja esitatud projekt on koostatud puudulikult või sisaldab sisulisi vastuolusid. Hankijal ei ole arusaadav, kuidas kavatsetakse soovitud tulemini jõuda. 1 20 Pakkuja esitatud projektist ei ole selgelt aru saada, kuidas hanke alusdokumentides kirjeldatud nõuded, ootused tulemusele ning eesmärkidele planeeritakse realiseerida. Kõik tööd ei ole jaotatud etappideks või ei ole nende etappideks jaotamine selgelt põhjendatud või põhjendused arusaadavad või ei ole etappide mahuhinnangud realistlikud arvestades etapi tulemite mahtu ja keerukust. Projektis esineb olulisi puudujääke. Hankija hinnangul ei pruugi pakkuja pakkuda sobivat lahendust. 40 Pakkuja on aru saanud probleemi olemusest ning projekt on esitatud struktureeritult ja põhjendatult. Esitatud projektis on arusaadavalt kirjeldatud, kuidas alusdokumentide nõuded, ootused tulemusele ning eesmärkidele planeeritakse realiseerida. Projekt on läbimõeldud ning enamalt jaolt sobivad Tellija teenuste portfelli, kuid esinevad üksikud puudujäägid, vastuolud ja/või ebatäpsused, kuid need ei ole oluliseks takistuseks. 60 Pakkuja on täielikult aru saanud probleemi olemusest ja ülesandepüstitusest. Projekti eesmärgi saavutamiseks vajalikud tegevused on loogilises järjestuses ja omavahelises seoses. Projektis esitatud tegevused on jaotatud läbiviimiseks sobiva kestusega etappideks, etapi tööde mahuhinnangud on realistlikud arvestades etapi tulemite mahtu ja keerukust. Projekt on põhjalik, läbimõeldud ja ammendav ning täies mahus sobivad Tellija teenuste portfelli vajadustele. 4.4. Punktides 4.2-4.3 saavutatud punktisummad summeeritakse ja hankija tunnistab edukaks eeltoodud kriteeriumide alusel enim väärtuspunkte kokku kogunud pakkumuse. Hindamistäpsus on kaks kohta pärast koma. 4.5. Juhul, kui kaks või enam pakkumust on võrdsete punktisummadega, selgitatakse edukas pakkumus välja liisuheitmise teel. Liisuheitmise korra määrab hankija. Võrdväärse pakkumuse esitanud pakkujatel on õigus viibida liisuheitmise juures. Liisuheitmise korrast, ajast ja kohast teavitab hankija pakkujaid e-maili teel pakkuja poolt esitatud kontaktandmetel. Pakkumuse esitamisega kinnitab pakkuja, et ta:  nõustub kõikide pakkumuse kutses esitatud tingimustega, sh hankelepingu projektis sätestatud lepingu tingimustega;  pakkumus on jõus vähemalt 30 päeva pakkumuste esitamise tähtpäevast arvates. Hankija kontaktisik, kes jagab selgitusi hankega seotud küsimustes, on Arthur Allas, [email protected], telefon 620 1757. Hankijal ei ole kohustust vastata hankega seotud küsimustele, mis on esitatud hiljem kui 2 tööpäeva enne pakkumuste esitamise tähtaja saabumist. Pakkumuse palume esitada hiljemalt 26.01.2024 kl 12.00 e-posti aadressile [email protected]. TTJA jätab endale õiguse lükata tagasi kõik esitatud pakkumused sõltumata põhjus(t)est. Lisad Lisa 1 – Tehniline kirjeldus Lisa 2 – Hankelepingu projekt Lisa 3 - Arhitektuur Lisa 4 - TTJA standardiseeritud loataotluse protsess (protsessi joonis) Lisa 5 - Majandustegevusteate taotluse esitamise protsess (protsessi joonis) 2 Lisa 1 Tehniline kirjeldus Protsessijuhtimise ja otsustustoe lahenduse analüüs Sisukord 1 Sissejuhatus ..................................................................................................................................... 2 2 Mõisted ja lühendid ......................................................................................................................... 2 3 Analüüs............................................................................................................................................ 3 4 Tööde teostamise aeg ja eeldatav maksumus .................................................................................. 4 5 Töökorraldus ................................................................................................................................... 4 6 Pakkumuse esitamine ...................................................................................................................... 5 7 Täiendavad materjalid ..................................................................................................................... 5 7.1 TTJA standardiseeritud loataotluse protsess (Lisa 4) .................................................................. 5 7.2 Majandustegevusteate taotluse esitamise protsess (Lisa 5) ......................................................... 5 7.3 Kasutajagruppide ootused ja vajadused protsessijuhtimise lahenduse kasutamisele uuel e- teenuste platvormil (visioon) ................................................................................................................... 6 7.4 Mittefunktsionaalsed ja tehnilised nõuded .................................................................................. 6 1 Sissejuhatus Käesolev dokument kirjeldab protsessijuhtimise ja otsustoe lahenduste võrdlusanalüüsi nõudeid ning avab projekti tagamaid. Tarbijakaitse ja Tehnilise Järelevalve Amet (TTJA) osutab ca 85 erinevat teenust. Aastas on üle 115 000 teenuste kasutuskorra. Teenused võib jaotada 5 kategooriasse:  tegevuslubade jm lubade väljastamine;  riiklik järelevalve;  tururegulatsioon;  tarbijavaidluste lahendamine;  nõustamisteenus;  muud teenused. Teenuste osutamiseks kasutatakse põhiliselt 2 infosüsteemi – JVIS ja MTR. Mõlemad infosüsteemid on umbes 15 aastat vanad, nende väljavahetamisega on juba alustatud. Infosüsteemide väljavahetamise projekt võtab eelduslikult 4-5 aastat. Infosüsteemide väljavahetamine on osa e-teenuste projektist, mille käigus uuendatakse teenuste pakkumist tervikuna. Juba on uuendatud teenuste äriprotsessid (sh on loodud standardiseeritud protsessid), uuendamisel on teenuste organisatsioon ja juhtimine. Käimas on e-teenuste platvormi esimeste komponentide arendus, mille raames luuakse võimekus 10 majandustegevusteate esitamiseks 1 uuel e-teenuste platvormil. Tegemist on standardiseeritud loaprotsessi (vt p 7.1) kõige lihtsama protsessivooga, mis ei nõua taotluse menetlust (vt p 7.2). Loodav e-teenuste platvorm põhineb mikroteenuste arhitektuuril. Üleminek uuele platvormile on kavandatud järk-järgult, mis tähendab, et paralleelselt on lähiaastatel kasutuses nii vanad infosüsteemid (JVIS, MTR) kui ka uus loodav platvorm. Mikroteenustele üleminekul muutub infosüsteemi arhitektuur oluliselt keerukamaks - palju erinevaid omavahel suhtlevaid komponente seniste monoliitsete rakenduste asemel. Uuele platvormile üleminekuga toimuvad muutused ka platvormide tehnilises halduses, platvormi arendusprotsessis ja kasutajatoes. Uute arenduste tarneid tehakse senisest tihemini ja komponentide põhiselt. Senine teenuste arendamise ja tarnete protsess on olemasolevates rakendustes olnud keerukas, mistõttu on muudatuste sisseviimine olnud ressursimahukas. Samuti on puudunud teenuseomanikel võimalus teenuste osutamise mõõtmiseks ja töö efektiivsuse hindamiseks, mistõttu on teenusprotsesside „pudelikaelade“ ja protsesside automatiseerimisvõimaluste tuvastamine olnud raskendatud 2 Mõisted ja lühendid JVIS Järelevalve Infosüsteem MTR Majandustegevuse register TTJA e-teenuste Terviklik mikroteenustele rajatud infosüsteem, mille abil tulevikus platvorm osutatakse ja hallatakse kõiki TTJA poolt osutatavaid teenuseid MKM Majandus- ja Kommunikatsiooniministeerium MFN Mittefunktsionaalsed nõuded 1 Kokku 43 majandustegevusteadet 2 3 Analüüs Käesoleva projekti eesmärk on analüüsida turul pakutatavate protsessijuhtimise ja otsustustoe tarkvarade sobivust TTJA ärivajadustele ning koostada detailanalüüs sobivaima lahenduse kasutusele võtmiseks TTJA e-teenuste platvormil. Detailanalüüsi alusel peab olema võimalik tellida protsessijuhtimise ja otsustustoe lahenduse integreerimise arendus. Analüüsi eesmärk on leida sobivaim ja optimaalseim protsessijuhtimise ja otsustustoe tarkvara lahendus, mis täidaks TTJA ärivajadusi (vt p 7.3), oleks kasutajasõbralik ning sobiks uue arendatava e-teenuste platvormiga. Analüüs koosneb kahest etapist, eelanalüüsist ja detailanalüüsist. Lahendus peab võimaldama lisaks protsessi tehnilisele juhtimisele protsesse analüüsida ja optimiseerida. Eelanalüüsi käigus täpsustatakse funktsionaalsused ja vajadused lähtuvalt punktis 7.3 väljatoodule ning läbiviidud intervjuudele Tellijaga. Arvesse tuleb võtta, et projekti raames väljapakutav lahendus sobiks uue e-teenuste platvormi loodud ja loodavate komponentidega (Lisa 3). Arendusjärgus oleva TTJA e-teenuste platvormi arenduses on arvestatud protsessijuhtimise tarkvara kasutusele võtmise valmidusega (p 7.4.1). Lahenduste võrdlemisel tuleb analüüsida vähemalt järgnevaid aspekte: - lahenduse sobivus TTJA ärivajaduste ja eesmärkidega (p 7.3); - lahenduse kasutusmugavus (arendajad vs tavakasutaja), tugi ja koolitusvõimalused; - lahenduse integratsiooni võimalused ja ühilduvus olemasoleva TTJA e-teenuste platvormi tehnilise lahendusega (sh tuleb välja tuua erinevate alternatiivide kitsaskohad) (Lisa 3); - lahenduse funktsionaalsused ja võimalused protsesside loomisel, muutmisel, kustutamisel, analüüsimisel, optimeerimisel ning otsustustoe pakkumisel; - lahenduse skaleeritavus ja jõudlus arvestades teenuste mahu kasvuga; - lahenduse paindlikkus arvestades, et teenuste üle toomine uuele e-teenuste platvormile toimub järkjärgult; - lahenduse kasutuselevõtmise prognoositav kulu (lahenduse hankimise kulu, lahenduse kasutusele võtmisest tingitud võimalikku arendustööde kulu); - lahenduse kasutuselevõtmise prognoositav Tellija ajakulu selle juurutamisel, sealhulgas eelduslikud meeskonnarollid; - lahenduse kasutuselevõtmisega kaasnevate riskide analüüs ja nende maandamismeetmete kulu; - lahenduse kasutamise prognoositavad püsikulud lähtudes tootjapoolsetest suunistest ja väljapakutud lahenduse eripärast 5-aastase ajaperioodi jooksul arvates lahenduse kasutuselevõtmisest, sh majutus-, litsentsi-, hooldus- ja tööjõukulud. Analüüsida tuleb vähemalt kolme erinevat protsessijuhtimise ja otsustustoe tarkvara lahendust. Töövõtja pakub välja analüüsitavad protsessijuhtimise ja otsustustoe lahendused, lõplik valik lepitakse kokku koostöös Tellijaga. Eelanalüüsi teostamise metoodika on Töövõtja vaba valik ja tuleb edastada pakkumuses. Analüüsitavate lahenduste valikul tuleb arvestada, et lahenduse potentsiaalseteks kasutajateks on nii IT-haridust omavad isikud (nt tooteomanik) kui ka kasutajad (äripool), kellel puudub vastav spetsiifiline ettevalmistus (nt teenuseomanikud). Lahenduste eelanalüüsi järgselt esitatakse tulemused visuaalselt (nt tabelina) vahearuandes, kus on välja toodud täpsustatud ärivajadused, tehnilised nõuded ning eelanalüüsitud lahenduste 3 vastavus neile. Töövõtja esitab vahearuandes argumenteeritud ettepaneku sobivaima ja optimaalseima lahenduse osas. Tellija töörühm valib vahearuandes eelanalüüsitud lahenduste vahel kõige sobivaima lahenduse, millele Töövõtja koostab detailanalüüsi. Detailanalüüsi põhjal peab olema võimalik Tellijal hankida lahenduse kasutusele võtmiseks vajalikud arendustööd e-teenuste platvormil. Loodud on detailne arenduskava lahenduse realiseerimiseks e-teenuste platvormil (pilootteenus: majandustegevusteate esitamine vt p 7.2), koos hinnanguliste arendusmahtudega. Detailanalüüs peab sisaldama lahenduse funktsionaalset spetsifikatsiooni, IT arhitektuuri dokumenti, IT infrastruktuuri vajadusi, arendusvajaduste kirjeldusi lahenduse kasutusele võtmiseks, liideste kirjeldusi, andmemudeleid, üldiste kasutuslugude/protsesside/stsenaariumite kirjeldusi (sh protsessijooniseid) jms. Detailanalüüsis tuleb lisaks välja tuua hinnanguline jätkuarenduste kava (sh tellija poolsed tegevused, hinnangulised arendusmahud), mis on vajalikud protsesside juhtimise tarkvara kasutusele võtmiseks kogu loateenuse protsessil (p 7.1). Detailanalüüsis tuleb anda 5- aastase ajaperioodi püsikulude prognoos lähtudes tootjapoolsetest suunistest ja väljapakutud lahenduse eripärast (majutus-, litsentsi-, hooldus- ja tööjõukulud). Detailanalüüs peab arvestama arhitektuurile seatud kehtivaid nõudeid (p 7.4.1). Analüüsis tuleb arvestada p 7.4 väljatoodud mittefunktsionaalsete nõuetega. 4 Tööde teostamise aeg ja eeldatav maksumus Hanke tulemusena sõlmitakse hankeleping. Pakkumuse maksumus esitatakse eurodes käibemaksuta. Pakkumuses esitatud hind on lõplik ning Tellija ei aktsepteeri täiendavaid lisakulutusi. Projekti eeldatav maksumus on 25 000 eurot (km-ta). Tööde läbiviimise ajakava: - Projekti algus on hiljemalt 7 päeva peale lepingu jõustumist. - Eelanalüüs tuleb Tellijale üle anda hiljemalt 3 nädalat pärast lepingu jõustumist. - Lepingu punktis 2.1. määratletud Töö (sh detailanalüüs) peab olema Tellijale üleantud hiljemalt 2 kuud pärast lepingu jõustumist. 5 Töökorraldus Projekti eesmärkide ja ülesannete elluviimiseks moodustatakse töörühm, mille komplekteerib Tellija. Avakoosolekul lepitakse kokku nende kohtumiste ja täiendavate töögruppide ja/või töötubade töökorraldus. Avakoosoleku kutse saadab välja Tellija. Töövõtja ülesanded on töö tulemite dokumenteerimine (sh eel- ja detailanalüüs), koosolekute memode koostamine. Analüüsiga seotud dokumentatsioon on korrektselt vormistatud nii õigekeele, terminoloogia, viitamise kui tehnilise vormistuse mõttes. Dokumentatsiooni haldamiseks ja jagamiseks luuakse ligipääsud Tellija poolt määratud keskkonda. Dokumentide hoidmise struktuur, selle täiendused ja muudatused lepitakse kokku poolte vahel projekti avakohtumisel. 4 Tööde tulemina valmivad nõuded, tehniline spetsifikatsioon, juhend, raportid, arenduskavade kirjeldused, töö käigus kokkulepitud vaheetappide tulemusena valminud protokollid, memod, aruanded ja muu oluline dokumentatsioon antakse üle vastavalt Tellija antud juhistele. 6 Pakkumuse esitamine Pakkuja esitab pakkumuses: Tööde kirjelduse koos ajakavaga, kuidas ülesandeid planeeritakse lahendada ja nõutud tulemused saavutada. Projektiplaani kavandis tuleb välja tuua tegevused, tulem(id), ajakava, vaheetapid, orienteeruv ajakulu, kuidas on hallatud riske, tagatud tulemuste kvaliteet ja ootused Tellijale. Pakkumisega tuleb esitada vähemalt kolme võrreldava lahenduse nimekiri. Võrreldavad tooted peavad vastama ärivajadustele (p 7.3). Täiendavalt tuleb pakkumuses põhjendada, miks on otsustatud võrrelda konkreetseid lahendusi. 7 Täiendavad materjalid 7.1 TTJA standardiseeritud loataotluse protsess (Lisa 4) 7.2 Majandustegevusteate taotluse esitamise protsess (Lisa 5) 5 7.3 Kasutajagruppide ootused ja vajadused protsessijuhtimise lahenduse kasutamisele uuel e-teenuste platvormil (visioon) 2 Allpool kirjeldatud ootused ja vajadused ei ole lõplikud ning täpsustakse detailanalüüsi käigus. 1) Teenuse kvaliteedimõõdikute monitooring ja analüüs (teenuseomanik) a) Kasutaja peab saama vaadata osutatud teenuste koguarvu ja keskmist menetlusaega. b) Kasutaja peab saama määrata ajavahemiku, et näha sellel ajavahemikul osutatud teenuste arvu ja keskmist menetlusaega. c) Kasutaja peab saama filtreerida osutatud teenuste arvu ja keskmist menetlusaega vastavalt teenuse liigile. d) Kasutaja peab saama vaadata menetluse aega. e) Kasutaja pea saama vaadata igas menetlusetapis kulunud aega. f) Kasutaja peab saama vaadata jooksvate menetluste järge. g) Kasutajal peal olema võimalik määrata protsessi sammudele etalonväärtuseid. h) Kasutaja peab saama teenuse põhisel vaadata keskmist menetlusetappide läbimiste arvu. i) Kasutaja peab saama vaadata statistikat menetlusetappide läbimiste koguarvu kohta. j) Kasutaja peab saama juhtumipõhiselt vaadata menetlusetappide läbimiste arvu. k) Kasutaja peab saama luua raporteid. 2) Teenuse intsidentide haldus (kasutajatugi, tooteomanik) a) Kasutaja peab saama vaadata, millises protsessi etapis antud protsessi instants on selleks, et saada informatsiooni võimalikust veakohast. b) Kasutaja peab saama hallata protsessi instantsi parameetreid selleks, et teha veaotsingut ning lahendada võimalik viga. c) Kasutajal peab olema ülevaade jooksvatest protsessidest ja nende konkreetsetest seisudest, et saada informatsiooni süsteemi hetkeolukorrast. d) Kasutaja peab saama protsessi samme tagasi võtta selleks, et lahendada võimalik viga. 3) Teenuste seadistamist (tooteomanik, teenuseomanik) a) Lahendus peab võimaldama protsesside versioneerimist. b) Lahendus peab võimaldama ärireeglite kirjeldamist ja haldamist (DMN) (loomine, muutmine, kustutamine), c) Lahendus peab võimaldama BPMN kujul protsesside kirjeldamist ja haldamist selleks, et võimaldada süsteemist arusaamist üldlevinud notatsiooni abil. 4) Lahendus peab sisaldama otsustusmootorit. a) Lahendus peab võimaldama otsustustoe protsesse luua, hallata ning käivitada. 7.4 Mittefunktsionaalsed ja tehnilised nõuded 7.4.1 TTJA e-teenuste platvormi arhitektuur ja tehnilised nõuded sisalduvad Lisas 3 – arhitektuur. 7.4.2 KeMITi mittefunktsionaalsed nõuded: 2 Põhinevad 2021. aastal teostatud „TTJA teenuste kasutusmugavuse ja ärianalüüsil“ ning 2022. aastal toimunud teenusomanike töötubadel. 6 https://www.kemit.ee/sites/kemit/files/2023- 04/KeMIT%20Mittefunktsionaalsed%20n%C3%B5uded%2025.04.2023.pdf 7 Lisa 2 – Hankelepingu projekt TÖÖVÕTULEPING nr .. Tarbijakaitse ja Tehnilise Järelevalve Amet, registrikood 70003218, asukoht Endla 10a, Tallinn 10122, mida esindab peadirektor Kristi Talving (edaspidi „Tellija“) ja …, registrikood …, asukoht …, mida põhikirja/volikirja alusel esindab juhatuse liige/… … (edaspidi „Töövõtja“), keda edaspidi nimetatakse üheskoos kui „Pooled“ ja eraldi kui „Pool“, võttes arvesse, et: - Tellija korraldas väikehanke „Tarbijakaitse ja Tehnilise Järelevalve Ameti protsessijuhtimise ja otsustustoe lahenduse analüüs“; - Tellija tunnistas hankemenetluses pp.kk.aaaa protokolliga nr … edukaks Töövõtja pakkumuse, sõlmisid käesoleva töövõtulepingu (edaspidi „Leping“) alljärgnevas: 1. Lepingu dokumendid 1.1. Lepingu dokumendid koosnevad käesolevast Lepingust, Lepingu lisadest ning Lepingu võimalikest muudatustest, milles lepitakse kokku pärast Lepingu allkirjastamist. 1.2. Lepingu allkirjastamise hetkel on sellel järgnevad lisad: 1.2.1. Lisa 1 – Tellija pp.kk.aaaa pakkumuse kutse; 1.2.2. Lisa 2 – Töövõtja pp.kk.aaaa pakkumus. 2. Lepingu objekt 2.1. Lepinguga kohustub Töövõtja koostama Tellijale analüüsi, mis vastab pakkumuse kutse lisas 1 toodud tingimusele, ja esitama selle Tellija poolt määratud keskkonna kaudu (edaspidi "Töö"). Töö maht ja ulatus on määratletud Lisas 2. 2.2. Töö alla kuuluvad kõik Lepingu täitmiseks vajalikud materjalid, toimingud ja tööde tegemine või teenuste osutamine, mida ei ole eraldi nimetatud, kuid mis oma olemuselt kuuluvad Töö hulka ning on vajalikud lepinguliste kohustuste nõuetekohaseks täitmiseks. 3. Töö läbiviimise tingimused 3.1. Tellija: 3.1.1. määrab keskkonna, mille kaudu Töövõtja peab analüüsi esitama, ja tagab Töövõtjale ligipääsu keskkonnale hiljemalt 3 tööpäeva jooksul alates Lepingu jõustumisest; 3.1.2. esitab Töövõtjale Töö teostamiseks vajalikud andmed ja informatsiooni; 3.1.3. teavitab Töövõtjat viivitamatult kirjalikku taasesitamist võimaldavas vormis kõikidest asjaoludest, mis võivad tingida Töös muudatuste tegemise; 3.1.4. võib vajadusel pöörduda kolmanda isiku poole sõltumatu eksperthinnangu saamiseks Töö kvaliteedi kohta. 3.2. Töövõtja: 3.2.1. esitab Töö üldlevinud dokumendi formaadis punktis 4.1 sätestatud tähtajaks Tellija kontaktisikule; 3.2.2. teostab Töö professionaalselt ja nõuetekohaselt vastavalt Lepingu tingimustele, lähtudes Tellija poolt esitatud informatsioonist, juhistest ning lähteülesandest; 3.2.3. lubab Tellijal kontrollida Töö teostamise käiku ja esitab Tellija nõudmisel Töö teostamise kohta teavet; 3.2.4. kasutab Töö teostamisel oma töömeetodeid ja -vahendeid; Lisa 2 – Hankelepingu projekt 3.2.5. teavitab Tellijat viivitamatult võimalikust viivitusest Töö teostamisel, samuti muudest asjaoludest, mis võivad mõjutada või takistada Lepingus sätestatud kohustuste täitmist või õiguste realiseerimist; 3.2.6. teostab Tellija poolt sätestatud tähtajaks Tellija poolt nõutud parandused või esitab uue Töö, kui Töö või selle osa ei vasta Lepingule ning Tellija on esitanud vastavasisulised pretensioonid vastavalt punktile 4.3. 4. Töö üleandmine ja vastuvõtmine 4.1. Töö Tellijale üleandmise tähtaeg on pp.kk.2024.a. Töö antakse üle Töövõtja poolt allkirjastatud üleandmise-vastuvõtmise aktiga. 4.2. Tellija vaatab Töövõtja poolt esitatud Töö üle 5 tööpäeva jooksul arvates Töö esitamisest Tellijale. Kui Töö vastab käesoleva Lepingu tingimustele, võtab Tellija Töö vastu, allkirjastab vastavasisulise üleandmise-vastuvõtmise akti ning teavitab sellest e-kirja teel Töövõtja kontaktisikut. Juhul, kui Tellija ei ole esitanud Töövõtjale kirjalikke pretensioone 5 tööpäeva jooksul arvates Töö Tellijale esitamise päevast, on Töövõtja õigustatud lugema Töö vastuvõetuks. 4.3. Juhul, kui Tellijal on pretensioone Töö kvaliteedi või Lepingu tingimustele vastavuse osas, teavitab ta sellest Töövõtjat e-kirja teel ning osutab konkreetsele puudusele Töös ja määrab mõistliku tähtaja puuduse kõrvaldamiseks või uue, Lepingu tingimustele vastava Töö esitamiseks. Pärast puuduste ja vigade likvideerimist koostatakse üleandmise-vastuvõtmise akt Poolte vahel vastavalt punktile 4.2. 4.4. Poolte poolt allkirjastatud Töö üleandmise-vastuvõtmise akt on aluseks Töövõtjale arve esitamiseks. 5. Tasu suurus, väljamaksmise tähtaeg ja kord 5.1. Tellija tasub Töövõtjale Lepingu tingimustele vastava Töö eest tasu summas … eurot, millele lisandub käibemaks (edaspidi „Tasu“). 5.2. Tellija tasub Töö eest pärast selle vastuvõtmist hiljemalt 21 kalendripäeva jooksul Töövõtja esitatud e-arve kättesaamisest arvates. Töövõtja esitab arve masintöödeldaval kujul vastavalt kehtivale e-arve standardile. Arvele märgitakse Tellija dokumendiregistris registreeritud Lepingu number ja Lepingus nimetatud Tellija kontaktisik. 5.3. Punktis 5.1. sätestatud tasu on ainus Töövõtja tasu käesoleva Lepingu täitmise eest. Tellija ei aktsepteeri lisakulutusi, mille osas Pooled ei ole eelnevalt kirjalikult kokku leppinud. 6. Konfidentsiaalsus ja isikuandmete töötlemine 6.1. Pooled on kohustatud Lepingu kehtivuse ajal ning tähtajatult pärast Lepingu lõppemist mitte avaldama üksteist puudutavat ega Lepingu täitmise käigus saadud konfidentsiaalset infot. Konfidentsiaalse info all mõistavad Pooled teineteisele antud igasugust infot, sh ärisaladust, intellektuaalset omandit, isikuandmeid, mis ei ole kolmandatele isikutele üldises korras kättesaadav, samuti infot, mida nad on saanud kolmandatelt isikutelt, kui Pool teab või peaks teadma, et info on konfidentsiaalne. Kahtluse korral eeldatakse informatsiooni konfidentsiaalsust. 6.2. Pooled ei loe konfidentsiaalseks infot, mis on avalikustatud juba enne selle andmist teisele Poolele või mis avalikustatakse Pooltest sõltumatult, välja arvatud juhul, kui Poolel on võimalik avalikustamist ära hoida. 6.3. Töövõtja kohustub kasutama konfidentsiaalset informatsiooni üksnes Lepingu kehtivuse ajal. Pool tohib konfidentsiaalse informatsiooniga tutvumist võimaldada ainult sellistele isikutele, kellele konfidentsiaalse informatsiooni avaldamine on vajalik Lepingu täitmiseks ja kellega on sõlmitud konfidentsiaalsusleping. Lisa 2 – Hankelepingu projekt 6.4. Pooled toimivad isikuandmete käsitlemisel vastavalt isikuandmete kaitse üldmäärusele ja isikuandmete kaitse seadusele. Pooled loevad isikuandmeteks mistahes andmed tuvastatud või tuvastatava füüsilise isiku kohta, sõltumata sellest, millisel kujul või millises vormis need andmed on. Pooled kohustuvad kohaldama asjakohaseid infoturbe meetmeid, sh isikuandmete kaitse üldmääruse artiklis 32 sätestatud isikuandmete turvalisuse tagamise meetmeid, tagamaks konfidentsiaalse info kaitse. Vastavasisulise nõude saamisel teeb Pool mõistliku aja jooksul teisele Poolele kättesaadavaks kogu teabe, mis on vajalik tõendamaks asjakohaste tehniliste ja korralduslike meetmete rakendamist. 7. Intellektuaalne omand 7.1. Töövõtja poolt Töö teostamise käigus loodust tulenev intellektuaalne omand kuulub Tellijale. Kui Töövõtja annab Tellijale üle materjalid, mis ei ole Töövõtja poolt loodud, tagab Töövõtja selliste materjalide osas vajalikud intellektuaalomandi õigused mis võimaldavad Tellijal Tööd kasutada. 7.2. Töövõtja loovutab Tellijale kõik Tööga seonduvad varalised õigused ning annab Tellijale ainulitsentsi Töö teostamise käigus loodu kasutamiseks all-litsentsi andmise õigusega kogu autoriõiguste kehtivuse ajaks, kasutusvajaduse ära langemiseni ning ilma territoriaalsete piiranguteta. 7.3. Töövõtja kinnitab, et tal on õigus Tellijale varalised õigused üle anda ning temale teadaolevalt ei rikuta ühegi kolmanda isiku õigusi. Juhul, kui kolmas isik esitab Tellijale autoriõigustega seonduvaid nõudmisi, hüvitab Töövõtja Tellijale kõik sellistest nõudmistest tulenevad kahjud ja kulud. 7.4. Tasu autoriõiguste eest sisaldub punktis 5.1 nimetatud tasus. 8. Vastutus 8.1. Lepingust tulenevate kohustuste täitmata jätmisega või mittenõuetekohase täitmisega teisele Poolele tekitatud otsese varalise kahju hüvitab kahju tekitanud Pool teise Poole nõudel. 8.2. Lepingust tulenevate rahaliste kohustuste täitmisega viivitamise korral on Poolel õigus nõuda kohustust rikkunud Poolelt viivist iga viivitatud päeva eest tähtaegselt tasumata summast 0,15% päevas. 8.3. Juhul, kui Tellijast mitteolenevatel põhjustel ei esita Töövõtja Tööd tähtaegselt, on Tellijal õigus nõuda Töövõtjalt leppetrahvi 0,5% Tasust iga viivitatud kalendripäeva eest. 8.4. Kui Lepingus ei ole sätestatud teisiti, on teiste mitterahaliste kohustuste rikkumise korral teisel Poolel õigus nõuda leppetrahvi kuni 20% Tasust. 8.5. Kui Pool rikub Lepingu p-st 5 ja/või 6 tulenevat kohustust, on teisel Poolel õigus nõuda temalt leppetrahvi 500 eurot iga rikkumise kohta. 8.6. Tellijal on õigus leppetrahvi summa tasaarvestada Töövõtjale maksmisele kuuluva tasuga. 8.7. Leppetrahvi nõudmine ei välista Tellija õigust kasutada teisi seadusega ettenähtud õiguskaitsevahendeid. Lisaks leppetrahvi tasumisele on Tellijal õigus nõuda Töövõtjalt Lepingu täitmist ja/või kahju hüvitamist osas, mida leppetrahv ei katnud. Leppetrahvi maksmine ja kahju hüvitamine ei vabasta Töövõtjat oma lepinguliste kohustuste edasisest täitmisest. 8.8. Leppetrahvinõue või teade leppetrahvinõude esitamise kavatsuse kohta tuleb esitada 2 nädala jooksul kohustuse rikkumise avastamisest arvates. Leppetrahvid ja viivised tuleb tasuda 14 päeva jooksul arvates vastava nõude saamisest. 9. Poolte kontaktisikud ja teabe vahetamine 9.1. Tellija kontaktisik Lepinguga seotud küsimustes, kellel on muu hulgas õigus kontrollida Töö täitmist ja võtta vastu Töö, on: Arthur Allas, telefon +372 620 1757 e-post: [email protected]. 9.2. Töövõtja kontaktisik Lepinguga seotud küsimustes, kellel on muu hulgas õigus anda üle Töö, on: …, telefon …, e-post: …. Lisa 2 – Hankelepingu projekt 9.3. Töökorralduslikes küsimustes juhinduvad Pooled muu hulgas Lisa 1 Lisa 1 punktis 5 sätestatust. 9.4. Informatiivsed teated võib edastada telefoni teel. Juhul, kui teate edastamisel on õiguslikud tagajärjed, peab teade olema edastatud kirjalikult Lepingus nimetatud postiaadressile või Poole esindaja poolt allkirjastatuna Lepingus nimetatud e-posti aadressile. 9.5. Lepingu Pool on kohustatud kätte saadud ning vastust eeldavale teatele vastama 3 tööpäeva jooksul selle saatmisest arvates, kui teates ei ole vastamiseks ette nähtud pikemat tähtaega. 9.6. Poole teade loetakse teise Poole poolt: 9.6.1. samal päeval kätte saaduks, kui teade on saadetud elektroonilisel teel kontaktisiku e-posti aadressile tööpäeval enne kella 16.00; 9.6.2. järgmisel tööpäeval, kui teade on saadetud elektroonilisel teel kontaktisiku e-posti aadressile tööpäeval pärast kella 16.00. 10. Lepingu jõustumine, muutmine ja lõpetamine 10.1. Leping jõustub selle viimase Poole poolt allkirjastamise päeval ja kehtib kuni Poolte poolt lepinguliste kohustuste nõuetekohase täitmiseni või Lepingu ennetähtaegse lõpetamiseni. 10.2. Lepingut võib muuta üksnes Poolte kirjalikul kokkuleppel ja muudatused vormistatakse Lepingu lisana. Muudatused jõustuvad pärast viimase Poole poolt allkirjastamist või Poolte poolt muudatuses märgitud tähtajal. Lepingu muutmisel järgivad Pooled riigihangete seaduse §-s 123 sätestatud tingimusi. 10.3. Poolte kontaktandmete muutumisest tuleb teist Poolt teavitada mõistliku aja jooksul. Kontaktandmete muutmist ei loeta Lepingu muutmiseks punkti 10.2 mõistes. 10.4. Pooltel on õigus Leping erakorraliselt ilma etteteatamistähtajata üles öelda juhul, kui teine Pool rikub oluliselt Lepingust tulenevaid kohustusi, muu hulgas juhul, kui: 10.4.1. Töövõtja ei ole Lepingu tingimustele mittevastava Töö esitamise korral Töö puudust kõrvaldanud või esitanud uut, Lepingule vastavat Tööd punkti 4.3 kohaselt nimetatud tähtaja jooksul; 10.4.2. Tellija on viivituses punkti 5.2 kohaselt esitatud arve maksmisega vähemalt 30 (kolmkümmend) kalendripäeva; 10.4.3. esineb riigihangete seaduse §-s 124 nimetatud alus. 11. Lõppsätted 11.1. Pooled ei tohi Lepingust tulenevaid õigusi ja kohustusi kolmandale isikule üle anda ilma teise Poole eelneva kirjaliku nõusolekuta. 11.2. Lepingust tulenevad vaidlused lahendatakse läbirääkimiste teel. Kokkuleppe mittesaavutamisel lahendatakse vaidlus Eesti Vabariigi õigusaktidega sätestatud korras. 11.3. Lepinguga reguleerimata küsimustes juhinduvad pooled Eesti Vabariigis kehtivatest õigusaktidest. 11.4. Poolte esindajad kinnitavad, et neil on kõik õigused ja piisavad volitused sõlmida Leping esindatava nimel kooskõlas õigusaktidega ja neile teadaolevalt ei esine ühtegi takistust Lepinguga võetud ja selles sätestatud kohustuste täitmiseks. 11.5. Lepingu sisu on avalik teave. Tellija Töövõtja (allkirjastatud digitaalselt) (allkirjastatud digitaalselt) Kristi Talving …. peadirektor … Lisa 2 – Hankelepingu projekt
Allikas: Tarbijakaitse ja Tehnilise Järelevalve Amet dokumendiregister →
dokumendiregister.eeAsutusedEesti avalike dokumendiregistrite otsing · nimistu.ee andmetel