Pilvipalvelut 22.08.2019

Oikeat alustat yrityksesi työkuormille, osa 2: vertailussa container ja serverless

Kaiken takana on palvelin. Lähetätpä sitten sähköpostia tai etsit hakukoneesta vastauksia, taustalla raksuttaa jonkinlainen palvelin. Palvelimet ovat keskitettyjä tietokoneita, jotka välittävät erilaisia tietoteknisiä ratkaisuja käyttöömme. Ne koostavat yhteen järjestelmäalustoja, joihin voi asentaa sovelluksia. Sovellukset tuottavat käyttötarkoituksensa mukaisia palveluita, jotka avustavat meitä muun muassa tietojen säilömisessä, hakemisessa, jakamisessa ja laskemisessa.

Palvelimia on monenkokoisia ja mitä erilaisimpiin käyttötarkoituksiin räätälöityjä. Yleensä yrityksellä on useita työkuormia, jotka on rakennettu erilaisten palvelimien päälle. Yksi palvelinratkaisu ei siis riitä, vaan yrityksen täytyy tunnistaa mikä alusta on paras minkäkin työkuorman suorittamiseen.

Koska vaihtoehtoja on monia, valinnan tekeminen ei ole helppoa. Tässä blogisarjassa käsittelen neljää suosituinta ratkaisua: fyysinen palvelin, virtuaalipalvelin, container ja serverless. Tämä on sarjan toinen osa, jossa vuorossa ovat container ja serverless -ratkaisut.

Lue myös blogisarjan ensimmäinen osa: Fyysinen palvelin ja virtuaalipalvelin

 

Mitä etuja on container-ratkaisulla?

Virtualisointi tuo merkittäviä etuja pelkkien fyysisten palvelimien käyttöön verrattuna, mutta pidemmän päälle useat virtuaalipalvelimet ja niiden käyttöjärjestelmät saattavat viedä ylimääräisiä resursseja ja aiheuttaa lisäkustannuksia. Vaikka virtualisoinnin avulla saadaan investointeja kohdistettua fyysisiä palvelimia tarkemmin sovellusten käyttöön, haukkaavat käyttöjärjestelmät kuitenkin ison osan virtuaalipalvelimelle määritetyistä resursseista. Lisäksi useamman sovelluksen ajaminen yksittäisessä virtuaalipalvelimessa ei välttämättä onnistu, mikäli sovellukset ovat riippuvaisia samoista käyttöjärjestelmäkomponenteista.

Kustannustehokkuutta ajatellen olisi hyvä saada resurssitarpeet mahdollisimman alhaiseksi ja hankkiutua eroon hukkakäytöstä - containerit tuovat helpotusta tähän pulmaan.

Siinä missä virtualisointi jakaa virtuaalipalvelimille laiteresursseja jäljilttelemällä fyysisten palvelinten ominaisuuksia, container-teknologiat jakavat alustapalvelimensa käyttöjärjestelmän. Käyttöjärjestelmää ei asenneta erikseen jokaista sovellusta varten ja näin säästetään resurssitarpeissa.

Containerit ovat virtuaalipalvelimien kaltaisia eristettyjä ja vielä tarkemmin käyttötarkoitukseensa räätälöityjä palveluyksiköitä, jotka paketoivat sovellukset ja niiden tarvitsemat riippuvuudet helposti hallittaviksi vakiomuotoisiksi kokonaisuuksiksi.

Containereissa ajetaan samoja palvelinsovelluksia kuten virtuaalipalvelimissa, mutta niiden sisältä on parhaimmillaan riisuttu kaikki tarpeettomat toiminteet ja ominaisuudet pois. Näin containereista saadaan pienikokoisempia ja helpommin liikuteltavia. Containerit tuovat samoja etuja kuin kaimansa merikontit (container), joiden vakiokokoisuus on tehostanut tavaraliikenteen kuljetuskustannuksia vähentämällä irtolastin käsittelykustannuksia sekä varastointi- ja lajittelutarpeita.

Kontit kulkevat ajoympäristöstä riippumatta

Merikonttien tapainen vakiokokoisuus toteutuu containereissa niiden kuvaustavassa. Riippumatta tuotettavasta sovelluksesta containerit kuvataan samojen ehtojen mukaisesti ja on ajettavissa millä tahansa alustakoneella tuottaen samanlaisen toiminnallisuuden. Toisin sanoen oli containerin ajoympäristö sitten oma kannettava tietokone, konesalissa sijaitseva fyysinen tai virtuaalinen palvelin, niin samaa alustateknologiaa käytettäessä container toimii kaikissa näissä alustoissa tuottaen samat toiminnallisuudet.

