-
Sovelluskehityskäytännöt
Sovelluskehityksen käytännöt Poudassa
Tässä artikkelissa käsitellään joitakin parhaita käytäntöjä, joita kehittäjien kannattaa noudattaa sovellusta luotaessa tai käyttöönotettaessa Poudassa, sekä sitä, miten Pouta voi auttaa niiden noudattamisessa. Pouta-pilvet (cPouta ja ePouta), kuten muutkin IaaS-pilvet, tarjoavat enemmän joustavuutta kuin perinteiset fyysiset laskentaympäristöt, mikä mahdollistaa uusia ja parempia toteutustapoja.
Alla luetellut suositukset keskittyvät siihen, mitä Pouta tarjoaa sinulle ja miten sovelluksesi voivat hyötyä siitä. Tämä ei ole kattava luettelo kaikista parhaista käytännöistä. Voit lisäksi noudattaa laajempaa joukkoa käytäntöjä, joista mainitsee Cloud Native Computing Foundation, sekä OpenStackiin liittyvää verkkokirjallisuutta, kuten teknisiä blogeja, käyttöoppaita, käyttäjätarinoita jne. Todellisissa tilanteissa kaikki nämä käytännöt eivät välttämättä sovellu sovellukseesi, mutta tämän artikkelin keskeinen viesti on, että kannattaa ottaa käyttöön ne käytännöt, jotka sopivat omaan käyttötapaukseesi.
Tilattomat ja kertakäyttöiset virtuaalikonesolmut
Jos mahdollista, pyri kehittämään sovelluksesi hajautettujen, tilattomien mikropalveluiden muodossa siten, että ne vastaavat itsenäisistä laskennallisista osatehtävistä ja kommunikoivat keskenään hyvin määritellyn rajapinnan kautta. Tämä on pitkälti mahdollista siksi, että voit luoda uusia virtuaalikoneita ja varata tallennustilaa muutamassa minuutissa.
Data, joka on useimmissa tilanteissa korvaamatonta, tulee tallentaa erillisiin pysyviin datan tallennuspalveluihin eikä itse virtuaalikoneeseen. Pouta-pilvissä tarjoamme objektitallennusta (Allas) ja taltiotallennusta (Cinder).
Sovelluksesta tulee vikasietoisempi. Kun käytetään tilattomia virtuaalikoneita ja data tallennetaan redundantteihin palveluihin, kuten [Cinderiin] tai Altaaseen (joita ylläpitävät niihin erikoistuneet ammattilaistiimit), vikojen vaikutus minimoituu. Jos virtuaalikonetta ajava laitteisto rikkoutuu äkillisesti, data ei katoa. Tämä poistaa yksittäisiä vikapisteitä (SPoF).
Tilattomat virtuaalikoneet
Helposti skaalautuva (horisontaalinen vs. vertikaalinen)
Jos sovellus noudattaa mikropalveluarkkitehtuuria (kuten edellisessä kohdassa mainittiin), se mahdollistaa helpon horisontaalisen skaalauksen eli saman virtuaalikoneen replikoiden lisäämisen tai poistamisen. Tämä lähestymistapa on joskus monimutkaisempi, koska tarvitset hajautettua laskentaa tukevan suunnittelun. Lisäksi tarvitaan jonkinlainen kuormantasaaja jakamaan työ virtuaalikoneiden kesken.
Kun tämä alkuhaaste on ratkaistu, sovelluksen horisontaalinen ylös- ja alasskaalaus on vähemmän monimutkaista. Jos laskenta ja data eivät ole tiukasti kytköksissä toisiinsa, suunnittelu mahdollistaa virtuaalikonereplikoiden lisäämisen tai poistamisen. Useammat replikat mahdollistavat myös laskentasolmujen hajauttamisen eri puolille konesalia ja vähentävät entisestään yksittäisten vikojen vaikutusta, mikä taas pienentää yksittäisten vikapisteiden määrää. Kuten jo mainittiin, ylös- ja alasskaalaus tapahtuu muutamassa minuutissa Poudan luonteen ansiosta.
Sovelluksille, jotka eivät mahdollista mikropalveluarkkitehtuuria, Pouta tarjoaa helpon vertikaalisen skaalauksen eli virtuaalikoneen koon muuttamisen vaihtamalla virtuaalikoneen flavor-tyyppiä ja lisäämällä tai poistamalla laskentaresursseja (CPU:t, RAM, levy jne.). Tämä on erittäin nopeaa, koska se vaatii vain lyhyen uudelleenkäynnistyksen. Virtuaalikoneessa ajettava ohjelmisto näkee uudelleenkäynnistyksen jälkeen automaattisesti enemmän resursseja. Ohjelmistoa ei tarvitse asentaa uudelleen. Tämä täydentää horisontaalista skaalausta (replikointia) tai toimii sen vaihtoehtona.
Horisontaalinen vs. vertikaalinen skaalaus
automaattinen skaalaus
Pouta-pilvissä voit myös skaalata Heat-pinoasi ohjelmallisesti käyttämällä OpenStack Heat resources -resursseja, kuten OS::Heat::ResourceGroup, OS::Heat::AutoScalingGroup ja OS::Heat::ScalingPolicy.
Eristetyt käyttöönottot ympäristöihin testaus ja tuotanto
Sinulla täytyy olla useita eristettyjä käyttöönottaympäristöjä, vähintään testaus ja tuotanto. Vaikka nimet voivat vaihdella ja useammatkin ympäristöt voivat olla tarpeen, vähintään nämä tarvitaan. On oltava testausympäristö, jossa sinä ja tiimisi voitte kokeilla muutoksia ja varmistaa, että ne toimivat suunnitellusti. Lisäksi on oltava tuotantoympäristö, joka on tarkoitettu käyttäjillesi. Ongelmat tulee löytää ja ratkaista testauksessa ennen kuin ne päätyvät tuotantoon. Pouta mahdollistaa useiden laskentaprojektien hakemisen, ja ne ovat rakenteellisesti eristettyjä toisistaan.
Yleinen sanonta
Kaikilla on testausympäristö. Jotkut ovat niin onnekkaita, että heillä on myös siitä täysin erillinen ympäristö tuotantoa varten.
Muita yleisiä käyttöönottotyyppejä ovat:
-
Esituotanto, joka sijoittuu testauksen ja tuotannon väliin. Siellä pidetään vakaata kopiota tuotannosta, mutta käyttäjillä ei ole siihen pääsyä. Muutokset kulkevat esituotannon kautta ennen tuotantoon päätymistä. Tämä on hyödyllistä, kun halutaan tehdä viimeinen integroitu testi useista yksittäisistä muutoksista yhdessä. Ympäristö jäädytetään yleensä joksikin aikaa ennen kuin muutokset viedään tuotantoon. On tavallista, että jokin pieni käyttäjäyhteisö (esimerkiksi kehitystiimi) käyttää tätä ympäristöä, jotta voidaan tehdä tosielämän testi.
-
Kehitys, jossa jokaisella tiimillä tai kehittäjällä on oma leikkikenttänsä yksittäisten muutosten rikkomiseen ja testaamiseen. Näitä ympäristöjä on yleensä useita, ja ne ovat kertakäyttöisiä.
Varmuuskopiot
Varmuuskopiot ovat kriittisiä mille tahansa sovellukselle. Ne suojaavat dataa vahingossa tapahtuvalta poistamiselta, laitteistovioilta, korruptiolta, kiristyshaittaohjelmilta ja muilta uhkilta. Datan varmuuskopiointiin on useita strategioita. Sovelluksesta ja sen sisältämästä datasta riippuen varmuuskopiointistrategia voi vaihdella. Strategiaan vaikuttavat esimerkiksi kustannukset, käyttöönoton monimutkaisuus ja datan toistettavuus. Pouta-pilvet eivät tarjoa valmista varmuuskopiointiratkaisua, mutta ne auttavat sellaisen rakentamisessa tarjoamalla kehittyneitä tallennusratkaisuja, kuten Cinder ja Allas.
Yksi yleinen varmuuskopiointistrategia on 3-2-1-sääntö: 3 kopiota datasta (mukaan lukien alkuperäinen tuotantokopio), 2 eri tallennusmediaa ja 1 varmuuskopio eri sijainnissa. Toinen perusperiaate on, että kopioita ei voida poistaa tai korruptoida alkuperäisestä lähteestä käsin (tämä auttaa ehkäisemään vahinkoja ja kiristyshaittaohjelmien vaikutuksia). Erillisen varmuuskopiointityökalun käyttöä suositellaan, sillä nämä työkalut mahdollistavat helposti muuttumattomien kopioiden luomisen asianmukaisilla päiväyksillä ja aikatauluilla. Ne helpottavat myös muita toissijaisia asioita, kuten salausta ja vanhojen varmuuskopioiden poistamista. On myös erittäin tärkeää varmistaa, että varmuuskopiot ovat todella käyttökelpoisia ja että data voidaan palauttaa suunnitellulla tavalla.
3-2-1-strategia
Käytä jatkuvaa integraatiota ja jatkuvaa toimitusta
Kehittämäsi sovellus, sen infrastruktuurin käyttöönottava IaC-koodi sekä sitä konfiguroiva konfiguraationhallintakoodi tulisi tallentaa valitsemaasi versionhallintajärjestelmään. Suosituin ja käytännössä vakiintunut standardi on GIT. Kun sovelluksen koodi on versionhallinnassa, seuraava askel on ottaa käyttöön jatkuva integraatio (CI) ja jatkuva toimitus (CD).
Git-kehitys ja yhteistyö
Kun sovelluksen koodi on versionhallinnassa, seuraava askel on ottaa käyttöön jatkuva integraatio (CI) ja jatkuva toimitus (CD).
CI tarkoittaa sitä, että jokainen koodipohjaan tehty muutos käännetään ja testataan automaattisesti. Tämä auttaa löytämään ongelmat aikaisemmin ja järjestelmällisesti. Lisättävät testit voivat olla yleisiä, kuten koodianalyysityökaluja, tai tarkoitukseen kirjoitettuja testejä, jotka tarkistavat koodin toiminnallisuuden ja estävät virheiden palaamisen. Lisäksi on tavallista käyttää sisäisiä prosessitarkistuksia, kuten varmistaa, että jokaisella uudella haaralla on siihen liittyvä tiketti. Kokemus tällaisista käytännöistä osoittaa, että CI säästää tiimeiltä aikaa ja vaivaa. Verkossa on useita tunnettuja CI-palveluita, kuten Travis CI, Circle CI ja Github actions, joiden käyttöönoton kynnys on matala ja jotka tuovat nopeasti lisäarvoa.
CD tarkoittaa sitä, että ohjelmiston tiettyjen versioiden julkaisu tehdään automaattisesti. Vielä tärkeämpää on, että näiden validoitujen versioiden käyttöönotto tapahtuu myös automaattisesti. Jos muutos siis läpäisee kaikki automaattiset testit sekä muiden kehitystiimin jäsenten tekemän katselmoinnin, muutos otetaan käyttöön automaattisesti. Tällainen automaation taso edellyttää myös vankkaa käyttöönottoprosessia, joka ei vaadi käyttökatkoa ja johon voidaan luottaa kokonaisuutena. Uusia käyttöön otettuja versioita valvotaan, ja tämä tieto johtaa todennäköisesti uusien versioiden suunnitteluun.

