Arkkitehtuuri - espoon-voltti/evaka GitHub Wiki
Yleistä
eVaka on varhaiskasvatuksen toiminnanohjausjärjestelmä, jolla voidaan hallita koko varhaiskasvatuksen elinkaari aina varhaiskasvatukseen hakeutumisesta operatiiviseen toimintaan ja tietojen lakisääteiseen säilyttämiseen asti.
Korkean tason arkkitehtuuri
eVaka muodostuu seuraavista osista:
- Käyttöliittymät
- Taustapalvelut
- Tietokannat ja tiedostojen varastointi
- Integraatiot
Käyttöliittymät
Käyttöliittymiä on kolme: kuntalaisen käyttöliittymä, henkilökunnan työpöytäkäyttöliittymä sekä henkilökunnan mobiilikäyttöliittymä. Käyttöliittymät ovat selainpohjaisia. Henkilökunnan mobiilikäyttöliittymä on PWA-sovellus, ja tukee mm. notifikaatioita.
Käyttöliittymät on toteutettu TypeScriptillä ja Reactilla ja bundlataan webpackilla. Muut kirjastoriippuvuudet sekä tuetut selainversiot näkee package.json-tiedostosta.
Taustapalvelut
Taustapalveluita on kolme.
proxy
Etummaisena on proxy
, joka jakelee staattiset tiedostot (käyttöliittymät), ja välittää muut pyynnöt eteenpäin apigw
:
lle. proxy
on toteutettu nginx:llä.
apigw
apigw
vastaa sessionhallinnasta, ja tekee myös alustavan pyyntöjen suodatuksen sessiotyypin perusteella, minkä jälkeen
se välittää pyynnöt service
:lle. apigw
on toteutettu TypeScriptillä, Expressillä ja NodeJS:llä, ja muut
kirjastoriippuvuudet
näkee package.json-tiedostosta.
apigw
tallentaa sessionhallinnan tarvitsemat tiedot Redis-tietokantaan. Se käyttää tunnistautumiseen
Suomi.fi-tunnistusta ja karttatoiminnallisuuteen Digitransit-rajapintaa.
service
service
toteuttaa eVakan bisneslogikaan, ja se on toteutettu Kotlinilla ja Spring Bootilla. Muut kirjastoriippuvuudet
näkee build.gradle.kts-tiedostosta.
service
sisältää tausta-ajomekanismin, jota käytetään pitkäkestoisten ja ajastettujen tehtävien vikasietoiseen
suorittamiseen.
service
tallentaa dataa PostgreSQL-tietokantaan ja tiedostoja S3:een. Sähköpostin lähettämiseen käytetään Amazon SES:
iä. service
myös integroituu useaan ulkopuoliseen järjestelmään, ks. Integraatiot.
Integraatiot
eVaka integroituu moniin muihin järjestelmiin.
- Väestötietojärjestelmä (liityntäpalvelimen kautta)
- Suomi.fi-tunnistus
- Suomi.fi-viestit
- Digitransit
- Varda
- Koski
- Laskutus
- Palvelusetelimaksatus
- Työvuorosuunnittelu
- Ruokapalvelu
- Arkistointi (tulossa)
Osan integraatioista, kuten laskutus ja palvelustelimaksatus, voi toteuttaa eVakan ulkopuolisella koodilla käyttäen Springin dependency injection -mekanismia. Lähtökohtaisesti eVaka on aina integraatioissa kutsuva pää, joitain harvoja poikkeuksia lukuunottamatta.
Monitorointi
eVaka tuottaa käyttölokeja, audit-lokeja sekä OpenTracing/OpenTelemetry-dataa. Käyttöliittymät sisältävät mahdollisuuden lähettää virheitä Sentryyn.
Projektin rakenne
Kaikki projektin lähdekoodi on GitHubin evaka-projektissa. Koodissa olevat kuntakohtaisesti toteutettavat integraatiot sekä konfiguraatio ovat Espoon kaupungille räätälöityjä, ja muut kunnat ovat toteuttaneet niistä osan uudelleen.
Projektin pilvi-infrastruktuuria ei ole kuvattu lähdekoodin yhteydessä, vaan se on jokaisen eVakaa käyttävän tahon vastuulla.