Containereiden yleistymisen myötä, on niiden toimintaympäristöille luonnollisesti asetettu entistä kovempia vaatimuksia. Aivan kuten virtuaalipalvelimien ajoympäristöjä tuotetaan klustereista, muun muassa vikasietoisuuden ja päivitettävyyden parantamiseksi, on containereille kehitetty vastaavia klusterointimenetelmiä. Koska containereiden toimintaympäristöt muodostetaan yleensä virtuaalisten alustapalvelimien päälle, on niiden lukumäärää suhteellisen helppo kasvattaa tai pienentää ajettavien työkuormien mukaan.

Hallittavuuden säilymiseksi on alustaklustereita varten kehitetty erillisiä teknologioita, joiden avulla containereiden ajoympäristöjen hallinta pysyy hallussa. Lisäksi hallintateknologiat voivat tehostaa myös itse containereista tuotettavien sovelluksien klusterointia, skaalaamista ja päivittämistä. Osa käytetyistä teknologioista kykenee seuraamaan tuotettavien sovelluksien toimintaa ja jopa suorittamaan automaattisia korjaustoimenpitetä.

Containereiden keskeisimpiä etuja:

  • Skaalautuvuus – Containereiden alustapalvelimet ovat yleensä virtuaalipalvelimia, jotka tuottavat containereiden tarvitsemat laiteresurssit. Koska virtuaalipalvelimia on helppo lisätä ja poistaa, voi alustapalvelimien lukumäärää muuttaa containereiden tarvitseman kuormituksen mukaan: uusia alustapalvelimia otetaan käyttöön vain tarvittaessa ja vapautetaan, kun niille ei ole enää käyttöä.
  • Vakiokokoisuus – Containerit kuvataan samojen ehtojen mukaisesti. Toimipa alustapalvelimena sitten kannettava tietokone, fyysinen tai virtuaalinen palvelin, container kykenee tuottamaan samat toiminnallisuudet kaikilla alustoilla.
  • Eristäminen – Containereiden avulla on helppo muodostaa toisistaan eristettyjä sovellusten ajoympäristöjä, esimerkiksi tilanteisiin, missä sovellusten ei ole syytä keskenään jakaa tietoja ja päästä toisten sovellusten tietoihin. Huomioitavaa kuitenkin on, että sovellusten käyttöön tai julkaisuun tarvittavien ulkopuolisten resurssien, kuten verkkoyhteyksien määrittäminen voi sijainnista riippuen mennä hyvinkin eri tavoin.
  • Liikuteltavuus – Pienen ja vakiokokoisuutensa vuoksi containerit on helppo sijoittaa minne tahansa.
  • Nopeat käyttöönottoajat – Sovellusten kokeilu ja uusien versioiden julkaisu on nopeaa. Containerit myöskin käynnistyvät nopeasti, koska käyttöjärjestelmä on jo alustapalvelimella valmiiksi käynnissä.
  • Uudelleenkäytettävyys – Containereihin tehtyjen toteutusten jakaminen on helppoa. Usein myös sovellustoimittajat ylläpitävät valmiiksi containereina julkaistujen sovellustensa mallikokoonpanoja, joita voi itse räätälöidä omaan käyttötarkoitukseensa sopiviksi.
  • Versiointi – Containereita käytettäessä jokaisella sovellusversiolla on oma versiotunniste, eli vaikka dokumentointi ei olisikaan sen ylläpitäjän vahvuuksia, eri sovellusversiot on helppo tunnistaa.
  • Päivitettävyys – Sovelluksen päivittäminen suoritetaan ideaalitilanteessa luomalla uusi versio vanhan rinnalle, jonka jälkeen palvelut voidaan siirtää hallitusti uuteen versioon. Mikäli uudessa versiossa on virheitä, on vanhempi versio myös helposti palautettavissa.

Mitä etuja on serverless-ratkaisulla?

Serverless eli palvelimettomat ratkaisut ovat palveluntarjoajien tuottamia valmiita, ylläpidettyjä palveluita, joiden avulla sovellusten toiminnoille on mahdollista hankkia entistä pienempiä suorituspaikkoja. Yksinkertaistettuna toiminnot ovat sovellusten tarvitsemia sisäisiä funktioita.

Serverless-ratkaisut eivät oikeasti ole palvelimettomia, vaan laitekapasiteettina toimii fyysiset palvelimet. Ajettava toiminto suoritetaan käyttötarkoitukseen suunnitellussa ympäristössä, joka hyvinkin todennäköisesti on container. Tilaajalle ratkaisu kuitenkin näkyy palvelimettomana.

