**Monoliitsüsteem** on kontekstuaalne mõiste, mida kasutatakse IT süsteemides nii riist- kui ka tarkvara arhitektuuri kontekstis.

Monoliitarhitektuuris täidab monoliitsüsteem kõiki ülesandeid ehk see on vaadeldav ühtse tervikuna.

Näiteks tarkvararakendus, mis koosneb kolmest põhikomponendist: kasutajaliidesest (UI), andmebaasist ja serveri rollist mis töötleb infot. Seega, kuna kõik komponendid on paigutatud kokku ühtseks süsteemiks ning on mõeldud täidetava ülesande täitmiseks, peavad kõik komponendid töötama tervikuna ning kogu süsteemi arhitektuur on vaja mõelda välja otsast lõpuni. Sellest tulenevalt on mõningateks tunnusteks näiteks isoleeritus, algse arenduse lihtsus, kuid hilisem paindumatus, keerukus edasiarendustel ja probleemid süsteemi skaleeritavuses.

Näiteks riistvara korral on monoliitsüsteemis erinevad komponendid integreeritud ühtsesse integraalskeemi.

### Sissejuhatus

Sõna "monoliit" on tulnud vanakreeka keelest, kus sõna *monos* tähendas üksikut ja *lithos* kivi. Seega sõna *monolithos* all mõeldi ühe suurt kiviplokki mis etendas tavaliselt kas sammast või monumenti. 
Peatselt võtsid prantslased kasutusele muganduse *monolithe* ning inglise keeles hakati kasutama 19. sajandil sõna *monolith*. Eestis leidis sõna *monoliit]]* suuremat kasutamist geoloogide seas 1980. aasta lõpus, samuti on mõiste [[monoliit (arheoloogia)|monoliit] tarvitusel arheoloogias.
Tänaseks kasutatakse ka eelpool kirjeldatud sõna laialdaselt mitmete IT süsteemide kirjeldamisel. Siiski on IT valdkonnas väikene varieeruv käsitletavas kontekstis ning üldisema tähenduse saamiseks, tuleks monoliitsüsteemide kirjeldamisel läheneda arhitektuurilisest lähenemisest.

### Monoliitne tarkvaraarhitektuur

Monoliitses IT arhitektuuris on elemendid omavahel tihedalt seotud, mis tähendab, et tegemist on bimodulaarsete süsteemide (agiilsete süsteemide) lähenemisviisi vastandiga. Sellest tulenevalt võiks lihtsustatult öelda, et monoliitnesüsteem koosneb ühest tervikust, mis sisaldab kõiki tööks vajalikke koostisosi. Näiteks monoliitnerakenduse korral on programmide komponendid üksteisega tihedalt sidestatud ja üksteisest sõltuvad ega kasutata lõdvalt sidustatud lähenemist, nii nagu seda tehakse modulaarsete rakenduste korral.

### Valesti mõistmine

Võidakse arvata, et monoliitarhitektuur võib sõltuda ühest suurest süsteemist või ühest suurest arendusest ja ühest suurest andmebaasist, kuhu ühendatakse klientseadmeid. Tegelikult monoliitsüsteem ei tähenda seda. Monoliitsüsteemides võib olla kasutusel mitu serverit ja ka mitu andmebaasi, kuid nad on kõik ühtse tervikusüsteemi osad.

Monoliitse tarkvarasüsteemi plussid ja miinused
-----------------------------------------------

**Plussid:**

* Kasutuselevõtt on tänu terviklikkusele kiirem.
* Arhitektuuris saab teatud osades teha kiiresti muudatusi.
* Peamiselt kasutatakse ühtsemat arhitektuuri ja arenduskeelt.
* Monoliitseid süsteeme on kerge siluda ja testida, sest nad võivad osutada paremini loetavamaks.
* Monoliitsüsteemides võib kasutajate õiguste andmine olla arusaadavam ja lihtsam (seda nii lõppkasutaja ja süsteemilooja kui ka administraatori jt seisukohalt).
* Hea arhitektuur väiksemale arendusmeeskonnale.
* Süsteem on kiirem, sest päringud ei tehta monoliitsüsteemist väljapoole.
* Täielik kontroll terve süsteemi ulatuses.
* Väiksem sõltuvus kolmandaosapoolte süsteemi poolt.

**Miinused:**

* Kui süsteemiga hakkab tegeleme uus inimene (nt arendaja) siis peab ta praktiliselt kogu süsteemi endale selgeks tegema, sest süsteemi tuleb vaadelda kui tervikut.
* Keeruline arendada sest kõik süsteemiosad peavad suutma üksteisega suhelda.
* Kui üks süsteemi osa (server) langeb tööst välja. siis on arvatavalt terve süsteem rivist väljas (kui ei ole loodud eraldi veatolerantsiga süsteeme).
* Kogu süsteemi skaleeruvus toimub horisontaalselt.
* Ei ole võimalik paralleelselt tööd teha tarkvaraarendajatel, testijatel ja lõppkasutajatel.
* Samaaegne koostöö süsteemi arendajatel ja testijatel on võimatu mis tähendab, et ka vigade leidmine on aeglasem.
* Paindumatu, sest ei saa kasutada erinevaid programmeerimiskeeli.

Monoliitse tarkvarasüsteemi tänapäev ja tulevik
-----------------------------------------------

Tänaseks on tugev trend mikroteenuste baasil põhinevate arhitektuuride evitamisel ning tihti võrreldakse neid monoliitsüsteemidega. Samuti on väga tugev trend ka monoliitsüsteemide "lahtilammutamisel" mikroteenusteks ning vastandlike seisukohtade võtmisel nende kahe täiesti erineva paradigma vahel. Sellest tulenevalt kasutatakse mõistet "monoliit" üha enam, kui halvustavat väljendit, nii nagu ka seda tehakse ka pärandsüsteemde korral (*legacy*). Monoliiti tuleks aga pidada arhitektuuriliseks stiiliks ja arendus mustriks. Kuna stiilid ja mustrid peavad sobituma vajaduspõhiselt siis on monoliitsüsteemidel olema alati õigustatud koht IT-süsteemide arhitektuuris.

Viited
------

1. ↑  Rod Stephens. *Beginning Software Engineering*. 02.03.2015: John Wiley & Sons. Lk 94.`{{raamatuviide}}`: CS1 hooldus: koht sisaldab numbrit (link)
2. ↑  "monolith". Vaadatud 10.01.2019.
3. ↑  Kristel Kajak (2014). "Monoliidid Eesti arheoloogias Siksälä kalme näitel" (PDF). Vaadatud 10.01.2019.
4. ↑  "monolithic architecture". Aprill 2016. Vaadatud 10.01.2019.
5. 1 2 3  Tal Doron (25.07.2015). "Why We Need a New Breed of Hybrid Microservices Platform". *DZone*. Vaadatud 10.012019. `{{netiviide}}`: kontrolli kuupäeva väärtust: `|vaadatud=` (juhend)
6. 1 2 3 4  Gurpreet Singh (DZone). "To Micro or Mono – Pros and Cons of Both Service Architectures". Originaali arhiivikoopia seisuga 14.01.2019. Vaadatud 10.01.2019. `{{netiviide}}`: kontrolli kuupäeva väärtust: `|aeg=` (juhend)
7. 1 2 3 4  Jake Lumetta (10.04.2018). "Monolith VS Microservices: Which is the best option for you?". Vaadatud 10.01.2019.
8. ↑  Herbert Dowalil (01.04.2018). "Monoliths, Microservices and Modularity". *DZone*. Vaadatud 10.01.2019.
9. ↑  "monolithic architecture". 04.016. Vaadatud 10.01.2019. `{{netiviide}}`: kontrolli kuupäeva väärtust: `|aeg=` (juhend)