Käytä DevOps-työkaluja
Infrastructure as Code -työkalut
Infrastructure as Code (IaC) -työkalut ovat erittäin hyödyllisiä, koska niiden avulla voidaan määritellä monimutkaisia sovellusinfrastruktuureja (virtuaalikoneet, verkot, tallennus, ...) tekstimuotoisilla tiedostoilla (koodilla), joita kutsutaan malleiksi. Tämän jälkeen työkalu käyttää pilvipalveluntarjoajan APIa vastaavan infrastruktuurin automaattiseen luomiseen, konfigurointiin tai poistamiseen. Joitakin vakaita ja laajasti käytettyjä IaC-työkaluja ovat:
- Terraform on hyvin tunnettu IaC-työkalu. Se on tarkoitettu pelkästään IaC-työkaluksi. Se on pilviriippumaton "provider"-mallin ansiosta, esimerkiksi OpenStack provider. Katso esimerkki terraform-openstack-example.
- Heat on OpenStackiin integroitu työkalu. Katso esimerkki heat-openstack-example.
- Ansible sisältää joitakin moduuleja, jotka tarjoavat IaC-toiminnallisuutta. Katso esimerkki ansible-openstack-example.
Yllä näet kolme esimerkkiä, yhden kustakin työkalusta. Kaikkien tavoitteena on saavuttaa sama lopputulos: yksi tai useampi virtuaalikone, joihin on asennettu nginx ja joihin on otettu käyttöön muutamia paikallisia tiedostoja. Valitaksesi käytettävän työkalun sinun tulee arvioida työkalujen hyvät ja huonot puolet ja käyttää sitä, joka sopii parhaiten omaan käyttötapaukseesi. Jos ajatellaan esimerkiksi tukea, sekä Heat että Ansible ovat OpenStack-tiimin kehittämiä, kun taas Terraform-provider on yhteisön kehittämää ohjelmistoa. Lisäksi Heat toimitetaan OpenStackin mukana, ja sitä voidaan käyttää komentoriviltä tai selainkäyttöliittymästä. Lopuksi Heat on ainoa työkalu, jota Pouta-tiimi tukee täysin. Toisaalta Terraform on laajemmin käytetty, joten sille on helpompi löytää esimerkkejä ja apua kuin kahdelle muulle työkalulle.
Terraform-lisenssi
Terraformin lisenssi on muuttunut (kesä 2023), ja OpenTofu on vaihtoehtoinen asiakasohjelma, joka on luotu mahdollisten lisenssiongelmien välttämiseksi. Tällä hetkellä Tofu toimii suoraan korvaavana vaihtoehtona, mutta sen odotetaan eriytyvän ajan myötä. Tällä hetkellä Tofulle ei ole Ansible-moduulia.
Heatin selainkäyttöliittymä
Työkalut kehittyvät
Muista, että näiden (ja useimpien muiden) työkalujen tilanne muuttuu ajan myötä: tuki voi parantua tai loppua kokonaan, ominaisuuksia ja virheitä voidaan korjata, ...
Konfiguraationhallintatyökalut
Jokaisella rakentamallasi sovelluksella on riippuvuuksia ohjelmistokirjastojen ja niiden tiettyjen versioiden muodossa. Jotta sovelluksesi toimisi, nämä riippuvuudet tulee määritellä eksplisiittisesti ja asentaa automaattisesti. Konfiguraationhallintatyökalu, kuten Ansible tai Puppet, on paras tapa saavuttaa tämä. Konfiguraationhallintatyökalun käyttäminen riippuvuuksien määrittelyyn ja automaattiseen asentamiseen tekee käyttöönotoista toistettavampia ja ennustettavampia. Alla olevassa Ansible-esimerkissä tehtävä nimeltä "Install dependencies" asentaa muutamia työkaluja:
Kun kaikki riippuvuudet on määritelty, Ansible varmistaa, että ne on asennettu käyttöönottaympäristöön ennen kuin varsinainen sovellus otetaan käyttöön. Riippuvuuksia ei pidä koskaan asentaa manuaalisesti, vaan niiden asennus tulee automatisoida. Tämä parantaa toistettavuutta (kaikki järjestelmät asennetaan samalla tavalla) ja järjestelmä dokumentoi itse itsensä (on selvää, mitä pitää asentaa). On myös mahdollista määrittää ohjelmistoversiot, jotta asennuksesta tulee huomattavasti vakaampi.
Nämä periaatteet koskevat myös konfiguraatiota. Kun mahdollista, kannattaa käyttää upstream-moduuleja asennetun ohjelmiston konfiguraation hallintaan. Moduulit usein eristävät sinut alusta- ja versiokohtaisilta eroavaisuuksilta, eli kirjoitat saman konfiguraatiomäärittelyn eri ohjelmistoversioille ja eri käyttöjärjestelmäversioille, ja moduuli kääntää sen puolestasi.
Konfiguraationhallintatyökalut integroituvat erittäin hyvin Pouta-pilviin. Ne pystyvät lukemaan ja käyttämään virtuaalikoneiden käyttöönottokohtaisia arvoja, kuten IP-osoitteita, isäntänimiä jne. Tämä tarkoittaa, että näitä muuttujia ei tarvitse kovakoodata järjestelmään, ja ne pysyvät aina ajan tasalla. Jos meillä on esimerkiksi kuormantasaaja ja muutamia työsolmuja, kuormantasaajan täytyy tietää työsolmujen IP-osoitteet. Konfiguraationhallintatyökalu pystyy luomaan kuormantasaajan konfiguraation automaattisesti käyttäen OpenStackin APIsta saatavia tietoja. Lopputuloksena on hands-off-asennus- ja päivitysprosessi, jossa konfiguraationhallinta tekee kaiken työn eikä manuaalista työtä tarvita.
Selvitä vaihtoehdot ennen kehittämistä ja käyttöönottoa
Ennen kuin alat kehittää ja ottaa käyttöön uutta palvelua, on suositeltavaa selvittää, kattavatko olemassa olevat palvelut ja ohjelmistot jo käyttötapauksesi. Kannattaa välttää ajautumasta "not invented here" -syndroomaan, jossa organisaation sisällä kehitettyjä palveluita ja tuotteita suositaan perusteettomasti. Tilanne vaihtelee tapauskohtaisesti, sillä joskus projektin tarpeita ei voida kattaa olemassa olevilla ratkaisuilla. CSC tarjoaa joitakin palveluratkaisuja, joista sinun kannattaa olla tietoinen:
Noppe
Jos tarvitset Jupyter- tai RStudio-muistikirjan, CSC tarjoaa Noppe-palvelun. Se on kypsä palvelu, jota ylläpitää siihen erikoistunut ammattilaistiimi.
Rahti
Jos tarvitset Docker-konttien käyttöönottoa Kubernetesin kaltaisessa klusterissa, CSC tarjoaa Rahdin. Rahti on Red Hatin kehittämä OpenShift OKD.
Pukki
Jos tarvitset tietokannan, kannattaa tutustua Pukkiin, CSC:n Database as a Service -palveluun (tällä hetkellä suljetussa beetavaiheessa).
ota yhteyttä
Jos jokin näistä palveluista kiinnostaa sinua, mutta ne eivät kata tarpeitasi sataprosenttisesti, ota yhteyttä osoitteeseen servicedesk@csc.fi, niin selvitämme tilanteesi.
Yhteenveto
Pouta tarjoaa muutamia hyödyllisiä työkaluja ja resursseja, jotka helpottavat luotettavampien sovellusten kehittämistä. Pilvikäyttöönotot toimivat erittäin hyvin, kun sovellus noudattaa ajatusta kertakäyttöisistä mikropalveluista, jotka on valmisteltu skaalautumaan ylös ja alas läpinäkyvästi ja jotka on suunniteltu reagoimaan hyvin odottamattomiin vikatilanteisiin. Pouta tarjoaa joustavuutta eristettyjen kehitysympäristöjen helppoon käyttöönottoon. Lisäksi API antaa sinulle automaation koko voiman, ja DevOps-työkalujen ansiosta tämän voiman hyödyntäminen on yksinkertaista. Äläkä tietenkään koskaan unohda varmuuskopioida dataasi.