Pilvepõhine arvutus

**Pilvepõhine arvutus** (ingl *cloud native computing*) on paradigma, mida edendab Cloud Native Computing Foundation (CNCF), eesmärgiga pakkuda viisi skaleeritavate rakenduste loomiseks ja käitamiseks tänapäevastes, dünaamilistes pilvekeskkondades. Selle paradigma järgi loodud rakendusi nimetatakse pilvepõhisteks rakendusteks. Need rakendused on kavandatud kasutama täiel määral pilveplatvormide pakutavat mastaabitavust (kohanemist kõrge koormusega), elastsust (arvutusressursside kasutuse vähendamist või suurendamist vastavalt vajadusele) ning töökindlust (vigade sujuvat käsitlemist). Selliste rakenduste arendamise tava on tuntud kui pilvepõhiste rakenduste arendus (ingl *cloud native application development*) ning seda iseloomustab spetsiifiline kultuur ja tehnoloogiad, mis võimaldasid seda paradigma muutust ning lõid eeldused rakenduste väljatöötamiseks just selliste omadustega.

## Tehnoloogiad, mis võimaldavad pilvepõhist arvutust

### Üleminek monoliitsetest rakendustest mikroteenuseni
Võib tekkida eksiarvamus, et iga pilves töötav rakendus on pilvepõhine. Tegelikkuses ei vasta kõik arhitektuuristiilid pilvepõhise rakenduse nõuetele, ja varem loodud monoliitsed rakendused on üks näide neist. Monoliitses rakenduses on kõik rakenduse komponendid tihedalt seotud ja neid juurutatakse ühtse tervikuna. See põhjustab mitmeid puuduseid:

* **Piiratud skaleeritavus:** Monoliitseid rakendusi on keeruline skaleerida, sest skaleerimiseks tuleb skaleerida kogu rakendus, isegi kui ainult väike osa sellest kogeb suurt koormust.
* **Vähene vastupidavus:** Monoliitsed rakendused on rikete suhtes vähem vastupidavad, kuna ühe komponendi rike võib kogu rakenduse teovõimetuks ajada.
* **Aeglased arendustsüklid:** Monoliitsetel rakendustel on pikad arendustsüklid, sest arendajate muudatused kipuvad omavahel konflikti minema ja ühe komponendi muutmine võib nõuda täiendusi ka mitmes teises kohas.

Mikroteenuste arhitektuur lahendab neid probleeme, jagades rakenduse loogika väiksemateks mooduliteks. See tagab lühema ehitusaja, kiirema juurutuse ja parema moodulipõhise skaleeritavuse. Lisaks on sel moel arendatud rakendustel suurem autonoomia, mistõttu on eri meeskondadel hõlpsam keskenduda konkreetsetele mikroteenustele. 

### Konteinerid
Konteinerid on porditavad ja kergekaalulised täitmisüksused, mis kapseldavad rakendust koos kõigi selle sõltuvustega. Sõltuvuste hulka kuuluvad nii rakenduse kood, kui ka käituskeskkond, süsteemitööriistad ja teegid. Selline kapseldamine eraldab rakendust ning selle sõltuvusi alustaristust, võimaldades konteineril töötada igal süsteemil, kus on paigaldatud ühilduv konteinerite mootor. Konteinerite eraldamine ja kergekaalulisus lahendab mitmeid pilvepõhise rakenduse vajadusi, pakkudes muu hulgas kordistavat juurutamist, mis omakorda lihtsustab silumist ning tõrkeotsingut. Lisaks võimaldab konteineripõhine lahendus hõlpsat skaleerimist, luues või eemaldades vajadusel konteinereid, suurendades seekaudu süsteemi tõhusust.

### Orkestreerimine
Kuigi konteinerid vähel hulgal on hõlpsasti hallatavad, rakendused — eriti mikroteenustel põhinevad — siiski võivad vajada sadu või koguni tuhandeid konteinereid. Sellise arvu konteinereid käsitsi hallata, nende tervist tagada ning neid vajaduspõhiselt lisada või eemaldada on keeruline. Konteinerite orkestreerimine lahendab need probleemid, võttes üle konteinerite halduse, skaleerimise ja juurutamise automatiseerimise.