Serverless-ratkaisujen käyttöönotossa ei välttämättä tarvitse itse määrittää, paljonko toiminto tarvitsee resursseja toimiakseen tai miten alustojen päivitys tai fyysisten laitteiden vikaantumisesta palautuminen hoidetaan. Palveluntarjoaja huolehtii kaikesta tästä puolestasi ja tarjoaa käyttöösi liudan ominaisuuksia, joita voit hyödyntää.

Serverless-palveluiden etuja:

  • Kustannussäästöt – maksat mitä käytät.
  • Skaalautuvuus – järjestelmät skaalautuvat isommiksi tai pienemmiksi kuormituksen mukaan ja joku muu huolehtii, että resursseja on aina käytettävissä.
  • Helppous – Serverless-ratkaisujen käyttöönotto on helppoa ja nopeaa. Aikaa säästyy parempien sovellusten tekemiseen.

Serverless-ratkaisuissa on omat rajoitteensa, sillä ne on rakennettu tiettyjä käyttötarkoituksia tai ohjelmointikieliä varten. Toisaalta ne voivat olla hyvin vaivattomia ja helppoja.

Usein serverless-ratkaisuina voidaan pitää funktioiden ajopalveluita, jotka suorittavat määritetyn funktion mukaisen toiminteen siihen syötettäviä tietoja vasten ja antavat tuloksen ilman, että funktiota varten on tarvetta pitää erillistä palvelinta odottamassa käskyä. Karkeasti yksinkertaistettuna yhteenlaskuoperaatiossa kaksi yhteenlaskettavaa lukua (syötteet) lasketaan yhteen (funktio) tuottaen lukujen summan (tulos).

Funktioiden ajopalveluille on monia käyttötarkoituksia, joissa kaikissa ladataan ja käsitellään tietoa. Ratkaisuna annetaan joko laskettu tulos tai tieto muutetussa muodossa ulos.

Yksinkertaisena esimerkkinä voisi pitää valokuvien koon muuttamista verkkokaupan käyttöön. Kun myytävistä tuotteista luodaan myyntikuvia, on niistä usein tarpeellista tehdä monta erikokoista versiota vaikka etusivua, sähköposteja ja tuotekuvausta varten. Yksittäisestä kuvasta on suhteellisen vaivatonta luoda ohjelmallisesti erikokoisia vastineita. Kun kuvakoon muuttamiseen tarkoitettu funktio määritetään funktioiden ajopalveluun, toimisi syötteenä uusi ladattu kuva, funktiona edellä mainittu ohjelmallinen muunnin ja tuloksena kolme erikokoista kuvaa tallennettuna suunniteltuihin sijainteihin.

Kannattaa huomioida, että mikäli funktionajopalvelussa ajetaan jatkuvasti samanlaisia komentoja, saattavat kustannukset nousta. Joissakin tilanteissa voi olla perustellumpaa määrittää oma palvelin suorittamaan funktiota vastaavat toimenpiteet. Toisaalta, mikäli funktiota ajetaan todella harvoin, voi olla, että pidempien taukojen jälkeen ensimmäiset funktiokutsut saattavat käynnistyä hitaammin, koska funktiota suorittava ympäristö herää horroksesta käyntiin.

Toinen esimerkki serverless-ratkaisuista on palvelimettomat tietokannat. Usein tietokantoja varten kiinnitetään järeähköjä virtuaalisia tai jopa fyysisiä palvelimia. Tällä tavoin määritetyt palvelimet on usein mitoitettava niille oletettujen huippukuormien mukaan, jotta sovellusten toiminta ei pääsisi heikkenemään. Kuormitusajan ulkopuolella palvelimille on määritetty liikakapasiteettia, mikä voidaan nähdä hukkainvesointina.

Serverless-tietokannat mahdollistavat tietokantapalveluiden hankkimisen tarpeen mukaan. Näissä tietokantapalveluissa toiminnot vastaavat yleisesti käytössä olevia tietokantoja, mutta niiden kustannukset muodostuvat maksat-mitä-käytät mallin mukaan. Todellisuudessa taustalla on jaettuja järjestelmäkokonaisuuksia, joiden resursseja annetaan niitä kulloinkin tarvitsevalle tietokannalle sopiva määrä. Huippukuormitusaikoina tilaajat maksavat palveluista enemmän ja taaseen hiljaisempina hetkinä vähemmän. Investoinnit kohdistuvat tarkemmin työkuormien ja liiketoiminnan tarpeeseen.

 

Haluat ottaa haltuun lisää IT:n perustermejä? Suosittelemme, että luet seuraavaksi oppaamme eri pilvipalveluiden eduista ja haasteista. Vertailimme tärkeimmät ratkaisut ja koostimme tärkeimmät vinkit oikean palvelun valintaan.



Heikki Lavanko

 

Katso myös