Konteinerite orkestreerija pakub keskset platvormi konteineripõhiste rakenduste haldamiseks. See võimaldab arendajatel deklaratiivses vormis määrata rakenduse soovitud oleku: mitu konteinerit igast tüübist peab töötama, millistesse keskkondadesse need jaotada ning kuidas konteinerid omavahel ühenduvad. Orkestreerija ülesanne on seejärel tagada, et rakenduse tegelik olek vastab soovitud olekule. Näiteks Kubernetes (nimi tuleneb vanakreeka sõnast 'tüürimees'), üks populaarsemaid orkestraatoreid, võimaldab tagada tõrkekindlust ja mastaabitavust replitseerimise kaudu, teha ilma seisakuta (ingl *zero downtime*) uuendusi, horisontaaselt ja dünaamiliselt mastaapida rakendusi ning tagada, et kriitilised protsessid jooksevad igal arvutussõlmel.

## Pilvepõhise lahenduse tasuvus
Pilvetehnoloogia pakub märkimisväärseid eeliseid nii kulutõhususe kui ka ressursikasutuse valdkonnas. Erinevalt traditsioonilistest omatarbelahendustest ei nõua see esialgseid investeeringuid riistvarasse ega andmekeskustesse, vähendades nii rahalisi takistusi kui ka turule tarnimise aega. Pilveplatvormide elastsus võimaldab ressursse dünaamiliselt jaotada, vältides nii ülemäärase kui ka ebapiisava võimekuse riske. Tasupõhise (ingl *pay-as-you-go*) hinnamudeli tõttu maksavad kasutajad vaid tegelikult kasutatavate ressursside eest, vältides kulusid ilma tööta seisvale taristule. Need tegurid tagavad kõrgema investeeringute tootluse kui omatarbelahendused (ingl *[[:en:On-premises_software|on-prem]]*), ja see erinevus vaid kasvab.

## Pilvepõhise arvutuse raskused
Pilvepõhine lahendus toob mitte ainult eelistusi, aga ka täiendavaid probleeme eriti rakenduste turvalisuse ja arhitektuurilise keerukuse osas.

Pilverakendused on vastuvõtlikud mitmesugustele turvariskidele, muu hulgas vigastele konfiguratsioonidele, volitamata juurdepääsule ja mitme kasutajaga (ingl *multi-tenant*) arhitektuuride haavatavustele. Mõned rünnakud võivad ära kasutada ka pilvetehnoloogia elastsust: nn „Denial-of-Wallet“ pidevalt ülekoormab pilvepõhist rakendust ning suurendab sellega kasutuskulusid kurnades rakenduse omaniku rahakotti. Nende ohtude tõrjumiseks on tarvis täiendavat pädevust, et tagada tugev autentimine ja tõhus ressursihaldus, vältides nii operatiivset kui ka finantsilist kahju.

Mikroteenused pakkuvad mastaabitavust, aga toovad ühtlasi kaasa suurema keerukuse, jaotades süsteemi arvukateks omavahel ühendatud komponentideks, millest igal on oma sõltuvused ja võimalikud tõrkepunktid. Üksainus vigane konfiguratsioon või teenusekatkestus võib kergesti levida näiliselt mitteseotud osadesse, muutes tõrgete avastamise ja lahendamise keerulisemaks. Seetõttu on põhjalik jälgitavus (ingl *[[:en:Observability|observability]]*) vältimatu, et mõista süsteemi eri osade toimimist ja vastastikust mõju ulatuslikult. Samas lisab jälgitavuse rakendamine täiendavat halduskoormust, sest nõuab spetsiaalseid tööriistu, taristut ja eksperditeadmisi, mis võib märkimisväärselt kasvatada kulusid.

## Viited